Изменение громкости без ползунка громкости на iphone

Мне нужна ваша помощь. Как мне перейти к изменению громкости звука в моем приложении. Я не хочу использовать слайдер громкости. Вместо этого у меня есть UIImageView, который представляет собой ручку регулировки громкости, в которой я вращаюсь по часовой стрелке, чтобы увеличить, и против часовой стрелки, чтобы уменьшить громкость звука. Вращение это просто анимация, и я уже сделал эту часть.

Мне нужна ваша помощь и совет, как увеличить / уменьшить громкость. Спасибо

3 ответа

Решение

Я был бы осторожен, звоня 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. Я просто сделал это очень быстро, как пару кнопок UIB, вам придется сделать это самостоятельно), и установите IBAction, чтобы изменить объем для данного значения (вы можете передать от 0,0 до 1,0 как число с плавающей запятой)

- (IBAction)volumeUp:(id)sender
{

    [streamer setVolume:1.0];

}

- (IBAction)volumeDown:(id)sender
{

    [streamer setVolume:0.0];

}

Я рассматриваю это как ошибку в коде Apple и сообщаю им об этом как с помощью отчетов об ошибках, так и лично, но, поскольку они настаивают на его функциональности, вы также можете извлечь из этого пользу.

Используйте следующий код для изменения громкости вашего приложения:

[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];

Это будет работать только после того, как вы установили аудио сеанс, либо воспроизводя звук, либо устанавливая его активным как таковой:

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

Обратите внимание, что вам понадобятся MediaPlayer.framework и AVFoundation.framework, а объем - от 0,0 до 1,0.

Ну, возьмите минимальное вращение (R1) и максимальное вращение (R2). Тогда делай rotation / (R2 - R1) чтобы получить%, как это делает слайдер.

РЕДАКТИРОВАТЬ:
Чтобы зафиксировать изменение громкости, добавьте следующее:

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

(Не забудьте выпустить systemVolumeSlider в dealloc)

Затем, когда громкость меняется, используйте setValue установить его значение. Вам также нужно будет обработать то, что происходит, когда ваш пользователь нажимает кнопки громкости +/- на устройстве.

Другие вопросы по тегам