0

这是一个新手问题。

我有一个非常简单的应用程序,它应该只在点击主视图上的按钮时播放音频文件。

我正在使用 XCode 4.6 版。

我在我的项目中添加了一个音频文件“audioclip.wav”。我已经添加了AVFoundation.framework.

我的项目只有ViewController.hViewController.m

我使用助手编辑器双击并从情节提要中的按钮拖动到 .h 文件以创建我的IBAction连接。

我的 ViewController.h:

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

@interface ViewController : UIViewController <AVAudioPlayerDelegate> {
}
- (IBAction)playAudio:(id)sender;

@end

我的 ViewController.m:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (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.
}

- (IBAction)playAudio:(id)sender {
    AVAudioPlayer *audioPlayer;
    NSString *audioPath = [[NSBundle mainBundle] pathForResource:@"audioclip" ofType:@"wav" ];
    NSURL *audioURL = [NSURL fileURLWithPath:audioPath];
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:nil];
    [audioPlayer play];
}

@end

无论出于何种原因(可能是我遗漏了一些愚蠢的事情)当我单击按钮时,audioclip.wav 文件都不会播放。我已经在 iPhone 6.1 模拟器和我的设备上进行了测试。

4

5 回答 5

6

我认为wav文件存在一些问题。有些人似乎可以让它工作,但我尝试了几个不同的文件,但没有一个可以播放。下面代码中注释掉的 mp3 和 m4a 文件运行良好。不需要对委托做任何事情,它是可选的。

    #import "ViewController.h"
    #import <AVFoundation/AVFoundation.h>

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

    @implementation ViewController


    - (IBAction)playAudio:(id)sender {
        //NSString *audioPath = [[NSBundle mainBundle] pathForResource:@"11 Prayer" ofType:@"mp3" ];
       //NSString *audioPath = [[NSBundle mainBundle] pathForResource:@"Sunshine" ofType:@"m4a" ];
        NSString *audioPath = [[NSBundle mainBundle] pathForResource:@"space" ofType:@"wav" ];
        NSURL *audioURL = [NSURL fileURLWithPath:audioPath];
        NSError *error;
        self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&error];
        [self.audioPlayer play];
    }

如果我记录错误,我会得到 wav 文件:

Error Domain=NSOSStatusErrorDomain Code=1685348671 "The operation couldn’t be completed. (OSStatus error 1685348671.)"
于 2013-04-22T05:11:38.430 回答
1

请尝试使用这个..

- (IBAction)playAudio:(id)sender
{
     NSURL *url=[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"audioclip" ofType:@"wav"]];
    NSData *data =[NSData dataWithContentsOfURL:url];
    audioPlayer  = [[AVAudioPlayer alloc] initWithData:data error:nil];
    audioPlayer.delegate = self;
    [audioPlayer setNumberOfLoops:0];

    [audioPlayer play];
}

我希望这会帮助你

于 2013-04-22T05:01:54.163 回答
0

试试这样

     NSString *audio=[[NSBundle mainBundle]pathForResource:@"audioclip" ofType:@"wav"];
    NSURL *url=[[NSURL alloc]initFileURLWithPath:audio];
    avPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];
    avPlayer.delegate = self;
    [avPlayer prepareToPlay];
    [avPlayer play];

并检查是否IBOutlet连接并检查带有断点的按钮操作方法。

于 2013-04-22T04:20:26.993 回答
0

正如我所看到的,您已经使代码非常简单,所以它的制作方式确实要求它不是一个大的 wav 文件。

这样,您需要将音频文件减少到 10 秒以下。

于 2014-04-29T08:23:15.920 回答
0

遇到此问题时,我正在使用 .m4a。对我来说,不实现 AVAudioSession 是问题所在

var session = AVAudioSession.sharedInstance()
    do {
        session.setCategory(AVAudioSessionCategoryPlayAndRecord)
        try session.setActive(true)
    } catch {
        gf.displayAlert("problem encountered", userMessageTitle: "")
        self.navigationController?.popViewControllerAnimated(true)
    }
于 2017-08-29T08:49:53.983 回答