我正在尝试从麦克风录制的音频中获取PCM数据值数组..然后,将其发送到服务器,但我不了解如何获取此数据。我试图在“speakHere”样本上找到一些提示,但它对我没有帮助,我不想要任何来自音频数据包的信息,只需要PCM数据值。有没有人有想法? 它不是来自文件,我需要从麦克风获取音频,获取数组并发送它..
由于讲话过于复杂..我尝试了另一种解决方案..
AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:&error];
[session addInput:audioInput];
AVCaptureAudioDataOutput *audioOutput = [[[AVCaptureAudioDataOutput alloc] init] autorelease];
[session addOutput:audioOutput];
// Configure your output.
dispatch_queue_t audioQueue = dispatch_queue_create("audioQueue", NULL);
[audioOutput setSampleBufferDelegate:self queue:audioQueue];
dispatch_release(audioQueue);
并且此实现调用此方法:
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
但问题是此输出是使用此配置生成的:
mSampleRate:44100.000000 mFormatID:'lpcm' mBitsPerChannel:16
但我需要8000 sampleRate和8 bitsPerChannel。
那么......如何转换或压缩它?
答案 0 :(得分:0)
给出音频队列记录回调函数的缓冲区可以只是PCM数据值的C数组。 Apple的SpeakHere示例应用程序显示了如何配置音频队列数据格式以及如何接收缓冲区。然后,示例应用程序将此PCM数据保存到文件中,但您可以使用数据执行任何操作(将其排队等待回放,DSP分析,音乐可视化,自定义压缩,网络传输等)。
另一种方法是使用音频单元RemoteIO回调来捕获类似的PCM值C数组,从同一麦克风录制,但延迟稍低,设置复杂度稍高。有关示例源代码,请参阅Apple的aurioTouch示例应用程序。