AVAudioSession应用程序卷独立于系统卷

时间:2016-04-24 05:35:57

标签: ios xamarin xamarin.ios avaudiosession

我正在编写一个iOS应用程序(使用Xamarin),它是一个锻炼应用程序。真的很简单。你启动iTunes,在后台播放一些音乐,这个应用程序在锻炼的不同部分有定期的语音提示。这是一个基本的HIIT / Tabata计时器。

当语音提示并且按预期工作时,我正在使用AVAudioSession来提取背景音频。但是,我希望用户能够通过设置设置语音提示的音量级别。我认为这就像在AVAudioSession上设置音量级别一样简单但很快就发现它是只读的。

我不想更改系统音量。 我只想设置应用音频的音量,与系统音量无关。这是可能的。我知道这是因为我面前有一个应用程序可以做到这一点。我唯一的问题是,我不知道如何在AVAudioSession内为我的应用中的音频设置音量。

那么,有没有人知道如何设置应用程序发出的音频的音量级别,而与系统音量级别无关?

以下是我用于打包我的调用以激活和停用AVAudioSession

的代码
private void ActivateAudioSession()
{
    var session = AVAudioSession.SharedInstance();
    session.SetCategory(AVAudioSessionCategory.Playback, AVAudioSessionCategoryOptions.DuckOthers);
    session.SetActive(true);
}

private void DeactivateAudioSession()
{
    new System.Threading.Thread(new System.Threading.ThreadStart(() =>
    {
        var session = AVAudioSession.SharedInstance();
        session.SetActive(false);
    })).Start();
}

1 个答案:

答案 0 :(得分:2)

AVAudioSession正如您所说,它具有只读卷属性,但带有:

AudioPlayer您可以将音量从0.0无声设置为1.0 max https://developer.xamarin.com/api/property/AVFoundation.AVAudioPlayer.Volume/,如下所示:

        string path = NSBundle.PathForResourceAbsolute ("audiofile", "mp3", NSBundle.MainBundle.ResourcePath);
        var url = NSUrl.FromFilename (path);
        var audioPlayer = AVAudioPlayer.FromUrl (url);
        audioPlayer.Volume = 0.5f;
        audioPlayer.Play ();

或者您可以使用MPMusicPlayerController,但我认为它只能播放音乐https://developer.xamarin.com/api/property/MonoTouch.MediaPlayer.MPMusicPlayerController.Volume/