2016-04-24 18 views
3

我正在编写iOS应用程序(使用Xamarin),它是一个健身应用程序。真的很简单。您启动iTunes,在背景中播放一些音乐,并且此应用程序在锻炼的不同部分会定期发出语音提示。这是一个基本的HIIT/Tabata计时器。AVAudioSession应用程序卷独立于系统卷

我使用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(); 
} 

回答

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/

+0

哈。我完全忘记了音频播放器是控制实际应用内播放的东西,并且拥有自己的音量。感谢您指出了这一点。 –