Как воспроизводить звук даже при включенной кнопке отключения звука?

Я пытаюсь воспроизвести аудиофайл при нажатии кнопки.

Если я пропущу свой код, он сработает, но если я просто нажму на кнопку, звук не будет воспроизводиться.

Вот мой код:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
AVAudioPlayer * player;
NSString * path = [[NSBundle mainBundle] pathForResource:@"soundOne" ofType:@"mp3"];
NSURL * url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[player play];

Это подходящий способ воспроизведения звука? Ничего не помечается как устаревшее.

Я также вижу это сообщение в отладчике:

AudioQueue: request to trim 0 + 2690 = 2690 frames from buffer containing 1152 frames

РЕДАКТИРОВАТЬ:

Этот код работает.

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"soundOne"
                                                     ofType:@"mp3"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filePath];
self.audioPlayer = [[AVAudioPlayer alloc]
                    initWithContentsOfURL:fileURL error:nil];
[self.audioPlayer prepareToPlay];
self.audioPlayer.currentTime = 0;
[self.audioPlayer play];

Как я могу воспроизводить звук при включенной кнопке отключения звука?

Вот код, который я пробовал для этого:

CFStringRef state;
UInt32 propertySize = sizeof(CFStringRef);
OSStatus audioStatus = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
if (audioStatus == kAudioSessionNoError) {
    //NSLog(@"audio route: %@", state);
    return (CFStringGetLength(state) <+ 0);
}
return NO;

person Luke Irvin    schedule 03.02.2013    source источник
comment
В качестве примечания, вы можете получить URL-адреса из своего пакета с помощью [[NSBundle mainBundle] URLForResource:@"soundOne" withExtension:@"mp3"]   -  person dreamlax    schedule 04.02.2013
comment
Может быть, указать эти параметры ошибки на некоторую ошибку NSError, чтобы увидеть, что на самом деле является ошибкой? Знаешь ... вместо того, чтобы гадать.   -  person Terence Yan    schedule 04.02.2013
comment
Посмотрите здесь: stackoverflow .com / questions / 3740528 /   -  person sridvijay    schedule 04.02.2013


Ответы (1)


Придерживайтесь этого, прежде чем вызывать игру:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
[[AVAudioSession sharedInstance] setActive:YES error:&error];

Это должно сработать.

person Adam Waite    schedule 03.02.2013
comment
@Jayesh Да, именно для этого и предназначена эта категория AVSession. Однако в большинстве случаев установка активного сеанса не требуется. - person Jerrot; 10.02.2017