gpt4 book ai didi

audio - midi 到 ogg - 管道失真

转载 作者:行者123 更新时间:2023-12-02 01:47:37 27 4
gpt4 key购买 nike

我正在尝试将 midi 文件转换为 ogg 或 mp3。最终这将发生在 linux 网络服务器上,但目前我使用的是 Windows 7 机器。我正在使用 timidity 将 midi 转换为 wav,然后使用 sox 或 ffmpeg 将 wav 转换为 ogg/mp3。

当我使用中间文件时,该过程可以正常工作(在胆怯下面的第一行中创建file.wav)

timidity.exe file.mid -Ow
sox.exe file.wav file.ogg

但是,当我尝试将胆怯输出通过管道传输到 sox(如下所示)时,生成的文件 ogg 严重失真
 timidity.exe file.mid -Ow -o - | sox.exe -t wav - file.ogg

我收到警告
 sox.exe WARN wav: Premature EOF on .wav input file

当我用 ffmpeg(和适当的命令行选项)替换 sox 时,或者当我用 mp3 替换 ogg 作为输出格式时,我也会遇到同样的失真问题。

那么我做错了什么?

谢谢,

克里斯

最佳答案

关于警告本身,您没有做错任何事。您可能还会看到来自胆怯的警告,内容如下

Warning: -: Illegal seek: Can't make valid header

胆怯手册页中解释了那里发生的事情:

If output is directed to a non-seekable file, or if TiMidity++ is interrupted before closing the file, the file header will contain 0xffffffff in the RIFF and data block length fields.



请注意,RIFF 是通常由其文件扩展名 .wav 调用的编码格式。 .当 timidity 写入 RIFF 文件时,它不知道该文件将有多长,因此它会在标题中写入一些占位符垃圾并继续写入数据。当它完成数据时,它知道文件有多长,因此它会回到文件的开头并覆盖标题中的垃圾。当您写入管道时,它无法返回并重写任何内容:下游程序必须处理占位符垃圾。同样来自胆怯手册页:

The popular sound conversion utility sox is able to read such malformed files, so you can pipe data directly to sox for on-the-fly conversion to other formats.



因此,您提到的消息。 Sox 通知您,厨师准备的文件有误,但 SOX 很乐意吃它,因为 SOX 不挑剔。 Sox 显然是被动攻击型的。谁知道?

你可以忽略那些警告信息,因为现在它们告诉你一些你已经知道的事情。或者,您可以使用原始格式并明确告诉 timidity 和 sox 如何与彼此打得好:
timidity file.midi -Or1Ssl -s44.1 -o- | sox -t raw -b 16 -e signed -r 44.1k -c 2 - file.ogg

至于失真,部分原因可能是 Windows 系统上的音频库中的怪癖。我注意到问题中的管道没有 .exe扩展,在 linux 系统上产生没有明显失真的输出。在管道中使用定义明确的原始格式也可能有助于解决该问题。

请注意,对于 Ogg 输出,您现在可以直接从 timidity 中获取:
timidity file.midi -o file.ogg -Ov

关于audio - midi 到 ogg - 管道失真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24642145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com