Alterando o volume sem um controle deslizante de volume em um iPhone
-
27-09-2019 - |
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
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.