0

我们正在尝试使用 SoX 将我们的 WAV 转换为 iPhone 项目的 CAF。目前,作为办公室中唯一一台 Mac 的拥有者,我必须定期运行 afconvert 来执行此操作,但我更希望实际制作音频的人可以在 Windows 上执行此操作。

我从源代码编译 SoX 以启用 CAF 支持,将它和一个批处理文件提供给声音专家,一切看起来都很好。但是我们开始得到失真的声音,我发现原因是 SoX 生成的 CAF 中数据的字节序与 afconvert 生成的相反。

所以,我在批处理文件的命令行中添加了--endian swap,不再考虑它。但是问题仍然存在,所以我跟踪了一个 SoX 转换,发现它在编写 CAF 文件(或者实际上是 SoX 使用 libsndfile 的任何文件类型)时完全忽略了字节序标志。如果写入 WAV,SoX 会在写入时进行交换,但对于 CAF(它使用 libsndfile),什么也不做。

afconvert 将交换字节序,问题是 SoX 不会将任何字节序信息传递给 libsndfile。相关标志是 reverse_bytes(无论格式如何,反转给定数据的字节)和 reverse_endian(无论目标格式如何,反转字节序)。在设置 libsndfile 的 SF_INFO 时,这些都没有被引用,可以告诉它使用的字节顺序(通过 SF_INFO 的格式成员),但是推断使用哪个所需的信息(源数据的字节序和/或默认值) dest 文件的字节序)似乎不可用。

谁能建议我获取此信息的方法?

4

0 回答 0