我是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
答案 0 :(得分:0)
这就是我所做的:
克隆链接提供的存储库:
git clone https://github.com/jar-son/rioGraph.git
您能阅读补丁格式吗? http://pastebin.com/Sc0eb3tR(链接从现在起30天内有效)
我所做的总结:
@class ViewController
@property (nonatomic, assign) ViewController *viewController;
[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 ......它刚刚起作用。
PS:这解释了如何应用补丁:https://ariejan.net/2009/10/26/how-to-create-and-apply-a-patch-with-git/