如何从 Swift 中的 wav 文件中删除 riff headers?

How to remove the riff headers from wav file in Swift?

我只想拥有 .wav 文件的数据块并排除所有其他块,即 riff headers。

        let voiceData = try? Data(contentsOf: soundUrl).advanced(by: 44)

我确实试过了,但出于某种原因,在实际音频之前还有一些包袱。谁能帮我解决这个问题。是否有一种有效的方法来读取 .wav 文件并且只包含数据部分?

首先,您确定这实际上是一个 WAV 文件。 WAV 通常有 44 个字节的 header。你为什么相信存在 "some baggage?" 你是如何确定的?

你当然可以直接解析RIFF格式。最简单(最草率)的方法是向下扫描,直到找到字节 "data" (0x64 61 74 61)。接下来的 4 个字节将是长度(little-endian 格式,如果你只是想读到最后可以跳过),然后是你想要的实际数据。

使用 range(of:)

找到 data 字节
let dataBytes = Data([0x64, 0x61, 0x74, 0x61])
if let dataRange = riff.range(of: dataBytes) {
    let start = dataRange.endIndex + 4  // Skip over length bytes
    let samples = riff[start...] // read the rest of the bytes
    // use samples
}