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 不播放声音的主要内容,如果未能解决你的问题,请参考以下文章

AVfoundation AudioPlayer 不工作

操场上的 Swift AVFoundation 不输出声音

AVFoundation - iOS 听不到声音

Xcode iOS:如何使用 AVFoundation 重置声音

iOS - 使用 AVFoundation 录制声音后 iPhone 声音级别低

AVFoundation 音乐播放器的 IOS 问题,50% 的时间都在工作