Воспроизведение аудио файлов в приложении iPhone / iPad? - PullRequest
0 голосов
/ 16 апреля 2011

Я хочу воспроизвести звук в своем приложении, для этого я использую тип файла .mp3. Он отлично работает в симуляторе, но когда я готовлю его к своему устройству, он не работает и не воспроизводит звук, может кто-нибудь помочь мне, почему он не работает на устройстве или какой формат файла лучше воспроизводить аудиофайл на iPhone и iPad

NSURL *tapSound   = [[NSBundle mainBundle] URLForResource: [NSString stringWithFormat:@"%@",SoundFileName] withExtension: @""];

// Store the URL as a CFURLRef instance
 self.soundFileURLRef = (CFURLRef) [tapSound retain];

 // Create a system sound object representing the sound file.
 AudioServicesCreateSystemSoundID (
                     soundFileURLRef,
                    &soundFileObject
                    );

AudioServicesPlaySystemSound (soundFileObject);

Выше мой код для воспроизведения звука

Спасибо.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2011

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

SystemSoundID   soundFileObject;
CFURLRef soundFileURLRef = CFBundleCopyResourceURL (CFBundleGetMainBundle (),CFSTR ("sound"),CFSTR ("mp3"),NULL );
AudioServicesCreateSystemSoundID (soundFileURLRef,&soundFileObject );
AudioServicesPlaySystemSound (soundFileObject);
0 голосов
/ 16 апреля 2011

Системные идентификаторы звука не будут воспроизводиться, если устройство отключено, поэтому, возможно, это и есть причина.(Они действительно предназначены только для эффектов пользовательского интерфейса, таких как оповещения и т. Д. Согласно официальной документации .)

Таким образом, у меня возникнет соблазн использовать AVAudioPlayer стиль подхода.В качестве примера реализации (без каламбура):

// *** In your interface... ***
#import <AVFoundation/AVFoundation.h>

...

AVAudioPlayer *testAudioPlayer;

// *** Implementation... ***

// Load the audio data
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"sample_name" ofType:@"wav"];
NSData *sampleData = [[NSData alloc] initWithContentsOfFile:soundFilePath];
NSError *audioError = nil;

// Set up the audio player
testAudioPlayer = [[AVAudioPlayer alloc] initWithData:sampleData error:&audioError];
[sampleData release];

if(audioError != nil) {
    NSLog(@"An audio error occurred: \"%@\"", audioError);
}
else {
    [testAudioPlayer setNumberOfLoops: -1];
    [testAudioPlayer play];
}



// *** In your dealloc... ***
[testAudioPlayer release];

Вы также должны помнить об установке соответствующей категории аудио.(См. Метод AVAudioSession setCategory:error:.)

Наконец, вам необходимо добавить библиотеку AVFoundation в ваш проект.Чтобы сделать это, нажмите на цель вашего проекта в столбце Groups & Files в XCode и выберите «Get Info».Затем выберите вкладку «Общие», нажмите «+» в нижней панели «Связанные библиотеки» и выберите «AVFoundation.framework».

...