![](/img/trans.png)
[英]AudioKit v5 output problems, no sound when AVAudioSession defaultToSpeaker is used
[英]AVAudioSession manipulate sound output
我正在使用AVSoundSession
配置聲音,並使用AVAudioPlayer
播放不同的聲音。 我搜索了很多東西,卻找不到任何東西。 如何處理輸出源?
我在SoundManager
中需要一個可以在電話揚聲器和揚聲器之間切換輸出的方法。
success = [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
error:&error];
使用此功能,我可以將聲音傳送到揚聲器,但是沒有方法將聲音傳送到電話揚聲器。 有人可以幫我嗎?
因此,我找到了處理聲音輸出的解決方案。
您可以使用AVAudioSession
初始化聲音設置
像這樣:
session = [AVAudioSession sharedInstance];
BOOL success;
NSError* error;
success = [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
if (!success) NSLog(@"AVAudioSession error setting category:%@",error);
success = [session setMode:AVAudioSessionModeVoiceChat error:&error];
if (!success) NSLog(@"AVAudioSession error setting mode:%@",error);
success = [session overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:&error];
[session setPreferredOutputNumberOfChannels:0 error:nil];
if (!success) NSLog(@"AVAudioSession error overrideOutputAudioPort:%@",error);
success = [session setActive:YES error:&error];
if (!success) NSLog(@"AVAudioSession error activating: %@",error);
else NSLog(@"audioSession active");
用
[session overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:&error];
您設置了不覆蓋輸出端口。 並且您的應用使用默認揚聲器播放。 據我了解,模式AVAudioSessionModeVoiceChat
使用了電話揚聲器。 這正是我的SIP呼叫者應用程序所需要的。
然后您可以使用
[session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];
我這樣做:
- (void) loudSpeakerOn:(BOOL)isLoudSpeaker{
[session setActive:NO error:nil];
BOOL success;
NSError* error;
success = [session overrideOutputAudioPort:isLoudSpeaker?AVAudioSessionPortOverrideSpeaker:AVAudioSessionPortOverrideNone error:&error];
if (!success) NSLog(@"AVAudioSession error setting category:%@",error);
[session setActive:YES error:nil];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.