2016-04-24 9 views
3

Ich bin einen iOS-App zu schreiben (mit Xamarin) und es ist ein Training App. Ziemlich einfach wirklich. Du startest iTunes, spielst Musik im Hintergrund und diese App hat periodische Sprachansagen während verschiedener Teile des Trainings. Es ist ein einfacher HIIT/Tabata-Timer.AVAudioSession App Volume Unabhängig von System Volume

Ich verwende AVAudioSession ducken den Hintergrund-Audio, wenn die Sprachansagen und es funktioniert wie erwartet. Aber ich möchte, dass der Benutzer die Lautstärke für die Sprachansagen über Einstellungen einstellen kann. Ich dachte, es wäre so einfach wie das Einstellen der Lautstärke auf AVAudioSession, aber bald gefunden, dass es schreibgeschützt ist.

Ich will nicht die Lautstärke des Systems ändern. Ich möchte nur die Lautstärke des Audios meiner App einstellen, unabhängig von der Systemlautstärke. Dies ist möglich. Ich weiß das, weil ich eine App vor mir habe, die genau das tut. Mein einziges Problem ist, ich weiß nicht, wie ich die Lautstärke für das Audio in meiner App innerhalb meiner AVAudioSession einstellen soll.

Also, Wer weiß, wie die Lautstärke für Audio eine App unabhängig von der Systemlautstärkepegel emittiert eingestellt?

Unten ist der Code, den ich verwende meine Anrufe wickeln zu aktivieren und deaktivieren die 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(); 
} 

Antwort

2

AVAudioSession wie Sie nur Volumen Eigenschaft lesen, sagte hat aber mit:

AudioPlayer Sie die festlegen Volumen von 0.0 schweigen 1.0 max https://developer.xamarin.com/api/property/AVFoundation.AVAudioPlayer.Volume/ wie so:

 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(); 

Oder Sie könnten MPMusicPlayerController benutzen, aber ich denke, es ist nur Musik https://developer.xamarin.com/api/property/MonoTouch.MediaPlayer.MPMusicPlayerController.Volume/

+0

Hah spielen können. Ich habe total vergessen, dass der Audioplayer die eigentliche In-App-Wiedergabe steuert und über eine eigene Lautstärke verfügt. Danke, dass du darauf hingewiesen hast. –