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