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

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 请问Ubuntu要怎么安装chrome呀?
    • ¥15 视频编码 十六进制问题
    • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
    • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
    • ¥15 FileNotFoundError 解决方案
    • ¥15 uniapp实现如下图的图表功能
    • ¥15 u-subsection如何修改相邻两个节点样式
    • ¥30 vs2010开发 WFP(windows filtering platform)
    • ¥15 服务端控制goose报文控制块的发布问题
    • ¥15 学习指导与未来导向啊