AVAudioFile
built into iOS (and OS X) is very convenient and will also do format conversions for you:
import AVFoundation // ... let url = NSBundle.mainBundle().URLForResource("your audio file", withExtension: "wav") let file = try! AVAudioFile(forReading: url!) let format = AVAudioFormat(commonFormat: .PCMFormatFloat32, sampleRate: file.fileFormat.sampleRate, channels: 1, interleaved: false) let buf = AVAudioPCMBuffer(PCMFormat: format, frameCapacity: 1024) try! file.readIntoBuffer(buf) // this makes a copy, you might not want that let floatArray = Array(UnsafeBufferPointer(start: buf.floatChannelData[0], count:Int(buf.frameLength))) print("floatArray \(floatArray)\n")
Unfortunately, for doubles, it seems not enough to replace .PCMFormatFloat32
with .PCMFormatFloat64
, because AVAudioPCMBuffer
does not have a float64ChannelData
method.
because i don't know fast
You can avoid copying the array by working with UnsafeBufferPointer
, which is an absolutely good collection type:
let floatArray = UnsafeBufferPointer(start: buf.floatChannelData[0], count:Int(buf.frameLength))
source share