Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何从音频队列缓冲区提取整数样本并将修改后的样本写回?_Iphone_Objective C_Buffer_Sample_Audioqueue - Fatal编程技术网

Iphone 如何从音频队列缓冲区提取整数样本并将修改后的样本写回?

Iphone 如何从音频队列缓冲区提取整数样本并将修改后的样本写回?,iphone,objective-c,buffer,sample,audioqueue,Iphone,Objective C,Buffer,Sample,Audioqueue,对于iphone语音更改应用程序(objective c),我尝试从录音音频队列缓冲区中获取采样的整数值,在函数中处理它们,然后将修改后的值写回播放缓冲区。 现在我用的是这样的东西 AudioBuffer audioBuffer = bufferList->mBuffers[0]; int bufferSize = audioBuffer.mDataByteSize / sizeof(SInt32); SInt32 *frame = audioBuffer.mData; SInt32 s

对于iphone语音更改应用程序(objective c),我尝试从录音音频队列缓冲区中获取采样的整数值,在函数中处理它们,然后将修改后的值写回播放缓冲区。 现在我用的是这样的东西

AudioBuffer audioBuffer = bufferList->mBuffers[0];
int bufferSize = audioBuffer.mDataByteSize / sizeof(SInt32);
SInt32 *frame = audioBuffer.mData;
SInt32  signalInput[22050];
for( int i=0; i<bufferSize; i++ ) {
    SInt32 currentSample = frame[i];
    *(signalInput +i) = currentSample;
}
AudioBuffer AudioBuffer=bufferList->mbuffer[0];
int bufferSize=audioBuffer.mDataByteSize/sizeof(SInt32);
SInt32*frame=audioBuffer.mData;
SInt32信号输入[22050];

对于(int i=0;i如果您想要实时修改音频,您可能需要尝试使用RemoteIO音频单元

使用音频队列时,您必须保存录制队列回调中的数据,然后在不同的时间在不同的回调中将处理后的数据提供给播放队列回调。为此,您可能必须使用中间队列或数据缓冲区。要使其正常工作,请尝试运行录音应用程序,然后运行示例播放应用程序,然后将两者结合起来

增加:

以下是将示例值写入音频输出队列的一些源代码示例:


只需使用您自己的预处理样本,而不是正弦波。

感谢您的快速响应。-录制部分已经开始工作。例如,我想在将录制的样本写入文件之前以某种方式更改回调以修改它们。无论如何,是否可能,如果可能,我如何直接访问录制的样本f音频缓冲区(无论是音频队列还是音频单元)。确保您指定、获取和使用的PCM数据类型都是一致的。您是否要求16位或32位采样?整数还是浮点?大端还是小端?等等。好的,谢谢。我会立即检查。但基本上,上面声明的函数是对的?!如果是这样,我如何写入值(哪种类型的值…)回到音频缓冲区。我在任何地方都找不到任何示例代码。。。?