2016-04-24 43 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

哈。我完全忘記了音頻播放器是控制實際應用內播放的東西,並且擁有自己的音量。感謝您指出了這一點。 –