语音合成
语音合成,也被称为文语转换(Text to Speech,TTS),是一种将文本信息转换为自然流畅语音的技术。
原理
- 基于规则:早期的语音合成技术常基于规则,语言学家和声学专家会制定一系列规则,包括对文本进行分词、词性标注、韵律分析等,然后根据这些规则将文本转换为对应的语音参数,再通过语音合成器生成语音。
- 统计建模:随着技术发展,统计建模方法如隐马尔可夫模型(HMM)被广泛应用。该方法通过对大量语音数据的学习,建立起文本特征与语音特征之间的统计关系,从而根据输入文本生成相应语音。
- 深度学习:当下,深度学习在语音合成领域占据主导地位。如 WaveNet、Tacotron 等模型,能够直接从文本中学习到丰富的语音特征表示,生成更加自然、流畅的语音。这些模型可以自动捕捉文本中的语义、语法和韵律等信息,进而合成高质量的语音。
运行实例
OriginMan使用到的TTS实现方式是通过大模型网关技术,将文本给到大模型网关,通过网关模型进行音频数据合成。
基于python
首先可以使用一个Python示例体验一下TTS。
cd /userdata/dev_ws/src/originman/originman_pydemo/audio
python3 audio_gengerator.py --txt "我是originman,一个帅气 的智能人形机器人" --output "originman.wav"
此时将会看到如下终端信息:
root@ubuntu:/userdata/dev_ws/src/originman/originman_pydemo/audio# python3 audio_gengerator.py --txt "我是originman,一个帅气 的智能人形机器人" --output "originman.wav"
2025-02-28 12:35:11,921 - INFO - Text-to-Speech initialized.
2025-02-28 12:35:11,921 - INFO - Received command-line text: '我是originman,一个帅气 的智能人形机器人'
2025-02-28 12:35:11,923 - INFO - Text split into 1 sentences
2025-02-28 12:35:11,925 - INFO - Synthesizing text: '我是originman,一个帅气 的智能人形机器人。'
2025-02-28 12:35:12,303 - INFO - Websocket connected
2025-02-28 12:35:14,489 - INFO - Audio saved to: originman.wav
2025-02-28 12:35:14,490 - INFO - Playing segment 1
2025-02-28 12:35:18,719 - INFO - All audio segments played
2025-02-28 12:35:18,720 - INFO - Last spoken text updated to: '我是originman,一个帅气 的智能人形机器人'
2025-02-28 12:35:18,723 - INFO - Last spoken text: '我是originman,一个帅气 的智能人形机器人'
其中 --txt 后接的内容即为文本转音频的数据,--output 后为合成音频后的数据。也可以不添加参数执行,即为终端输入文本,而后持续生成音频。
运行后即可在终端输入你想OriginMan说的内容!root@ubuntu:/userdata/dev_ws/src/originman/originman_pydemo/audio# python3 audio_gengerator.py
2025-02-28 12:38:04,677 - INFO - Text-to-Speech initialized.
2025-02-28 12:38:04,677 - INFO - Entering interactive mode. Enter text and press Enter to generate speech.
2025-02-28 12:38:04,678 - INFO - Press Ctrl+C to exit.
Enter text to synthesize (Ctrl+C to exit): 你好
2025-02-28 12:38:06,546 - INFO - Received input: '你好'
2025-02-28 12:38:06,548 - INFO - Text split into 1 sentences
2025-02-28 12:38:06,549 - INFO - Synthesizing text: '你好。'
2025-02-28 12:38:06,928 - INFO - Websocket connected
2025-02-28 12:38:07,762 - INFO - Playing segment 1
2025-02-28 12:38:08,358 - INFO - All audio segments played
2025-02-28 12:38:08,359 - INFO - Last spoken text updated to: '你好'
基于ROS2话题
既然可以使用Python实现,那必然可以用ROS2实现啦! 同时可以支持使用话题发布希望说的文本数据。
打开一个终端,执行以下指令:
此时可以看到log中输出相关的使用日志示例:
root@ubuntu:/userdata/dev_ws/src/originman/originman_pydemo/audio# ros2 run originman_llm_chat text_to_speech_node
[INFO] [1740717712.694830884] [text_to_speech_node]: 使用示例:ros2 topic pub /tts_input std_msgs/msg/String "data: '请告诉我今天的天气。'"
[INFO] [1740717712.697192923] [text_to_speech_node]: 文本转语音节点已启动,等待输入/tts_input话题数据...
另外打开一个终端,输入提示内容
Attention
需要先完成联网操作,联网步骤请参考网络配置与远程开发方法