自学内容网 自学内容网

ubuntu下的chattts 学习5:Example: self introduction

代码

import ChatTTS
import torch
import torchaudio

chat = ChatTTS.Chat()
chat.load(compile=False) # Set to True for better performance
###################################
inputs_en = """
chat T T S is a text to speech model designed for dialogue applications. 
[uv_break]it supports mixed language input [uv_break]and offers multi speaker 
capabilities with precise control over prosodic elements like 
[uv_break]laughter[uv_break][laugh], [uv_break]pauses, [uv_break]and intonation. 
[uv_break]it delivers natural and expressive speech,[uv_break]so please
[uv_break] use the project responsibly at your own risk.[uv_break]
""".replace('\n', '') # English is still experimental.

params_refine_text = ChatTTS.Chat.RefineTextParams(
    prompt='[oral_2][laugh_0][break_4]',
)

audio_array_en = chat.infer(inputs_en, params_refine_text=params_refine_text)
torchaudio.save("self_introduction_output.wav", torch.from_numpy(audio_array_en[0]), 24000)

最后出错了。

如下:

 UserWarning: The use of `x.T` on tensors of dimension other than 2 to reverse their shape is deprecated and it will throw an error in a future release. Consider `x.mT` to transpose batches of matrices or `x.permute(*torch.arange(x.ndim - 1, -1, -1))` to reverse the dimensions of a tensor. (Triggered internally at ../aten/src/ATen/native/TensorShape.cpp:3683.)
  src = src.T
Traceback (most recent call last):
  File "/home/duyicheng/gitee/ChatTTS/intr.py", line 22, in <module>
    torchaudio.save("self_introduction_output.wav", torch.from_numpy(audio_array_en[0]), 24000)
  File "/home/duyicheng/anaconda3/envs/chattts/lib/python3.12/site-packages/torchaudio/_backend/utils.py", line 313, in save
    return backend.save(
           ^^^^^^^^^^^^^
  File "/home/duyicheng/anaconda3/envs/chattts/lib/python3.12/site-packages/torchaudio/_backend/ffmpeg.py", line 316, in save
    save_audio(
  File "/home/duyicheng/anaconda3/envs/chattts/lib/python3.12/site-packages/torchaudio/_backend/ffmpeg.py", line 248, in save_audio
    s.add_audio_stream(
  File "/home/duyicheng/anaconda3/envs/chattts/lib/python3.12/site-packages/torio/io/_streaming_media_encoder.py", line 278, in add_audio_stream
    self._s.add_audio_stream(
RuntimeError: Failed to open codec: (Invalid argument)
Exception raised from open_codec at /__w/audio/audio/pytorch/audio/src/libtorio/ffmpeg/stream_writer/encode_process.cpp:194 (most recent call first):
frame #0: c10::Error::Error(c10::SourceLocation, std::string) + 0x96 (0x75c2fb4b2446 in /home/duyicheng/anaconda3/envs/chattts/lib/python3.12/site-packages/torch/lib/libc10.so)
frame #1: c10::detail::torchCheckFail(char const*, char const*, unsigned int, std::string const&) + 0x64 (0x75c2fb45c6e4 in /home/duyicheng/anaconda3/envs/chattts/lib/python3.12/site-packages/torch/lib/libc10.so)
frame #2: <unknown function> + 0x46c3f (0x75c2f28cac3f in /home/duyicheng/anaconda3/envs/chattts/lib/python3.12/site-packages/torio/lib/libtorio_ffmpeg6.so)
frame #3: torio::io::get_audio_encode_process(AVFormatContext*, int, int, std::string const&, std::optional<std::string> const&, std::optional<std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > > > const&, std::optional<std::string> const&, std::optional<int> const&, std::optional<int> const&, std::optional<torio::io::CodecConfig> const&, std::optional<std::string> const&, bool) + 0x250 (0x75c2f28d14d0 in /home/duyicheng/anaconda3/envs/chattts/lib/python3.12/site-packages/torio/lib/libtorio_ffmpeg6.so)
frame #4: torio::io::StreamingMediaEncoder::add_audio_stream(int, int, std::string const&, std::optional<std::string> const&, std::optional<std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > > > const&, std::optional<std::string> const&, std::optional<int> const&, std::optional<int> const&, std::optional<torio::io::CodecConfig> const&, std::optional<std::string> const&) + 0x90 (0x75c2f28d8dd0 in /home/duyicheng/anaconda3/envs/chattts/lib/python3.12/site-packages/torio/lib/libtorio_ffmpeg6.so)
frame #5: <unknown function> + 0x3acbb (0x75c22799ecbb in /home/duyicheng/anaconda3/envs/chattts/lib/python3.12/site-packages/torio/lib/_torio_ffmpeg6.so)
frame #6: <unknown function> + 0x31dfc (0x75c227995dfc in /home/duyicheng/anaconda3/envs/chattts/lib/python3.12/site-packages/torio/lib/_torio_ffmpeg6.so)
<omitting python frames>
frame #18: <unknown function> + 0x2a1ca (0x75c30022a1ca in /lib/x86_64-linux-gnu/libc.so.6)
frame #19: __libc_start_main + 0x8b (0x75c30022a28b in /lib/x86_64-linux-gnu/libc.so.6)

解决:未验证:明天再说。

根据你提供的错误信息,问题主要集中在两个方面:

1. **使用 `x.T` 进行张量转置的弃用警告**:
   - 错误信息提示 `x.T` 在维度不是2的情况下使用已被弃用,并将在未来版本中抛出错误。
   - 建议使用 `x.mT` 来转置批次矩阵,或者使用 `x.permute(*torch.arange(x.ndim - 1, -1, -1))` 来反转张量的所有维度。

2. **保存音频文件时的运行时错误**:
   - 错误信息显示在尝试保存音频文件时,FFmpeg 编解码器无法打开,原因是无效参数。
   - 具体错误发生在 `torio::io::get_audio_encode_process` 函数中。

### 解决方案

#### 1. 处理 `x.T` 弃用警告
如果你的代码中有类似 `x.T` 的用法,建议替换为推荐的方法。例如:
```python
# 替换 x.T 为 x.mT 或 x.permute(*torch.arange(x.ndim - 1, -1, -1))
# 示例:
# x = x.mT  # 如果 x 是一个批次矩阵
# 或者
# x = x.permute(*torch.arange(x.ndim - 1, -1, -1))  # 反转所有维度
```


#### 2. 解决音频保存错误
音频保存错误可能是由于音频数据格式或参数设置不正确导致的。以下是一些可能的解决方案:

- **检查音频数据格式**:
  - 确保 `audio_array_en[0]` 是一个正确的音频数组,通常是一个二维数组,其中第一维是通道数,第二维是样本数。
  - 使用 `torch.from_numpy(audio_array_en[0])` 转换后,确保得到的是一个浮点类型的张量,并且值在合理范围内(通常是 -1 到 1)。

- **调整采样率**:
  - 确认 `24000` 是正确的采样率。如果不正确,修改为正确的采样率。

- **检查 FFmpeg 安装**:
  - 确保 FFmpeg 已正确安装并且配置正确。可以通过命令行运行 `ffmpeg -version` 来验证。

- **调试音频数据**:
  - 尝试先将音频数据保存为其他格式(如 `.wav`),看看是否能成功保存,以排除数据本身的问题。

- **查看文档和社区支持**:
  - 查阅 `torchaudio` 和 `torio` 的官方文档,寻找关于音频保存的更多信息。
  - 如果问题依然存在,可以在相关的 GitHub 讨论区或 Stack Overflow 上寻求帮助。

希望这些建议能帮助你解决问题!


原文地址:https://blog.csdn.net/weixin_42771529/article/details/144296874

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!