AVAudioPlayer不会播放mp3文件

时间:2016-08-23 21:57:10

标签: ios objective-c avaudioplayer

当我运行应用程序时,应用程序播放我的MP3文件时听不到任何内容:" d.mp3"。 这个文件可以在iTunes中播放。

我将AVFoundation.framework添加到项目中。 添加了文件" d.mp3"投射。

添加到视图控制器:

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

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

    // Play an MP3 file:
    printf("\n Play an MP3 file");
    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                         pathForResource:@"d"
                                         ofType:@"mp3"]];
    printf("\n url = %x", (int)url );
    AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc]
                                  initWithContentsOfURL:url
                                  error:nil];
    printf("\n audioPlayer = %x", (int)audioPlayer );
    [audioPlayer play];
}

输出日志:

Play an MP3 file
url = 3ee78eb0
audioPlayer = 3ee77810

1 个答案:

答案 0 :(得分:1)

非ARC

您必须在播放期间保留它,因为它不会保留自己。一旦解除分配,它将立即停止播放。

ARC

您需要在类中保存AVAudioPlayer实例。并在它停止播放后释放它。例如,

#import <AVFoundation/AVFoundation.h>

@interface YourController () <AVAudioPlayerDelegate> {
AVAudioPlayer *_yourPlayer;   // strong reference
}
@end

@implementation YourController

- (IBAction)playAudio:(id)sender
{
  NSURL *url = [[NSBundle mainBundle] URLForResource:@"d" withExtension:@"mp3"];
  _yourPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:NULL];
  _yourPlayer.delegate = self;
  [_yourPlayer play];
}

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    if (player == _yourPlayer) {
       _yourPlayer = nil;
   }
}

@end

希望这有帮助