我有一个Android项目,通过麦克风缓冲区中的PCM数据读取short[]
阵列进行实时分析。我需要将此功能转换为iOS Swift。在Android中是非常简单的,看起来像这样..IOS Swift读取PCM缓冲区
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以及其他的文档。我发现的只是C++/Obj-C和Bridging Swift Header解决方案。这对我来说很先进和过时。
现在我可以读取PCM-数据为CAF-文件与AVFoundation
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 read
功能?我需要从麦克风缓冲区获取样本数组。或者我需要在记录的CAF文件上进行阅读?
非常感谢!请帮助我简单的解释或代码示例。 iOS的术语不是我尚未;-)
我贴一个短要点上阅读在Swift 2中使用RemoteIO Audio Unit进行音频采样:https://gist.github.com/hotpaw2/ba815fc23b5d642705f2b1dedfaf0107 – hotpaw2