qumoy 2023-06-09 13:57 采纳率: 100%
浏览 161
已结题

Python edge-tts生成wav编码格式转换

使用edge_tts进行语音转换,保存的wav格式只有chunk['data'],虽然可以播放,但是不是标准的wave格式,尝试这转成wave格式确无法播放;
使用在线网站进行转换可以成功(单通道,双字节,44100Hz),网站地址:


下面是我的python代码,以及转换前后的文件;

import asyncio
import struct
import edge_tts
import wave
from pydub import AudioSegment
import io

OUTPUT_FILE = "output.wav"
SAMPLE_RATE = 44100
CHANNELS = 1
SAMPLE_WIDTH = 2  # 16-bit audio
TEXT = "这里是语音流测试"
VOICE = "Microsoft Server Speech Text to Speech Voice (zh-CN, XiaoxiaoNeural)"


# 根据实际需求进行采样和格式化处理的函数
def process_audio_data(audio_data):
    # 在这里进行采样和格式化处理,确保输出的数据符合 WAV 文件要求
    # 这可能包括改变采样率、通道数、采样精度等操作
    processed_data = audio_data
    return processed_data


async def _main() -> None:
    communicate = edge_tts.Communicate(TEXT, VOICE)
    # 创建 WAV 文件并写入音频数据
    with wave.open(OUTPUT_FILE, "wb") as wav_file:
        wav_file.setnchannels(CHANNELS)
        wav_file.setsampwidth(SAMPLE_WIDTH)
        wav_file.setframerate(SAMPLE_RATE)

        async for chunk in communicate.stream():
            if chunk["type"] == "audio":
                audio_data = chunk["data"]
                # 通过 BytesIO 将音频数据转换为文件对象
                audio_file = io.BytesIO(audio_data)
                # 使用 AudioSegment 加载音频文件
                audio_segment = AudioSegment.from_file(audio_file, format="raw", frame_rate=44100, channels=1,
                                                       sample_width=2)
                # 保存为 WAV 格式的文件
                output_file = "outputAudioSegment.wav"
                audio_segment.export(output_file, format="wav")
                # 采样和格式化处理
                processed_data = process_audio_data(audio_data)

                # 将处理后的音频数据写入 WAV 文件
                wav_file.writeframes(struct.pack("<" + ("h" * len(processed_data)), *processed_data))


if __name__ == "__main__":
    asyncio.run(_main())


  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 6月17日
    • 创建了问题 6月9日

    悬赏问题

    • ¥15 乘性高斯噪声在深度学习网络中的应用
    • ¥15 运筹学排序问题中的在线排序
    • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
    • ¥30 求一段fortran代码用IVF编译运行的结果
    • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
    • ¥15 C++ 头文件/宏冲突问题解决
    • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
    • ¥50 安卓adb backup备份子用户应用数据失败
    • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
    • ¥30 python代码,帮调试,帮帮忙吧