簡體   English   中英

AVAudioSession操縱聲音輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM