0

只能通过它的 init 方法为 AVAudioPlayer 提供要播放的文件的 URL。据我了解,如果要播放另一个文件,则需要停止播放旧实例,并使用新音频文件的 URL 初始化 AVAudioPlayer 的新实例以播放。

但这很困难,因为我有一个导航控制器,当用户离开播放器屏幕时,声音应该继续播放,而且确实如此。但是,当用户从 tableview 中选择要播放的新音频文件时,viewController 和 AVAudioPlayer 的新实例被初始化,我无法阻止旧的播放。我如何让这个工作?

4

1 回答 1

0

你可以做这样的事情

在您的 v1AppDelegate.h 文件中添加,

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
#include <AudioToolbox/AudioToolbox.h>

@interface v1AppDelegate : UIResponder <UIApplicationDelegate>
{
    AVAudioPlayer *myAudioPlayer;
}
@property (nonatomic, retain) AVAudioPlayer *myAudioPlayer;
@property (strong, nonatomic) UIWindow *window;

@end

现在在你的 v1AppDelegate.m 文件中添加这个

#import "v1AppDelegate.h"
#import <AVFoundation/AVFoundation.h>
#include <AudioToolbox/AudioToolbox.h>

@implementation v1AppDelegate

@synthesize window = _window;
@synthesize myAudioPlayer;


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    //start a background sound
    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"Startsound" ofType: @"m4a"];
    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath ];    
    myAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];
    myAudioPlayer.numberOfLoops = -1; //infinite loop
    [myAudioPlayer play];


    // Override point for customization after application launch.
    return YES;
}

如果您希望在代码中的任何其他位置停止或开始播放此音乐,只需添加此

#import "v1AppDelegate.h"    
- (IBAction)stopMusic
{
    v1AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    [appDelegate.myAudioPlayer stop];
}

- (IBAction)startMusic
{
    v1AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    [appDelegate.myAudioPlayer play];
}
于 2013-07-03T01:08:08.483 回答