AVAudioPlayer работает в Simulator, но не на устройстве

Мой mp3-код:

NSError *error;
soundObject = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:audioPathString] error:&error];
if (soundObject == nil) NSLog(@"%@", [error description]);
soundObject.delegate = self;
soundObject.numberOfLoops = 0;
soundObject.volume = 1.0;
NSLog(@"about to play");
[soundObject prepareToPlay];
[soundObject play];
NSLog(@"[soundObject play];");

mp3, который использовался, чтобы играть отлично, и он по-прежнему работает на симуляторе. Но не на устройстве.

Недавно я добавил к программному обеспечению некоторый код записи (не мой). Он использует материал AudioQueue, который немного превосходит меня. Это противоречит AVAudioPlayer? Или что может быть проблемой? Я заметил, что как только код звуковой записи начнет работать, я больше не могу отрегулировать громкость на устройстве, так что, возможно, он блокирует воспроизведение звука?


ИЗМЕНИТЬ

Решение похоже на то, чтобы поместить это в мой код. Я положил его в applicationDidFinishLaunching:

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: nil]; 
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

Первая строка позволяет воспроизводить и записывать, в то время как другие строки, по-видимому, перенаправляют вещи, чтобы сделать громче громче.

Весь аудиокод - это voodoo для меня.

Ответы

Ответ 1

Убедитесь, что ваш iPhone Кнопка звонка" не показывает цвет красного цвета.

Ответ 2

Некоторый код, который я знаю, работает:

- (void)playOnce:(NSString *)aSound {

// Gets the file system path to the sound to play.
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:aSound ofType:@"caf"];  

// Converts the sound file path to an NSURL object
NSURL *soundURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
self.soundFileURL = soundURL;
[soundURL release];

AVAudioPlayer * newAudio=[[AVAudioPlayer alloc] initWithContentsOfURL: soundFileURL error:nil];  
self.theAudio = newAudio; // automatically retain audio and dealloc old file if new file is loaded

[newAudio release]; // release the audio safely

[theAudio prepareToPlay];

// set it up and play
[theAudio setNumberOfLoops:0];
[theAudio setVolume: volumeLevel];
[theAudio setDelegate: self];
[theAudio play];

}

Ответ 3

Здесь быстро и просто попробовать:

У меня возникла аналогичная проблема с изображениями, а также звуками. IPhone чувствителен к крышке, даже расширения файлов, но симулятор не работает. Проверьте объект NSURL!= Nil в дополнение к soundObject.

Вы также можете попробовать [[NSBundle mainBundle] URLForResource:@"sound" ofType:@"mp3"]; и убедиться, что файл скопирован в .app под YourApp.app/Resources/

-Stephen

Ответ 4

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

Ответ 5

У меня был звук в симуляторе, но не на устройстве. Он начал работать, когда я установил делегат AVAudioPlayer

Ответ 6

Если вы запускаете код на симуляторе iOS 10, он не запрашивает разрешения безопасности, но, если вы используете код на устройстве ios 10, вам нужно добавить ключ разрешения звука в plist. Добавить конфиденциальность - использование микрофона Описание в plist.