Iphone 如何在音频录制过程中获取PCM矢量值?

Iphone 如何在音频录制过程中获取PCM矢量值?,iphone,audio-streaming,audio-recording,pcm,Iphone,Audio Streaming,Audio Recording,Pcm,我试图从麦克风录制的音频中获取PCM数据值数组。。然后,将它发送到服务器,但我不知道如何获取这些数据。我试图找到一些关于“speakHere”示例的提示,但对我没有帮助,我不想从音频数据包中获得任何信息,只想获得PCM数据值。。有人有主意吗? 它不是来自文件,我需要从麦克风获取音频,获取阵列并发送 因为这里的演讲太复杂了。。我尝试了另一种解决办法 AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:

我试图从麦克风录制的音频中获取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” mbitspperchannel:16

但我需要8000个8比特通道的采样器


所以。。如何转换或压缩它???

给定音频队列记录回调函数的缓冲区可以只是PCM数据值的C数组。Apple的SpeakHere示例应用程序展示了如何配置音频队列数据格式,以及如何接收缓冲区。然后,示例应用程序将此PCM数据保存到一个文件中,但您可以使用该数据执行任何操作(将其排队以进行播放、DSP分析、音乐可视化、自定义压缩、网络传输等)


另一种方法是使用音频单元RemoteIO回调来捕获从同一麦克风录制的类似PCM值的C阵列,但延迟稍低,设置复杂度稍高。有关示例源代码,请参阅苹果的aurioTouch示例应用程序。

感谢您的回答@hptpaw2。。我试图理解SpeakHere示例,使用我需要的部件,但我不是一个好的开发人员。。我真的不明白代码。@hotpaw2:你能帮我修改speakhere的代码吗?我想从回调中提取数据,我不想把它们写在文件中,而是想把它们保存在内存中,比如字节数组中。我不知道如何提取缓冲区数据并将这些数据附加到字节数组。关于如何将结构、整数或字节从一个C数组复制到另一个C数组,这个站点上可能已经有了问答。如果没有,请作为新问题提问(不在评论部分)。