2010-08-11 12 views
12

Necesito tu ayuda. ¿Cómo debo proceder para cambiar el volumen del sonido en mi aplicación? No quiero usar un deslizador de volumen. En cambio, tengo un UIImageView que es una perilla de volumen, en la que giro en el sentido de las agujas del reloj para aumentar, y antihorario para disminuir el volumen del sonido. La rotación es solo una animación y ya hice esa parte.Cambiar el volumen sin un control deslizante de volumen en un iphone

Necesito su ayuda y consejo sobre cómo aumentar/disminuir el volumen. Gracias

Respuesta

12

me habría cuidado llamando setValue en una MPVolumeView ya que probablemente no va a hacer otra cosa que actualizar el aspecto de la corredera de cualquier cosa, pero no el nivel de volumen del dispositivo real. En su lugar, tendrá que llamar al _commitVolumeChange, que es una API privada y probablemente le rechace su aplicación.

Una breve respuesta a cómo controlar el volumen: realmente depende de lo que está tratando de controlar el volumen de.

Si quieres un "controles cada sonido dentro de la aplicación" tipo de control, entonces usted puede utilizar un MPVolumeView pero no puede cambiar su valor mediante programación. Entonces, solo podrá cambiar el volumen moviendo el control deslizante con un toque o utilizando los botones de volumen en el costado del dispositivo. Lo mejor que puede hacer es crear un objeto global que almacene el nivel de volumen que puede leer cualquiera de sus objetos antes de reproducir su sonido.

Si se trata de un objeto AVAudioPlayer, debe crear el objeto y usar [theAudioPlayerObject setVolume: someFloat]; donde someFloat tiene un valor entre 0.0 y 1.0.

Si se trata de un objeto SystemSound, no puede controlar el volumen.

Si se trata de un AudioQueue que lo cambiaría a través AudioQueueSetParameter

Como dije .. todo depende de cómo se reproduce el sonido.

Actualización basada en comentario

For that particular example, se debe establecer el volumen de esta manera:

Añadir a la AudioStreamer.archivo h

- (void)setVolume:(float)Level; 

Añadir al archivo AudioStreamer.m

- (void)setVolume:(float)Level 
{ 

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

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

} 

Añadir al controlador de vista de donde estará el mando de volumen (esto va en el .m archivo ... acabo de hacer esto como un par de UIButtons muy rápido, tendrá que hacer lo suyo) y configurar un IBAction para cambiar el volumen de un valor determinado (puede pasar de 0.0 a 1.0 como un flotador)

- (IBAction)volumeUp:(id)sender 
{ 

    [streamer setVolume:1.0]; 

} 

- (IBAction)volumeDown:(id)sender 
{ 

    [streamer setVolume:0.0]; 

} 
+0

Quiero controlar el volumen de mi aplicación. Estoy tratando de hacer una aplicación usando clases matt gallagher sobre cómo transmitir una fuente mp3 http://cocoawithlove.com/2008/09/streaming-and-playing-live-mp3-stream.html – awlcs

+1

Ver mi respuesta actualizada – iwasrobbed

+0

Muchas gracias, lo intentaré: D Soy bastante nuevo en la programación de iphone: D gracias: D – awlcs

4

Bueno, tome la rotación mínima (R1) y la rotación máxima (R2). Luego haga rotation/(R2 - R1) para obtener un% como lo hace un control deslizante.

EDIT:
para confirmar el cambio de volumen, añada lo siguiente:

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

(Asegúrese de liberar systemVolumeSlider en dealloc)

Luego, cuando se cambia el volumen, utilice setValue para establecer es valioso. También necesitará controlar lo que sucede cuando su usuario presiona los botones de volumen +/- en el dispositivo.

+1

Quizás también desee decirles cómo cambiar el volumen para obtener una respuesta completa :) – iwasrobbed

+0

gracias jrtc & iWasRobbed: D jrtc: lol mi pregunta fue, después de tener el%, lo que sigue, estoy atascado aquí xD – awlcs

+0

Sí, claro, hojeé tu pregunta y pensé que la había respondido, ¡pero no lo había hecho del todo! La respuesta se ha actualizado;) – jrtc27

16

Veo esto como un error en el código de Apple y han informado de que a los dos con informes de errores y en persona, pero ya que insisten en que es una función, puede ser que también beneficiarse de ella.

utilizar el siguiente código para cambiar el volumen de la aplicación:

[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume]; 

Esto sólo funcionará después de que haya establecido su sesión de audio, ya sea mediante la reproducción de un sonido o mediante el establecimiento activo como tal:

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

Tenga en cuenta que necesitará MediaPlayer.framework y AVFoundation.framework y que el volumen está entre 0.0 y 1.0.

+0

Simple y claro ~~ :) Muchas gracias. Incluso si no uso MPMusicPlayerController (por ejemplo, usando MPMoviePlayerController), puedo usarlo. Debido a AVAudioSession. :) – alones

+0

'setVolume:' está en desuso en iOS 7.0 – ahonnecke

Cuestiones relacionadas