Pergunta

Preciso da tua ajuda. Como devo prosseguir para alterar o volume de som no meu aplicativo. Não quero usar um controle deslizante de volume. Em vez disso, tenho um UIImageView que é um botão de volume, no qual eu giro no sentido horário para aumentar e anti -horário no sentido horário para diminuir o volume de som. A rotação é apenas uma animação e eu já fiz essa parte.

Preciso da sua ajuda e conselhos sobre como aumentar/diminuir o volume. Obrigado

Foi útil?

Solução

Eu seria cuidadoso chamando setValue em um MPVolumeView já que provavelmente não fará nada além de atualizar o aparência do controle deslizante, mas não o nível real de volume do dispositivo. Você teria que ligar _commitVolumeChange que é uma API privada e provavelmente receberá seu aplicativo.

Uma resposta curta para como controlar o volume: realmente depende do que você está tentando controlar o volume.

Se você deseja um tipo de controle "controla cada som dentro do aplicativo", você pode usar um MPVolumeView mas você não podes Alterar seu valor programaticamente. Você só seria capaz de alterar o volume movendo o controle deslizante com um toque ou usando os botões de volume na lateral do dispositivo. A melhor coisa a fazer é criar um objeto global que armazena o nível de volume que qualquer um de seus objetos pode ler antes de jogar seu som.

Se for um AVAudioPlayer objeto, você criaria o objeto e usaria [theAudioPlayerObject setVolume: someFloat]; Onde someFloat é um valor entre 0,0 e 1,0.

Se for um SystemSound Objeto, você não pode controlar o volume.

Se for um AudioQueue Você mudaria via AudioQueueSetParameter

Como eu disse .. tudo depende de Como as Você está tocando o som.

Atualização com base no comentário

Para aquele exemplo em particular, você definiria o volume como este:

Adicionar ao arquivo AudioStreamer.h

- (void)setVolume:(float)Level;

Adicionar ao arquivo AudioStreamer.m

- (void)setVolume:(float)Level
{

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

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

}

Adicione ao controlador de visualização para onde estará o botão de volume (isso vai no arquivo .m. Acabei de fazer isso como um casal com muito rápido, você terá que fazer o seu próprio) e configurar uma ibação para alterar o Volume para um determinado valor (você pode passar em 0,0 a 1,0 como um bóia)

- (IBAction)volumeUp:(id)sender
{

    [streamer setVolume:1.0];

}

- (IBAction)volumeDown:(id)sender
{

    [streamer setVolume:0.0];

}

Outras dicas

Eu vejo isso como um bug no código da Apple e o relatei com relatórios de bug e pessoalmente, mas como eles insistem que é um recurso, você também pode se beneficiar dele.

Use o código a seguir para alterar o volume do seu aplicativo:

[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];

Isso só funcionará depois de você estabelecer sua sessão de áudio, reproduzindo um som ou definindo -o ativo como tal:

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

Observe que você precisará do MediaPlayer.Framework e Avfoundation.Framework e que o volume está entre 0,0 e 1,0.

Bem, pegue a rotação min (R1) e a rotação máxima (R2). Então faça rotation / (R2 - R1) Para obter um % como um slider.

EDITAR:
Para comprometer a mudança de volume, adicione o seguinte:

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

(Certifique -se de liberar systemVolumeSlider dentro dealloc)

Então, quando o volume é alterado, use setValue Para definir seu valor. Você também precisará lidar com o que acontece quando seu usuário pressionar os botões +/-- no dispositivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top