我使用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];
}
有什么想法吗?
答案 0 :(得分:1)
代码线程安全吗?目前还不清楚runAllAudioRoutines()做什么或btn_record和btn_play是什么,但是如果 btn_record是一个NSButton的实例,你就无法从后台线程设置它的标题或启用状态。