Skip to content

Latest commit

 

History

History
87 lines (63 loc) · 2.64 KB

File metadata and controls

87 lines (63 loc) · 2.64 KB
title 如何生成&发送语音

介绍

目前python-wechaty已完成audio 消息类型的测试,本文档包含如下内容:

  • 安装
  • 发送语音文件
  • 将wav/mp3等其它类型文件转化成silk语音文件
  • 使用paddlespeech生成语音

安装

pip install wechaty

pip install wechaty-puppet>=0.4.19

注意点:需要保证wechaty-puppet的版本>=0.4.19

发送语音文件

async def on_message(self, msg: Message) -> None:
    """listen message event"""
    if msg.room():
        return

    if msg.type() == MessageType.MESSAGE_TYPE_AUDIO:
        # 保存用户发送的语音文件
        file_box = await msg.to_file_box()
        saved_file = os.path.join(self.cache_dir, file_box.name)
        await file_box.to_file(saved_file)

        # 将本地保存的语音文件发送给说话者
        new_audio_file = FileBox.from_file(saved_file)
        new_audio_file.metadata = {
            "voiceLength":2000
        }
        await msg.talker().say(new_audio_file)

生成silk语音文件

此过程使用Python-Silk-Module 来完成silk语音文件的生成,操作非常简单,有手就会:

import pysilk

# 编码部分,输出silk
#pysilk.encode(pcm_data: bytes, data_rate=24000)
pysilk.encode_file(open("mopemope.pcm", "rb"), 24000)
# 解码部分,输出pcm
# to_wav为True时输出wav文件
#pysilk.decode(silk_data: bytes, to_wav = False)
pysilk.decode_file(open("brainpower.pcm", "rb"), to_wav=False)

silk文件转成 pcm & wav

silk语音文件编解码过程可以使用pilk,编解码也非常方便

import pilk
def silk2pcm(input_silk, out_pcm, pcm_rate = 24000):
    duration = pilk.decode(input_silk, out_pcm, pcm_rate=pcm_rate)
    return duration, out_pcm

将silk文件转成pcm后,可以直接读取pcm数据也可以使用ffmpeg将其转换成wav文件,这里推荐使用ffmpeg

import os
def pcm2wav(input_pcm, out_wav, sr):
    cmd = f"ffmpeg -y -f s16le -ar {sr} -ac 1 -i {input_pcm} {out_wav}"
    os.system(cmd)

根据文本生成音频文件

此过程推荐使用paddlespeech直接根据文本生成wav音频文件,然后使用pysilk转化成可发送的目标音频文件。

给大家推荐一个宝藏Repo: PaddleSpeechDemo,此作者为届时PaddleSpeech PM,目前处于开发阶段,以后也会持续更新,有需求的小伙伴可以持续关注。