Iphone 声音未与AVAudioPlayer一起播放

Iphone 声音未与AVAudioPlayer一起播放,iphone,ios,audio,avaudioplayer,core-audio,Iphone,Ios,Audio,Avaudioplayer,Core Audio,我已经搜索过了,我相信我的问题是独一无二的。我在使用AVAudioPlayer时注意到模拟器5.1的错误,这不是我的问题。我在iOS 5.1设备上运行 这是我的头文件: #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #import <AVFoundation/AVAudioPlayer.h> -(IBAction)pushBell; @end #import <UIKit/UIK

我已经搜索过了,我相信我的问题是独一无二的。我在使用AVAudioPlayer时注意到模拟器5.1的错误,这不是我的问题。我在iOS 5.1设备上运行

这是我的头文件:

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

-(IBAction)pushBell;

@end
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <AVFoundation/AVAudioPlayer.h>

@interface BellViewController:UIViewController

@property (nonatomic, strong) AVAudioPlayer *theAudio;

-(IBAction)pushBell;

@end
我在.xib中有一个播放文件的按钮

为了确保正确引用了音频文件,我故意键入了错误的文件名,实际上我遇到了一个异常。为了确保该文件可播放,我将其邮寄给自己并在设备上播放

当我按按钮时,我什么也没听到。没有错误。我不知道怎么了

更多信息 带iOS 5.1的iPhone4 代码4.3.2
音频从一个大的.wav文件使用afconvert转换为.caf格式,速度约为700kbps。

我同意hooleyhoop的说法。试一试

NSLog(@"%@", error.userInfo) 
看看会发生什么

另一种选择是在
viewDidLoad
initWithNib
中设置播放器对象,并将其作为属性存储在对象上。这样你就可以使用 [self.theAudio prepareToPlay]

为了避免每次按下按钮时加载音频,如果是高质量音频,则可以节省一些时间。然后只需调用
[self.theaudioplay]在您的
iAction
方法中


很抱歉,如果这个答案有点草率-在iPad上键入,因此无法正确地重复检查。

我认为这是内存问题,您应该将
AVAudioPlayer*theAudio
实例化为全局类对象,并在
init
方法中初始化它。然后只需运行
[theaudioplay]-(iAction)pushBell
方法中的code>方法

我回答了一个与播放系统声音相关的类似问题(事实上,这正是您试图做的),请查看我的回答在底部:

顺便说一下,把铃声当作系统的声音,<代码> AvoooPoovi[/Cord]更适合播放音轨,而不是铃声和效果。


我希望它能有所帮助。

您应该给它一些时间准备发音,因为它可能是从URL缓冲的

代码:

[theAudio prepareToPlay];

[self performSelector:@selector(playMusic) withObject:nil afterDelay:3.0];

您的
theAudio
AVAudioPlayer
甚至在开始播放之前就被释放(因为它在pushBell方法中被分配为局部变量)

将代码更改为:

头文件:

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

-(IBAction)pushBell;

@end
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <AVFoundation/AVAudioPlayer.h>

@interface BellViewController:UIViewController

@property (nonatomic, strong) AVAudioPlayer *theAudio;

-(IBAction)pushBell;

@end

我假设
BellController
是一个
UIViewController
,如果它是一个不同类型的类,只需相应地修改代码。

已解决。

1.-检查您的文件是否已在构建阶段添加到“复制捆绑资源”。

2.-ViewController.m

#import <AVFoundation/AVAudioPlayer.h>

@interface ViewController ()
@property (nonatomic, strong) AVAudioPlayer *theAudio;
- (IBAction)pushBell;
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *soundPath =[[NSBundle mainBundle] pathForResource:@"beep-beep" ofType:@"caf"];
    NSURL *soundURL = [NSURL fileURLWithPath:soundPath];

    NSError *error = nil;
    self.theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:&error];
}

- (IBAction)pushBell {
    [self.theAudio play];
}
#导入
@界面视图控制器()
@属性(非原子,强)AVAudioPlayer*theAudio;
-(i)普什贝尔;
@结束
@实现视图控制器
-(无效)viewDidLoad
{
[超级视图下载];
NSString*soundPath=[[NSBundle mainBundle]路径资源:@“caf”类型的“哔哔”声;
NSURL*soundURL=[NSURL fileURLWithPath:soundPath];
n错误*错误=nil;
self.theAudio=[[AVAudioPlayer alloc]initWithContentsOfURL:soundURL错误:&error];
}
-(i)普什贝尔{
[self.theaudioplay];
}
3.-将iAction连接到Interface Builder中的按钮


完成。

这是我的问题,所以我只是把它贴在这里,以防它对任何人都有帮助

信不信由你,似乎有一个bug(至少在iPad2的iOS5.1中)如果你将侧开关设置为静音,然后将侧开关设置为锁定旋转,AVAudioPlayer声音将不会播放,除非通过耳机


因此,我不得不转到“设置”应用程序,将开关切换回“静音”,然后取消iPad的静音,将其切换回“锁定旋转”,我的应用程序开始正常工作。

你使用调试器了吗?你检查了NSError的内容了吗?tnx jowie,我在浪费大量时间调试后修复了我的问题,以确保我是正确的路径avplayer对象。很高兴了解操作系统有bug。是的…iOS很好,但还远远不够完美;)谢谢!!!我在iOS 5和iPad 1上花了至少几个小时的时间在凌晨1点才弄明白这一点我不确定当时是否错过了,但是如果你的侧开关设置为锁定旋转,那么控制中心就可以静音,反之亦然。iOS 5.1上也有可能出现这种情况,但我当时没有意识到。天哪,这也让我很沮丧。在iphone6上。当声音通过其他应用程序播放时(我重新编码的视频随后立即播放)。“音频不播放”似乎在我的编码生活中多次出现,每次都是不同的原因!这是我最近的一次。。。ARC打开时,
alloc init
不足以确保对象保留在内存中!谢谢:)有趣的是,作为WAV文件,无论它们是否显示在捆绑资源中,它们都将播放。作为CAF文件,除非添加,否则不会播放。我还注意到,当您将WAV文件添加到Xcode(4.4)项目中时,它将自动选中“添加到目标”。对于CAF文件,此复选框默认为关闭。我不知道他们为什么要这样做,这让我一直很吃惊!还有人吗?谢谢,你帮我省了很多麻烦。这是2016年-仍然没有确定!