在 iPhone/iPad 应用程序中播放音频文件?
Posted
技术标签:
【中文标题】在 iPhone/iPad 应用程序中播放音频文件?【英文标题】:Play audio files in iPhone/iPad application? 【发布时间】:2011-04-16 13:28:15 【问题描述】:我想在我的应用程序中播放声音,因为我使用的是 .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);
以上是我播放声音的代码
谢谢。
【问题讨论】:
@user532445,或者如果没有人发布可接受的答案,请发布您自己的问题的答案,以便您继续开发。这样你就可以回馈 SO。 【参考方案1】:如果设备静音,系统声音 ID 将无法播放,因此这可能是原因。 (根据official documentation,它们仅用于用户界面效果,例如警报等。)
因此,我很想使用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];
您还应该记住设置适当的音频类别。 (见AVAudioSessionsetCategory:error:
方法。)
最后,您需要将 AVFoundation 库添加到您的项目中。为此,请在 Xcode 的 Groups & Files 列中单击项目的目标,然后选择“Get Info”。然后选择 General 选项卡,单击底部“Linked Libraries”窗格中的 + 并选择“AVFoundation.framework”。
【讨论】:
【参考方案2】:老实说,我建议使用 AVAudioPlayer
代替这个,但您可以尝试使用这个替代代码。在您的示例中,您似乎忘记包含扩展名,这也可能是问题所在。模拟器在命名方面更为宽松,因此如果您忘记了扩展名,它可能会在模拟器上播放,而不是在设备上播放。
SystemSoundID soundFileObject;
CFURLRef soundFileURLRef = CFBundleCopyResourceURL (CFBundleGetMainBundle (),CFSTR ("sound"),CFSTR ("mp3"),NULL );
AudioServicesCreateSystemSoundID (soundFileURLRef,&soundFileObject );
AudioServicesPlaySystemSound (soundFileObject);
【讨论】:
以上是关于在 iPhone/iPad 应用程序中播放音频文件?的主要内容,如果未能解决你的问题,请参考以下文章