iOS按钮没有在按钮点击时播放音频文件

Posted

技术标签:

【中文标题】iOS按钮没有在按钮点击时播放音频文件【英文标题】:iOS button not playing audio file on button tap 【发布时间】:2013-04-22 04:15:43 【问题描述】:

这是一个新手问题。

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

我使用的是 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 模拟器和我的设备上进行了测试。

【问题讨论】:

检查 iboutlet 和按钮操作? @brno792 检查您是否已在 TouchUpInside 方法上连接按钮。 看这个我的答案.. ***.com/questions/16033723/… 【参考方案1】:

我认为 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.)"

【讨论】:

@brno792,你真的让它工作了吗?如果是这样,怎么做?我想知道。 我没有@property 所以也许就是这样。或者我有 error=nil 而不是 error=&error,所以也许就是这样。它现在可以工作了,谢谢。我还在使用.wave。如果我想在点击按钮时从 3 或 4 中随机选择一个音频文件播放,我该怎么办?谢谢。 @brno792,是的,如果您没有强大的属性并且您正在使用 ARC,我已经看到一些关于音频播放器被释放的帖子。错误参数不会导致问题。我确实有强属性,我的还是不行。【参考方案2】:

请尝试使用这个..

- (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];

希望对你有帮助

【讨论】:

【参考方案3】:

试试这样,

     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是否连接,并检查带有断点的按钮操作方法。

【讨论】:

仅用于方法调用 iboutlet 不是强制性的,而是应该触发适当的事件。 谢谢,所以我尝试了您的解决方案。我必须添加 AVAudioPlayer* avPlayer = ...。我还检查了 IBOutlet,我收到了操作:playAudio: Button Touch Up Inside。所以我认为它是有联系的。我仍然没有任何声音。 一旦检查您的音频文件是否有任何音乐/? 检查一下***.com/questions/9963230/…【参考方案4】:

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

因此,您需要将音频文件缩短到 10 秒以下。

【讨论】:

【参考方案5】:

当我遇到这个问题时,我正在使用 .m4a。对我来说,不实现 AVAudiosession 是个问题

var session = AVAudioSession.sharedInstance()
    do 
        session.setCategory(AVAudioSessionCategoryPlayAndRecord)
        try session.setActive(true)
     catch 
        gf.displayAlert("problem encountered", userMessageTitle: "")
        self.navigationController?.popViewControllerAnimated(true)
    

【讨论】:

以上是关于iOS按钮没有在按钮点击时播放音频文件的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 4.0:没有在后台播放音频?

按下主页按钮后,AVAudioPlayer 不播放音频

如何添加它,以便在单击按钮时播放 html 中的音频文件

音频完成后更改按钮 Xcode

单击后退按钮iOS 6时如何继续播放音频

按下后退按钮时音频停止播放