音频处理期间的标签更新

时间:2013-05-19 09:43:55

标签: iphone ios objective-c audio uilabel

我是ios编程的新手,我在音频处理任务中遇到了有关标签更新的问题。

我使用经典的RecordingCallback - > ProcessAudio方法。在ProcessAudio中,如果级别太低,我想停止录制。这很容易做到。但是当它停止时,我无法将文本标签从“录制”更改为“已停止”。按钮(播放/停止)效果很好,但回拨时则不行。编译期间没有错误。什么都没发生......

以下是代码:

-(void)processAudio:(AudioBufferList *)bufferList{
AudioBuffer sourceBuffer = bufferList->mBuffers[0];

// copy incoming audio data to temporary buffer
memcpy(tempBuffer.mData, bufferList->mBuffers[0].mData, bufferList->mBuffers[0].mDataByteSize);

int16_t* samples = (int16_t*)(tempBuffer.mData);

for ( int i = 0; i < tempBuffer.mDataByteSize / 2; ++i )
{
    if (samples[i]< LevelTrigger) 
    {
        Presence++;
        if (Presence== 2 * SampleRate) 
        {
            printf("Nothing");
            //dispatch_async(dispatch_get_main_queue(), ^{
                //[self buttonPressed:nil];
            //});
            //[self buttonPressed:nil];
            [label performSelectorOnMainThread:@selector(setText:) withObject:@"TEST" waitUntilDone:YES];
            Presence=0;
            break;

        }
  }

正如您所看到的,我尝试使用“dispatch_async”和“performSelectorOnMainThread”函数,但它没有帮助。 buttonPressed函数被正确调用,但没有任何反应。 谢谢你的帮助。 JC

1 个答案:

答案 0 :(得分:0)

这就是我所做的:

  1. 克隆链接提供的存储库: git clone https://github.com/jar-son/rioGraph.git

  2. 您能阅读补丁格式吗? http://pastebin.com/Sc0eb3tR(链接从现在起30天内有效)
    我所做的总结:

    • 在Audio.h
    • 中添加了@class ViewController
    • 在Audio.h
    • 中添加了@property (nonatomic, assign) ViewController *viewController;
    • 在Audio.m
    • 中添加了[self.viewController performSelectorOnMainThread:@selector(setMyLabel) withObject:self waitUntilDone:NO];
      -(void)processAudio:(AudioBufferList *)bufferList
    • - (void)setMyLabel;添加到ViewController.h
    • - (void)setMyLabel { self.label.text = @"blablabla!"; }到ViewController.m
  3. ......它刚刚起作用。

  4. PS:这解释了如何应用补丁:https://ariejan.net/2009/10/26/how-to-create-and-apply-a-patch-with-git/