运行线程阻止在iPhone上完全播放音频

时间:2011-04-03 17:58:09

标签: iphone multithreading core-audio

我使用SpeakHere示例创建了一个应用程序。该程序接受声音输入,对其运行一些效果,然后将其写入文件进行播放。

我创建了一个运行音频处理代码的线程,同时显示一些动画。一切正常,除非线程完成并且我点击播放,它只播放几秒然后停止。关于这一点的奇怪之处在于没有产生其他变化或错误。我已经将设备上的音频下载到了我的机器上,它就在那里,所以它不像录音更短。

[NSThread detachNewThreadSelector:@selector (run_thread)
                         toTarget:self 
                       withObject:nil];

然后方法:

-(void)run_thread
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];


printf("Running Thread...\n");

recordFilePath = runAllAudioRoutines();

NSString *print_recordFilePath= (NSString *)recordFilePath;

NSLog(@"RECORD FILE PATH ---->   %@", print_recordFilePath);



player->CreateQueueForFile(recordFilePath);

bars_mixing_rap = false;

// Set the button's state back to "record"
btn_record.title = @"Record";
btn_record.enabled = YES;
btn_play.enabled = YES;

LOADING = FALSE;

[pool drain];

}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

代码线程安全吗?目前还不清楚runAllAudioRoutines()做什么或btn_record和btn_play是什么,但是如果 btn_record是一个NSButton的实例,你就无法从后台线程设置它的标题或启用状态。

相关问题