Изменение громкости без ползунка громкости на iphone - PullRequest
12 голосов
/ 11 августа 2010

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

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

Ответы [ 3 ]

16 голосов
/ 11 августа 2010

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

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

[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];

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

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

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

12 голосов
/ 11 августа 2010

Я бы осторожно позвонил 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];

}
4 голосов
/ 11 августа 2010

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

EDIT:
Чтобы зафиксировать изменение громкости, добавьте следующее:

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

(Обязательно отпустите systemVolumeSlider в dealloc)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...