我有一個iOS應用程序,可以同時播放不同的音頻效果並錄製音頻。該應用程序的目的目前並不重要,但我遇到了股票iOS音效的問題。自定義音頻會話的IOS系統聲音
爲了發揮效果,我使用了SimpleAudioEngine
從CocosDenshion
API(它使用AVAudioPlayer
,據我所知)。效果預加載和他們工作正常(我實際上播放他們按鈕,滾動和類似)。影響播放用下面的代碼:
在willFinishLaunchingWithOptions
方法:
[[SimpleAudioEngine sharedEngine] preloadEffect:@"sound.wav"];
在其他方法需要在播放:這裏
[[SimpleAudioEngine sharedEngine] playEffect:@"sound.wav"];
無奇不有,但在同一時間,我使用AVCaptureSession
API從內置麥克風錄製噪音。捕獲會話代碼來自網絡上的其中一個示例。
AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
captureSession = [[AVCaptureSession alloc] init];
NSError *error = nil;
captureAudioDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:&error];
if ([captureSession canAddInput: captureAudioDeviceInput])
{
[captureSession addInput:captureAudioDeviceInput];
}
captureAudioDataOutput = [AVCaptureAudioDataOutput new];
if ([captureSession canAddOutput:captureAudioDataOutput])
{
[captureSession addOutput:captureAudioDataOutput];
}
// Create a serial dispatch queue and set it on the AVCaptureAudioDataOutput object
dispatch_queue_t audioDataOutputQueue = dispatch_queue_create("AudioDataOutputQueue", DISPATCH_QUEUE_SERIAL);
[captureAudioDataOutput setSampleBufferDelegate:self queue:audioDataOutputQueue];
dispatch_release(audioDataOutputQueue);
[captureSession startRunning];
代碼的兩個部分都完美無缺地一個接一個地工作。 但是當它們同時被激活時,其中一個打破了另一個。例如:麥克風正在讀取沒有問題的數據,直到播放一個音效。我找到解決的辦法,來激活mixWithOthers
範疇,它是用下面的代碼完成:
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryAmbient error: nil];
UInt32 doSetProperty = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty);
[[AVAudioSession sharedInstance] setActive: YES error: nil];
這是創建AVCaptureDevice
和AVCaptureSession
之前完成。 應用程序的工作原理與此類似,播放聲音和麥克風讀取數據。硬件按鈕也在CocosDenshion SimpleAudioEngine
(靜音和音量)上工作。
但顯然,該應用程序有一個錯誤。
當禁用靜音並且應用正在播放聲音時,不會播放TextField上的iOS鍵盤單擊聲音。我想要點擊聲音播放。
我已經調試了一下代碼,顯然它與音頻會話設置有關。如果我將該類別設置爲AVAudioSessionCategorySoloAmbient
,則會播放點擊聲音,但音量很低(音量最大,應用程序聲音最大音量播放很好)。 它給出了另一個問題,SoloAmbient取消了我的CaptureSession,這是可以理解的。
我正在測試iPhone 5上的應用程序,但同樣的事情也發生在模擬器上。
那麼,我在做什麼錯誤的設置?我怎樣才能修復這些設置,使我的所有音頻會話保持活動狀態並保持iOS系統的聲音?
謝謝!
您是否嘗試將類別設置爲PlayAndRecord?如果你想同時播放和錄製,你需要這樣做。 – Mar0ux 2013-03-31 13:02:55
在提出問題之前,我已經嘗試過。 PlayAndRecord類別使聲音以較低的音量播放,但它不**帶回丟失的鍵盤聲音。 – Legoless 2013-04-01 11:24:18