您如何使用 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 应用程序并循环播放?的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C 播放声音

如何让音乐开/关设置objective-c

UIButton - 如何让它播放声音

Objective - C,我如何裁剪 .caf 文件?

Objective-C:完成一个间隔计时器

Objective-C中的@property和@synthesize用法