您如何使用 Objective-C 让声音文件自动播放到 iOS 应用程序并循环播放?
Posted
技术标签:
【中文标题】您如何使用 Objective-C 让声音文件自动播放到 iOS 应用程序并循环播放?【英文标题】:How do you make a sound file play automatically thought an iOS app and loop using Objective-C? 【发布时间】:2012-08-07 22:24:59 【问题描述】:我正在使用 Objective-c 为 iPhone 制作游戏。我有我想在项目的文件中播放的音乐。我需要知道如何让它在应用程序启动时开始播放,并在最后循环播放。有谁知道如何做到这一点?代码示例会很棒!谢谢。
【问题讨论】:
你可能想展示你已经尝试过的东西。这就是 SO 的主要工作方式。只是说“给我这个和那个的代码”很少有用 我环顾四周,没有任何效果,我无法弄清楚,也没有任何代码可显示 【参考方案1】:您可以在 App Delegate 中使用 AVAudioPlayer。
首先在您的 App Delegate .h 文件中添加以下行:
#import <AVFoundation/AVFoundation.h>
还有这些:
AVAudioPlayer *musicPlayer;
在你的 .m 文件中添加这个方法:
- (void)playMusic
NSString *musicPath = [[NSBundle mainBundle] pathForResource:@"phone_loop" ofType:@"wav"];
NSURL *musicURL = [NSURL fileURLWithPath:musicPath];
musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:musicURL error:nil];
[musicPlayer setNumberOfLoops:-1]; // Negative number means loop forever
[musicPlayer prepareToPlay];
[musicPlayer play];
最后在didFinishLaunchingWithOptions
方法中调用:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
...
[self playMusic];
...
如果你只想停止音乐:
[musicPlayer stop];
此外,您可以查看 AVAudioPlayer 代表的 Apple 文档以处理音频中断http://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVAudioPlayerDelegateProtocolReference/Reference/Reference.html
PS:记得将 AVFoundation 框架导入到你的项目中。
【讨论】:
-[NSURL initFileURLWithPath:]: 无字符串参数 你应该使用 [[NSURL alloc] initFileURLWithPath:musicPath] 因为 initFileURLWithPath: 是一个实例方法,而不是一个类方法,所以你必须先用 alloc 创建一个类的实例。 ;) 你在用这行吗:NSURL *musicURL = [NSURL fileURLWithPath:musicPath];? 不,我在做:NSURL *musicURL = [[NSURL alloc] initFileURLWithPath:musicPath];
NSString *musicPath = [[NSBundle mainBundle] pathForResource:@"Payphone" ofType:@"m4a"]; NSURL *musicURL = [[NSURL alloc] initFileURLWithPath:musicPath]; musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:musicURL error:nil]; [musicPlayer setNumberOfLoops:-1]; // Negative number means loop forever [musicPlayer prepareToPlay]; [musicPlayer play];
【参考方案2】:
首先将 AVFoundation 框架导入您的项目。然后将音乐文件插入到您的项目中。
声明
#import <AVFoundation/AVFoundation.h>
然后
AVAudioPlayer *audioPlayer;
NSURL *file = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"soundName" ofType:@"mp3"]];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:file error:nil];
audioPlayer.numberOfLoops = -1; // Infinite loops
[audioPlayer setVolume:1.0];
[audioPlayer prepareToPlay];
[audioPlayer start]
您可以使用
在应用程序进入后台之前停止声音 [audioPlayer stop];
【讨论】:
这会放在应用委托中吗? 有可能。一般来说,最好避免对此类代码使用应用程序委托,但您可以这样做。 - (void)applicationDidBecomeActive:(UIApplication *)application NSLog(@"play"); AVAudioPlayer *audioPlayer; NSURL *file = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"Payphone" ofType:@"m4a"]]; audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:file error:nil]; audioPlayer.numberOfLoops = -1; // 无限循环 [audioPlayer setVolume:1.0]; [音频播放器准备播放]; [音频播放器播放];以上是关于您如何使用 Objective-C 让声音文件自动播放到 iOS 应用程序并循环播放?的主要内容,如果未能解决你的问题,请参考以下文章