ios:在主线程外播放声音
我制作了一个简单的应用程序,当超过一定的噪音水平时,它会发出警报。因此,我有一个AudioQueue,它记录声音并测量所记录声音的音量(仅重要的代码部分如下所示): 实际上,代码工作正常,因此代码中应该没有错误,而且wave文件的格式也正确。事情就是这样的:ios:在主线程外播放声音,ios,multithreading,audio,Ios,Multithreading,Audio,我制作了一个简单的应用程序,当超过一定的噪音水平时,它会发出警报。因此,我有一个AudioQueue,它记录声音并测量所记录声音的音量(仅重要的代码部分如下所示): 实际上,代码工作正常,因此代码中应该没有错误,而且wave文件的格式也正确。事情就是这样的: iPhone模拟器: 一切正常。创建对象SoundPlayer时,构造函数中对[self playSound]的调用会导致模拟器播放随机声音,从而证明该方法正确实现。然后我开始录音,当超过某个声级时,就会从AudioRecorder(在一个
我已经尝试通过使用默认通知中心的通知来修复它,但它也不起作用。我如何管理声音的播放?需要考虑以下几点: 1) 确保启用播放和录制:
UInt32 category = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,
sizeof(category), &category);
2) 检查-(void)playSound
中各种音频服务*
调用的返回值,查看其实际故障位置
3) 确保类AudioRecorder中的sp
属性已正确初始化(即调用AudioRecorder的正确init方法)
4) (某些)iOS设备可能不支持同步录制和播放的不同采样率。如果您的.wav文件的采样率与录制音频队列的采样率不同,则值得尝试调整其中任何一种
5) 不要调用[sp playSound]
而是使用以下语句在主线程上调用它:
[sp performSelectorOnMainThread:@selector(playSound) withObject:nil waitUntilDone:NO];
另外请注意,最有可能的情况是,您的警报声会在录音中听到(尽管iPhone4可以过滤掉)
UInt32 category = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory,
sizeof(category), &category);
[sp performSelectorOnMainThread:@selector(playSound) withObject:nil waitUntilDone:NO];