IOS Swift读取PCM缓冲区

我有一个Android项目,通过麦克风缓冲区中的PCM数据读取一个short[]arrays进行实时分析。 我需要将此function转换为iOS Swift。 在Android中,它非常简单,看起来像这样..

 import android.media.AudioFormat; import android.media.AudioRecord; ... AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, someSampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, AudioRecord.getMinBufferSize(...)); recorder.startRecording(); 

后来我读了缓冲区

 recorder.read(data, offset, length); //data is short[] 

(这就是我要找的)

文档: https : //developer.android.com/reference/android/media/AudioRecord.html

我对Swift和iOS非常陌生。 我已经阅读了大量有关AudioToolkit,Core和其他文档的文档。 我find的只是C ++ / Obj-C和Bridging Swift Header解决scheme。 这对我来说已经提前和过时了。

现在我可以读取PCM数据到AVFoundation的CAF文件

 settings = [ AVLinearPCMBitDepthKey: 16 as NSNumber, AVFormatIDKey: Int(kAudioFormatLinearPCM), AVLinearPCMIsBigEndianKey: 0 as NSNumber, AVLinearPCMIsFloatKey: 0 as NSNumber, AVSampleRateKey: 12000.0, AVNumberOfChannelsKey: 1 as NSNumber, ] ... recorder = try AVAudioRecorder(URL: someURL, settings: settings) recorder.delegate = self recorder.record() 

但那不是我要找的(或?)。 有没有一个优雅的方式来实现上述的android readfunction? 我需要从麦克风缓冲区获取样本数组。 或者我需要在logging的CAF文件上进行阅读?

非常感谢! 请帮助我简单的解释或代码示例。 iOS的术语不是我的;-)

如果您不介意浮点采样和48kHz,则可以快速从麦克风获取audio数据,如下所示:

 let engine = AVAudioEngine() // instance variable func setup() { let input = engine.inputNode! let bus = 0 input.installTapOnBus(bus, bufferSize: 512, format: input.inputFormatForBus(bus)) { (buffer, time) -> Void in let samples = buffer.floatChannelData[0] // audio callback, samples in samples[0]...samples[buffer.frameLength-1] } try! engine.start() }