AVFoundation 不播放声音
Posted
技术标签:
【中文标题】AVFoundation 不播放声音【英文标题】:AVFoundation not playing sound 【发布时间】:2013-02-28 19:28:31 【问题描述】:我一直使用音频工具箱播放我的声音,但用户说没有声音,这是因为当您处于静音状态时它不会播放。我已经尝试过很多次换成 av 基础,但它对我来说从来没有用过。这是我现在尝试使用的代码:
- (IBAction)soundbutton:(id)sender
NSString *path = [[NSBundle mainBundle] pathForResource:@"EASPORTS" ofType:@"mp3"];
AVAudioPlayer * theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
[theAudio play];
【问题讨论】:
【参考方案1】:原因可能是在 ARC 中,您的音频播放器是由 ARC 发布的,因此您需要对 AVAudioPlayer
进行强引用,您可以通过将 AVAudioPlayer
作为类级别属性来做到这一点。
这是你的做法,在你的.h
文件中像这样
@property (strong, nonatomic) AVAudioPlayer *theAudio;
并在.m
文件中像这样合成它
@synthesize theAudio;
最后你的代码看起来像这样
- (IBAction)soundbutton:(id)sender
NSString *path = [[NSBundle mainBundle] pathForResource:@"EASPORTS" ofType:@"mp3"];
self.theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil];
[self.theAudio play];
还要检查您的委托方法是否有响应
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error;
【讨论】:
好吧,如果它不是你的项目,那你怎么知道代码?无论如何,您应该将播放器作为类中的属性,它将解决您的问题 但尝试将AVAudioPlayer
作为我提到的类中的属性
仍然没有播放 :( 当我回到我的旧代码时它可以工作 :/ : - (IBAction)soundbutton:(id)sender CFBundleRef mainBundle = CFBundleGetMainBundle(); CFURLRef soundFileURLRef; soundFileURLRef = CFBundleCopyResourceURL (mainBundle, (CFStringRef) @"EASPORTS", CFSTR ("mp3"), NULL); UInt32 soundID; AudioservicesCreateSystemSoundID(soundFileURLRef, &soundID); AudioServicesPlaySystemSound(soundID);
根据您的问题,给出了答案,否则我不知道您的代码中可能存在什么问题,除非我看到与AVAudiPlayer
相关的项目代码
答案中的代码是解决问题和症状的工作代码,如果您不知道如何播放音频,那么您应该首先学习如何使用 AVFoundation 播放音频。您可以在互联网上找到许多教程以上是关于AVFoundation 不播放声音的主要内容,如果未能解决你的问题,请参考以下文章
Xcode iOS:如何使用 AVFoundation 重置声音