我只想拥有.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
}