Domanda

Ho bisogno del tuo aiuto. Come devo procedere per modificare il volume del suono nella mia app. Non voglio usare un cursore del volume. Invece Ho un UIImageView che è una manopola del volume, in cui ruoto in senso orario per aumentare e in senso antiorario per diminuire il volume del suono. La rotazione è solo un'animazione e ho già fatto quella parte.

Ho bisogno del vostro aiuto e consigli su come aumentare / diminuire il volume. Grazie

È stato utile?

Soluzione

Starei attento setValue chiamata su un MPVolumeView dal momento che probabilmente non farà altro che aggiornare la aspetto del cursore, ma non il livello del volume del dispositivo vero e proprio. Si sarebbe invece dovuto chiamare _commitVolumeChange che è API privato e probabilmente otterrete la vostra applicazione respinto.

Una breve risposta a come volume di controllo: Dipende da cosa si sta cercando di controllare il volume di.

Se si desidera un "controlli ogni suono all'interno della app" tipo di controllo, allora è possibile utilizzare un MPVolumeView ma non può modificare il suo valore a livello di codice. Si sarebbe quindi solo essere in grado di cambiare il volume o spostando il cursore con un tocco o utilizzando i pulsanti del volume sul lato del dispositivo. La cosa migliore da fare è creare un oggetto globale che memorizza il livello del volume, che uno dei tuoi oggetti può leggere prima di giocare il loro suono.

Se si tratta di un oggetto AVAudioPlayer, che ci si crea l'oggetto e [theAudioPlayerObject setVolume: someFloat]; uso dove someFloat è un valore compreso tra 0,0 e 1,0.

Se si tratta di un oggetto SystemSound, non è possibile controllare il volume.

Se è un AudioQueue che ci si cambia tramite AudioQueueSetParameter

Come ho detto .. che tutto dipende da come si sta giocando il suono.

Aggiornamento sulla base di commenti

Per questo esempio particolare , sarebbe impostare il volume in questo modo:

  

Aggiungi al file AudioStreamer.h

- (void)setVolume:(float)Level;
  

Aggiungi al file AudioStreamer.m

- (void)setVolume:(float)Level
{

    OSStatus errorMsg = AudioQueueSetParameter(audioQueue, kAudioQueueParam_Volume, Level);

    if (errorMsg) {
        NSLog(@"AudioQueueSetParameter returned %d when setting the volume.", errorMsg);
    }

}
  

Aggiungi al controller della vista per cui la manopola del volume sarà (questo vale nel file .m .. Ho appena fatto questo come un paio di UIButtons reale veloce, dovrete fare il proprio) e istituito un IBAction modificare il volume per un dato valore (è possibile passare nello 0,0 thru 1.0 come un galleggiante)

- (IBAction)volumeUp:(id)sender
{

    [streamer setVolume:1.0];

}

- (IBAction)volumeDown:(id)sender
{

    [streamer setVolume:0.0];

}

Altri suggerimenti

Credo che in questo un bug nel codice di Apple e hanno riferito a loro entrambi con un bug report e di persona, ma dal momento che insistono proprio una caratteristica, si potrebbe anche trarre beneficio da esso.

Utilizza il seguente codice per modificare il volume dell'applicazione:

[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];

Questo sarà solo il lavoro dopo aver stabilito la sessione audio, sia per la riproduzione di un suono o impostandolo attivo come ad esempio:

[[AVAudioSession sharedInstance] setActive:YES error:NULL];

Nota come che avrete bisogno MediaPlayer.framework e AVFoundation.framework e che il volume è compresa tra 0.0 e 1.0.

Bene, prendete il minimo di rotazione (R1) e massima di rotazione (R2). Poi fate rotation / (R2 - R1) per ottenere un% come un cursore fa.

EDIT:
Per commettere la variazione di volume, aggiungere il seguente:

MPVolumeView *systemVolumeSlider = [[MPVolumeView alloc] initWithFrame: self.view.bounds];
[systemVolumeSlider setHidden:YES];
[systemVolumeSlider setUserInteractionEnabled:NO];
[self.view addSubview:systemVolumeSlider];

(Assicurarsi di rilasciare systemVolumeSlider in dealloc)

Poi, quando il volume viene cambiato, uso setValue per impostare il valore. Sarà inoltre necessario per gestire ciò che accade quando il volume +/- pulsanti sul dispositivo utente preme.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top