Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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];

}

Ответ 2

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

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

[[MPMusicPlayerController applicationMusicPlayer] setVolume:newVolume];

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

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

Обратите внимание, что вам понадобятся MediaPlayer.framework и AVFoundation.framework и что объем находится между 0.0 и 1.0.

Ответ 3

Ну, возьмите min Rotation (R1) и max Rotation (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, чтобы установить его значение. Вам также потребуется обработать то, что происходит, когда пользователь нажимает кнопки громкости +/- на устройстве.