Objective-c传递参数到IBAction

Qingyao Li

我正在开发用于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传递给bufferSizeIBAction,因为我将在其中调用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章