0

我对 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

4

1 回答 1

0

这就是我所做的:

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

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

    • 添加@class ViewController到 Audio.h
    • @property (nonatomic, assign) ViewController *viewController;在 Audio.h 中添加了一个
    • 添加[self.viewController performSelectorOnMainThread:@selector(setMyLabel) withObject:self waitUntilDone:NO];

      -(void)processAudio:(AudioBufferList *)bufferListAudio.m
    • 添加- (void)setMyLabel;到 ViewController.h
    • 添加 - (void)setMyLabel { self.label.text = @"blablabla!"; }到 ViewController.m
  3. ......它只是工作。

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

于 2013-05-21T20:58:38.180 回答