我有一个Android项目,需要从麦克风缓冲区读取short[]
数组的PCM数据进行实时分析。我需要将这个功能转换为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等的文档。但我发现它们都是C++/Obj-C和Bridging Swift Header的解决方案。这对我来说过于高级和过时了。
目前,我可以使用AVFoundation将PCM数据读取到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 read
功能?我需要从麦克风缓冲区获取一个示例数组。或者我需要在记录的CAF文件上进行读取吗?
非常感谢!请用简单的解释或代码示例帮助我。iOS术语还不是我的专业领域;-)