2010-04-19 58 views
0

我试图在我的应用程序中播放两个.wav文件,但我只能播放第一个wav文件,第二个文件没有播放。在iPhone中使用AudioServices播放wav文件

我已经添加了AudioToolbox框架。 在我的.h文件我已经包括Audiotoolbox.h文件,并具有以下声明

//Beep Sound 
SystemSoundID soundFileObject; 
SystemSoundID recycleFileObject; 

在我的.m文件我正在注册这两个wav文件如下

CFURLRef soundFileURLRef = CFBundleCopyResourceURL (CFBundleGetMainBundle(),CFSTR ("Beep"),CFSTR ("wav"),NULL); 
AudioServicesCreateSystemSoundID (soundFileURLRef,&soundFileObject); 

CFURLRef soundFileURLRef2 = CFBundleCopyResourceURL (CFBundleGetMainBundle(),CFSTR ("Recycle"),CFSTR ("wav"),NULL); 
AudioServicesCreateSystemSoundID (soundFileURLRef2,&recycleFileObject); 

,我有编写了两种单独播放每个文件的方法。

-(void)playBeepSound 
{ 
    NSLog(@"Beep sound called : %d", soundFileObject); 
    AudioServicesPlaySystemSound (soundFileObject); 
} 


-(void)playRecycleSound 
{ 
    NSLog(@"Recycle sound called : %d", recycleFileObject); 
    AudioServicesPlaySystemSound (recycleFileObject); 
} 

但我只能够播放哔声,但不能播放第二个声音wav文件。

什么是错误?

感谢

回答

0

如果我是你,我会换音频工具箱代码中的一类,这样就可以分解出公共代码,并发挥更舒适(example code)的声音。这也可以解决你的问题,因为它似乎是一个小错字 - 你给我们的示例代码看起来很好。 (你是否尝试记录一切?没有空值,一切都按预期调用?你试图同时播放这两种声音,还是在它们之间有延迟?首先运行哪个声音有什么关系?)

+0

当声音完成播放后,我们需要释放该声音对象 - 我们如何知道声音何时停止? (使用你的包装) – Jonny 2010-09-02 11:14:06

+0

系统声音服务通常用于短的UI效果。这意味着它们可以被循环使用:只有一个特定样本的实例会一遍又一遍地播放而不会释放。例如,当视图控制器被取消分配时,它可能会失去内存。 – zoul 2010-09-02 14:46:37