AVAudioPlayer没有播放我的mp3

时间:2012-02-02 00:23:39

标签: ios audio avaudioplayer

我正在尝试在我的应用中播放一个简短的音频文件(mp3)。这是我正在使用的代码:

   AVAudioPlayer *AudioPlayer;
    NSError *error;


    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                         pathForResource:@"filename"
                                         ofType:@"mp3"]];

    AudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];

    AudioPlayer.delegate = self;

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

    if (error)
    {
        NSLog(@"Error: %@",
              [error localizedDescription]);
    }

    else
    {
        [AudioPlayer play];

    }

我真的不知道自己错过了什么,我所遵循的例子似乎与我正在做的事情相符。

编辑:我还应该提一下代码运行没有错误,有一个尝试捕获这个。

3 个答案:

答案 0 :(得分:3)

由于ARC,我遇到了类似的问题。不是在使用它的同一方法中定义AVAudioPlayer,而应该在其他地方有一个实例变量,例如UIViewController。这样ARC就不会自动释放这个对象,音频可以播放。

答案 1 :(得分:1)

我做了一些补充并且让它发挥作用:

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

@interface FirstViewController : UIViewController <AVAudioPlayerDelegate> {
AVAudioPlayer *data;
UIButton *playButton_;
}

@property(nonatomic, retain) IBOutlet UIButton *playButton;

-(IBAction)musicPlayButtonClicked:(id)sender;

@end

#import "ViewController.h"

@implementation FirstViewController

@synthesize playButton=playButton_;

- (IBAction)musicPlayButtonClicked:(id)sender {

NSString *name = [[NSString alloc] initWithFormat:@"09 No Money"];
NSString *source = [[NSBundle mainBundle] pathForResource:name ofType:@"mp3"];
if (data) {
    [data stop];
    data = nil;
}
data=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: source] error:NULL];
data.delegate = self;
[data play];
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

在Interface Builder中,我添加了一个按钮,并将其与IBOutletmusicPlayButtonClicked IBAction相关联。

不要忘记将AVFoundation框架添加到您的项目中。

PS 我真的很抱歉我的英语,请放纵。

答案 2 :(得分:0)

我自己遇到了这个问题,直到我发现声音没有通过扬声器传来(相反 - 它被重定向到呼叫扬声器)。尝试添加此项以通过扬声器重定向声音:

UInt32 doChangeDefaultRoute = 1;
        AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
                                 sizeof (doChangeDefaultRoute),
                                 &doChangeDefaultRoute);