我正在开发用于iPhone SDK上的实时音频处理的程序,我使用“ EZAudio”从麦克风获取数据,然后使用高通滤波器对其进行过滤,最后在“ EZAudio”的帮助下进行绘制。
我设置了两个按钮来绘制原始波形和滤波后的波形。我不知道如何将数据从麦克风传递到-(IBAction)?
这是我的代码:
来自的数据 microphoneDelegate
-(void) microphone:(EZMicrophone *)microphone
hasAudioReceived:(float **)buffer
withBufferSize:(UInt32)bufferSize
withNumberOfChannels:(UInt32)numberOfChannels {
dispatch_async(dispatch_get_main_queue(), ^{
// Update time domain plot
[self.audioPlotTime updateBuffer:buffer[0]
withBufferSize:bufferSize];
});
}
我写的高通滤波器:
-(void)processSampleForHighOrLowPassFilter:(float)bufferSize
withAudioData:(float*)inBuffer
withFilterType:(UInt32)filterType {
float *outBuffer = (float *)malloc(sizeof(float)*bufferSize);
for (int i=0; i<bufferSize; i++) {
outBuffer[i] = (a0 * (inBuffer[i]))
+ (a1 * tmpBufferInIndex[0])
+ (a2 * tmpBufferInIndex[1])
- (b1 * tmpBufferOutIndex[0])
- (b2 * tmpBufferOutIndex[1]);
tmpBufferInIndex[1] = tmpBufferInIndex[0];
tmpBufferInIndex[0] = inBuffer[i];
tmpBufferOutIndex[1] = tmpBufferOutIndex[0];
tmpBufferOutIndex[0] = outBuffer[i];
}
[self.audioPlotHighPassFilter8kHz updateBuffer:outBuffer
withBufferSize:bufferSize];
}
我想使用一个按钮来触发绘制原始波形和处理后的波形
-(void)plotOriginalWaveForm:(id)sender {
//[self.audioPlot updateBuffer:outBuffer
// withBufferSize:bufferSize];
}
-(void)plot8kHzWaveForm:(id)sender {
//[self.audioPlotHighPassFilter8kHz updateBuffer:outBuffer
// withBufferSize:bufferSize];
}
但是我不明白如何将buffer
和传递给bufferSize
IBAction,因为我将在其中调用plot函数,并且plot函数需要这两个参数。
谢谢您的意见或在IBAction中还有其他方法可以使用麦克风中的数据!
将缓冲区和缓冲区大小信息存储为类的属性,在麦克风代表中被调用时进行设置,并在绘制波形时从属性中检索它们,而不是作为参数传递。
编辑以给出可能的示例,具体取决于原始代码中的类:
在@interface块的.h文件中:
{
float ** myBuffer;
UInt32 myBufferSize;
}
在您的方法中:
-(void) microphone:(EZMicrophone *)microphone
hasAudioReceived:(float **)buffer
withBufferSize:(UInt32)bufferSize
withNumberOfChannels:(UInt32)numberOfChannels {
self.myBuffer = buffer;
self.myBufferSize = bufferSize;
dispatch_async(dispatch_get_main_queue(), ^{
// Update time domain plot
[self.audioPlotTime updateBuffer:buffer[0]
withBufferSize:bufferSize];
});
}
-(void)plotOriginalWaveForm:(id)sender {
[self.audioPlot myBuffer
myBufferSize];
}
-(void)plot8kHzWaveForm:(id)sender {
[self.audioPlotHighPassFilter8kHz myBuffer
withBufferSize:myBufferSize];
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句