我们正在尝试使用SoX将我们的WAV转换为适用于iPhone项目的CAF。目前,作为办公室中唯一Mac的拥有者,我必须定期运行才能做到这一点,但我更喜欢那些真正制作音频的人可以在Windows上进行操作。
我从源代码编译SoX以启用CAF支持,将它和批处理文件发送给声音人员,一切似乎都很好。但是我们开始听到失真的声音,我发现原因是SoX产生的CAF中数据的字节顺序与afconvert产生的相反。
所以,我添加了--endian swap到批处理文件中的命令行,并且不再考虑它。但是这个问题仍然存在,所以我通过一个SoX转换器进行了跟踪,发现它在编写CAF文件时完全忽略了endian标志(或者实际上是SoX使用libsndfile的任何文件类型)。如果写入WAV,SoX会执行写入交换,但对于CAF(它使用libsndfile),则不执行任何操作。
afconvert会交换字节序,问题是SoX会将任何字节信息传递给libsndfile。相关标志是reverse_bytes(无论格式如何,反转给定数据的字节)和opposite_endian(无论目标格式如何,都反转字节顺序)。在设置libsndfile的SF_INFO时,这些都不是指的,可以告诉使用的字节顺序(通过SF_INFO的格式成员),但是要求推断使用的信息(源数据的字节顺序和/或默认值)似乎没有可用的目标文件的字节顺序。
有人可以建议我获取此信息吗?