AVAudioSession 应用音量与系统音量无关

3
我正在编写一个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个回答

2

AVAudioSession 只有一个只读的音量属性,但是使用 AudioPlayer ,你可以将音量从 0.0 静音设置为最大的 1.0 ,像这样: 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/


哈哈,我完全忘记了音频播放器是控制应用内实际播放并具有自己的音量的。感谢你指出这一点。 - Don Fitz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接