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.h
和ViewController.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按钮没有在按钮点击时播放音频文件的主要内容,如果未能解决你的问题,请参考以下文章