1

我正在学习如何在按下按钮时播放 mp3 声音的教程。

我创建了一个按钮(playSound)。

我将它添加到视图控制器界面:

- (IBACTION)playSound:(id)sender;

在实现中,我声明了所需的头文件,并编写了以下内容:

#import "AudioToolbox/AudioToolbox.h"
#import "AVFoundation/AVfoundation.h"

- (IBAction)playSound:(id)sender {

    //NSLog(@"this button works");
    AVAudioPlayer *audioPlayer;
    NSString *audioPath = [[NSBundle mainBundle] pathForResource:@"audio" ofType:@"mp3"];
    //NSLog(@"%@", audioPath);
    NSURL *audioURL = [NSURL fileURLWithPath:audioPath];
    //NSLog(@"%@", audioURL);
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:nil];
    [audioPlayer play];

}

我没有收到任何错误。NSlogs 记录的 URL 很好,现在我不知道在哪里进一步查看。我还检查了我的 MP3 声音是否损坏,但事实并非如此。我听到的只是 1 秒钟的噼啪声。然后它停止。

4

4 回答 4

4

您声明了一个局部变量audioPlayer来保存指向播放器的指针。一旦您的按钮处理程序返回,播放器就会在它有机会播放您的声音文件之前被释放。声明一个属性并使用它来代替局部变量。

在 YourViewController.m 文件中

@interface YourViewController ()
@property (nonatomic, strong) AVAudioPlayer *audioPlayer;
@end

或在 YourViewController.h 文件中

@interface YourViewController : UIViewController
@property (nonatomic, strong) AVAudioPlayer *audioPlayer;
@end

然后在您的代码中audioPlayer替换为。self.audioPlayer

于 2013-09-20T12:15:41.420 回答
0

已编辑

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"Name of your audio file" 
                                                              ofType:@"type of your audio file example: mp3"];
    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
    audioPlayer.numberOfLoops = -1;
    audioPlayer.delegate=self;
    [audioPlayer play];

试试这个,让我知道。 确保为 audioPlayer 设置委托。

于 2013-09-20T11:37:24.373 回答
0

试试这个它对我有用

在.h

AVAudioPlayer * _backgroundMusicPlayer;

NSString *backgroundMusicPath = [[NSBundle mainBundle] pathForResource:@"Theme" ofType:@"mp3"];
    NSURL *backgroundMusicURL = [NSURL fileURLWithPath:backgroundMusicPath];
    NSError *error;
    _backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error];
    [_backgroundMusicPlayer setDelegate:self];  // We need this so we can restart after interruptions
    [_backgroundMusicPlayer setNumberOfLoops:-1];
    [_backgroundMusicPlayer play];
于 2013-09-20T11:47:28.497 回答
0

首先在您的项目中重新添加您的音乐文件,然后尝试此代码使用日志您可以看到错误。

NSError *error;

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

AVAudioPlayer   *audioPlayer = [[AVAudioPlayer alloc]
                              initWithContentsOfURL:url
                              error:&error];
if (error){
//Print Error
NSLog(@"Error in audioPlayer: %@",
          [error localizedDescription]);
} else {
audioPlayer.delegate = self;
[audioPlayer prepareToPlay];
[audioPlayer setNumberOfLoops: -1];
[audioPlayer play];
audioPlayer.volume=1.0;

}

确保您的音乐文件已正确添加到项目中

于 2013-09-20T11:54:54.017 回答