问题
I'm trying to access AVAudioPCMBuffer.floatChannelData using Swift but it is of type UnsafePointer<UnsafePointer<CFloat>> (in Objective-C, @property(nonatomic, readonly) float *const *floatChannelData) and any attempt I make to access it results in execution failed.
Sample code to set-up a quick AVAudioPCMBuffer in a Swift Playground is included in a previous question:
Getting AVAudioPCMBuffer working (AVAudioFile.mm error code -50)
回答1:
Does this work?
let channels = UnsafeBufferPointer(start: myAudioBuffer.floatChannelData, count: Int(myAudioBuffer.format.channelCount))
let floats = UnsafeBufferPointer(start: channels[0], count: Int(myAudioBuffer.frameLength))
回答2:
What you can also do is in order to access AVAudioBuffer:
for var i = 0; i < Int(audioBuffer.frameLength); i+=Int(audioMixerNode.outputFormatForBus(0).channelCount) {
self.audioBuffer.floatChannelData.memory[i] = 0.0f; // or whatever
}
You can find more about that in the Apple pre-release documentation:
The
floatChannelDataproperty returns pointers to the buffer’s audio samples, if the buffer’s format is 32-bit float. It returnsnilif it is another format. The returned pointer is toformat.channelCountpointers to float. Each of these pointers is toframeLengthvalid samples, which are spaced bystridesamples.
来源:https://stackoverflow.com/questions/24090119/from-unsafepointerunsafepointercfloat-to-an-array-of-floats-in-swift