2010-06-23 126 views
8

我有AVAudioRecorder和AVAudioPlayer的問題。AVAudioRecorder&AVAudioPlayer - 內置揚聲器的聲音輸出,如何更改?

當我同時使用播放器和錄音(例如錄音時播放聲音)時,聲音位於安靜的內置揚聲器中。我搜索計算器和所有我發現這個代碼:

UInt32 *audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 

但是,這並不能幫助我:( 當我copyPaste它,我得到了錯誤 我能做些什麼來記錄和播放外放的。底部?

我事先不使用任何類似SCLister奧德東西...

感謝

最大

回答

1

只有我發現這個話題事情是這樣的:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 

當你,如果你想在同一時間播放錄製音頻必須設置。試一試,讓我知道。

P.S.確保您將AudioToolboxAVFoundation框架添加到您的項目並將它們包含在.m文件中。

+1

是的,這是必要的,但我明白了。沒有變化:( 函數本身是好的,你可以順便吹麥克風和聽到的聲音,但只有與內部揚聲器 – 2010-06-23 20:48:36

16

這有點舊了,但是這篇文章對我有所幫助,並且我想將它更新爲任何未來可能需要它的人。上面貼的代碼是正確的 - 它將通過電話揚聲器播放安靜的音頻,並將其傳送到底部的揚聲器。代碼中有一個小錯字,這就是它出錯的原因。這裏是一個可以解決這個問題的正確片段:創建音頻播放機/錄像機前設置此,右後

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 

請確保您還激活音頻會話:

[[AVAudioSession sharedInstance] setActive:YES error:nil]; 

最後,如果你將要播放和錄製的同時,您可能還需要設置類別和混音功能。以下是設置類別,啓用混音,將音頻路由到主揚聲器以及激活會話的整個片段。您只需在應用啓動後立即執行此操作。

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 

OSStatus propertySetError = 0; 
UInt32 allowMixing = true; 
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing); 

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 

NSLog(@"Mixing: %x", propertySetError); // This should be 0 or there was an issue somewhere 

[[AVAudioSession sharedInstance] setActive:YES error:nil]; 

希望能幫助別人!

+0

,它應該是'錯誤:NULL'不是'錯誤:nil' – user102008 2010-12-09 05:22:35

+2

有相當多的蘋果示例代碼顯示錯誤:nil以及錯誤:NULL,所以它似乎可以接受使用。它肯定不會造成任何問題。 – 2010-12-10 19:33:17

+0

感謝哥們它幫了我很多...! – Warewolf 2012-12-13 09:14:28

0

如果您當前正在播放通過安靜的揚聲器,並希望通過在iPhone底部的揚聲器播放,使用此代碼:

UInt32 doChangeDefaultRoute = 1; 

AudioSessionSetProperty (
         kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, 
         sizeof (doChangeDefaultRoute), 
         &doChangeDefaultRoute 
         ); 
0

這是老問題,但沒有的其他答案幫助我......但是,我發現了一個解決方案,我將其發佈供將來參考以防萬一需要。

該解決方案在以下博客文章中有描述:iOS: Force audio output to speakers while headphones are plugged in

您需要在您的項目中創建新的Objective-C類AudioRouter。然後將AudioRouter.h導入到您啓動音頻功能的類的頭文件中。現在在corrseponding .m文件中添加以下行viewDidLoad方法中:

AudioRouter *foobar = [[AudioRouter alloc] init]; 
[foobar initAudioSessionRouting]; 
[foobar forceOutputToBuiltInSpeakers]; 

現在你有音頻被迫到揚聲器(如AVAudioPlayer)輸出!因爲iOS7

0

AudioSessionSetProperty已經過時,但以下爲我工作。

AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]; 
2

我在這裏找到答案,它已經:How to get AVAudioPlayer output to the speaker

總之,記錄前使用此功能:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:nil]; 

...和播放前使用此功能(在揚聲器或耳機,如果他們插入)

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; 
+0

你是男人! – CSawy 2014-08-11 21:38:56

相關問題