【问题标题】:Is it possible (and how) to determine the endianness of an AIFF audio file?是否可以(以及如何)确定 AIFF 音频文件的字节顺序?
【发布时间】:2011-09-09 08:48:16
【问题描述】:

我在 JAVA 中使用音频导入器(用于鼓音序器),在导入 AIFF 文件时遇到以下问题:

我有 2 个相同类型的 AIFF 文件(24 位、44100kHz、单声道),一个是在 Mac 上创建的,另一个是在 windows 计算机上使用 wavelab 创建的。两个文件都是未压缩的 PCM,都是 FORM == AIFF。

Mac 的 AIFF 是 BigEndian(应该是), Wavelab (windows) 的 AIFF 是 LittleEndian。

这两个文件都可以在 Wavelab (Windows) 和 Quicktime (Windows) 中正常播放。 这些工具如何检测这些文件的字节顺序?无论如何它必须是可能的,否则至少其中一个文件听起来就像噪音(这就是我的应用程序中发生的情况)。

文件头中是否有一些隐藏信息或任何其他方式来确定 AIFF 文件的字节顺序? 有什么建议吗?

非常感谢

【问题讨论】:

    标签: java audio endianness aiff


    【解决方案1】:

    快速谷歌搜索显示,AIFF 文件是 big endian

    但是,根据Wikipedia,还有另一种名为 AIFF-C 的格式可以压缩数据。 Apple 现在使用 little endian,并创建了一种名为 sowt 的虚假压缩方法,其本质上意味着“没有压缩但 little endian”。您可能需要检查一下。

    除此之外,纯 AIFF 无法检查字节顺序。以 little endian 编码的标准 AIFF 似乎违反了规范。

    【讨论】:

    • 是的,AIFF 是大端,我知道。但是wavelab在little endian中创建了24bit aiff,这是事实。这仅发生在 24 位 aiffs 上。所有其他比特率都被正确地创建为带有 wavelab 的大端。我知道,这听起来可能很奇怪。但该文件实际上是小端序
    • 是的,我同意。要么文件违反了规范,要么我在读取标题时做错了(我读取它的方式与读取 16 位 aiffs 的方式完全相同,并且一切正常)。我读到了假压缩“sowt”,但文件不是那种类型。标题的格式类型为 AIFF,而不是 AIFC。只是想知道,如何在 quicktime 中正确播放这两个文件
    • 感谢 AIFF 规范的链接,很好的资源,非常详细
    • 我发现了一些可能导致问题的东西。我现在不能肯定地证明它,但似乎我没有正确读取 SSND 块中的偏移量。今晚我会检查一下。
    • 在我多年前编写的一些代码中,我有一条评论说“根据大卫·阿克曼的说法,压缩类型可以改变文档的字节序。”接下来是检查“sowt”压缩类型并将字节顺序更改为很少的代码。 Dave Ackerman 是哈佛的一位数字音频专家,他在我编写该代码时给了我信息,因此支持上述答案中关于 sowt 的陈述。
    猜你喜欢
    • 1970-01-01
    • 2012-02-24
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    相关资源
    最近更新 更多