AVAudioPlayer не играет мой mp3 - PullRequest
       3

AVAudioPlayer не играет мой mp3

1 голос
/ 02 февраля 2012

Я пытаюсь получить короткий аудиофайл (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];

    }

Я действительно не знаю, чего мне не хватает, примеры, которым я следовал, похоже, соответствуют тому, что я делаю.

edit: я должен также упомянуть, что код работает без ошибок, есть попытка обойти это.

Ответы [ 3 ]

3 голосов
/ 19 июня 2013

У меня была похожая проблема из-за ARC.Вместо определения AVAudioPlayer в том же методе, который вы используете, у вас должна быть переменная экземпляра где-то еще, например UIViewController.Таким образом, ARC не освобождает этот объект автоматически, и звук может воспроизводиться.

1 голос
/ 15 января 2013

Я сделал несколько дополнений и заработал:

#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

В Интерфейсном Разработчике я добавил кнопку и связал ее с IBOutlet и musicPlayButtonClicked IBAction.

И не забудьте добавить AVFoundation framework в ваш проект.

ps Мне очень жаль моего английского, пожалуйста, будьте снисходительны.

0 голосов
/ 02 февраля 2012

У меня была эта проблема, пока я не обнаружил, что звук не идет через динамики (вместо этого - он был перенаправлен на динамик вызовов). Попробуйте добавить это, чтобы перенаправить звук через динамики:

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