Изменение объема без регулятора громкости на iPhone

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

Я нуждаюсь в Вашей помощи и совете относительно того, как увеличиться/уменьшить объем.Спасибо

12
задан awlcs 11 August 2010 в 13:47
поделиться

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

- (IBAction)volumeUp:(id)sender
{

    [streamer setVolume:1.0];

}

- (IBAction)volumeDown:(id)sender
{

    [streamer setVolume:0.0];

}
12
ответ дан 2 December 2019 в 04:42
поделиться

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

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

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

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

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

4
ответ дан 2 December 2019 в 04:42
поделиться

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

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

[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];

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

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

Обратите внимание, что вы нужны MediaPlayer.framework и AVFoundation.framework, а громкость должна быть от 0,0 до 1,0.

16
ответ дан 2 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: