Ответ 1
Я бы осторожно набрал setValue
на MPVolumeView
, так как он, вероятно, ничего не сделает, кроме обновления внешнего вида слайдера, но не фактического уровня громкости устройства. Вместо этого вы должны вызвать _commitVolumeChange
, который является частным API и, скорее всего, отклонит ваше приложение.
Краткий ответ на вопрос, как контролировать громкость: на самом деле это зависит от того, что вы пытаетесь контролировать громкость.
Если вы хотите, чтобы элемент управления "контролирует каждый звук в приложении", вы можете использовать MPVolumeView
, но вы не можете изменять его значение программно. Затем вы сможете изменять громкость, перемещая слайдер нажатием или используя кнопки регулировки громкости на боковой панели устройства. Лучше всего создать глобальный объект, который сохранит уровень громкости, который любой из ваших объектов может прочитать, прежде чем воспроизводить звук.
Если это объект AVAudioPlayer
, вы должны создать объект и использовать [theAudioPlayerObject setVolume: someFloat];
, где someFloat
- значение от 0.0 до 1.0.
Если это объект SystemSound
, вы не можете контролировать громкость.
Если это AudioQueue
, вы измените его на AudioQueueSetParameter
Как я уже сказал, все зависит от того, как вы играете звук.
Обновление на основе комментария
В этом конкретном примере вы должны установить том следующим образом:
Добавить в файл AudioStreamer.h
- (void)setVolume:(float)Level;
Добавить в файл AudioStreamer.m
- (void)setVolume:(float)Level
{
OSStatus errorMsg = AudioQueueSetParameter(audioQueue, kAudioQueueParam_Volume, Level);
if (errorMsg) {
NSLog(@"AudioQueueSetParameter returned %d when setting the volume.", errorMsg);
}
}
Добавьте к контроллеру вида, где будет ручка тома (это идет в файле .m... я просто сделал это как пару UIButtons очень быстро, вам нужно будет сделать свое) и настройте IBAction для изменения громкости для заданного значения (вы можете пройти от 0.0 до 1.0 как плавающий)
- (IBAction)volumeUp:(id)sender
{
[streamer setVolume:1.0];
}
- (IBAction)volumeDown:(id)sender
{
[streamer setVolume:0.0];
}