我只想拥有 .wav 文件的数据块并排除所有其他块,即 riff 标头。
let voiceData = try? Data(contentsOf: soundUrl).advanced(by: 44)
我确实尝试过,但由于某种原因,在实际音频之前仍有一些包袱。谁能帮我解决这个问题。如果有一种有效的方法来读取 .wav 文件并且只包含数据部分?
首先,您确定这实际上是一个 WAV 文件。WAV 通常有 44 字节的标头。为什么你相信有“一些包袱”?你是怎么确定的?
您当然可以直接解析 RIFF 格式。最简单(最草率)的方法是向下扫描,直到找到字节“数据”(0x64 61 74 61)。接下来的 4 个字节将是长度(采用 little-endian 格式,如果您只是要读到最后,可以跳过它),然后是您想要的实际数据。
查找data
字节完成range(of:)
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
}