2010-01-14 72 views
2

有短短音效样本,在模拟器玩就好了,但不是在所有实时iPhone 3GS。下面的代码,大概,是从苹果SysSound样本:声音在模拟器的工作,而不是在真正的iPhone

CFBundleRef mb = CFBundleGetMainBundle(); 
CFURLRef soundFileURLRef = CFBundleCopyResourceURL 
    (mb, CFSTR("mySound"), CFSTR ("caf"), NULL); 

SystemSoundID sid; 
AudioServicesCreateSystemSoundID(soundFileURLRef, &sid); 
AudioServicesPlaySystemSound(sid); 

当使用iPhone,我能听到从iTunes(没有试图在同一时间使用的打我的声音)keyclicks和音乐 - 却不能听我的声音。 Vibra工作正常,所以即使Framework也应该正确设置。

尝试连SoundEffect.h/m示例代码,都没有变化。使用相同的声音文件,但不应该CAF,尤其是当它在模拟器中播放时?

接下来我可以尝试什么?

+0

很抱歉,如果我说明明显,但在你的iPhone上无声的硬件开关? – Michael 2010-01-14 13:26:02

+0

当我说“我可以听到来自iTunes的按键和音乐”时,这意味着iPhone处于非静音模式。无论如何,好检查... – JOM 2010-01-15 07:53:08

回答

2

尝试转换为其他格式,如wav或mp3,然后再次播放。如果你想使用的咖啡馆,请确保您正确格式化的咖啡馆在Terminal.app:

afconvert -f caff -d ima4 mysound.wav 
+0

最有可能我以错误的方式转换...仍然不明白为什么模拟器会发挥这些声音和真正的设备不。模拟器应该模拟真实的设备,对吧?这就是模拟器的目的! – JOM 2010-01-15 07:55:15

+1

错误。模拟器不是模拟器。它不会限制你的网络速度,CPU速度RAM或其他任何东西。它只是一个可视化工具,用于查看您的应用将如何看起来并与触摸交互。这可能是因为你的电脑上有更多的编解码器,而不是iphone – coneybeare 2010-01-15 13:02:20

+0

附带的选择几个。谢谢,这对我很有用。 – 2010-12-24 19:39:51

0

一种长镜头,但请记住手机的文件系统区分大小写,而mac通常不是。仔细检查您的文件名

+0

我以为是* nix的基础,这将是区分大小写:) – willcodejavaforfood 2010-01-14 14:29:04

+0

人们会这样想,但这会让方式太简单。如果你有一个文件“Foo”,并编写代码将其打开为“foo”,它会在模拟器中工作,在设备上失败。 – justin 2010-01-14 14:36:47

+0

澄清一点 – justin 2010-01-14 14:37:44

0

找到一个简单的解决方案:使用AIF的声音文件

  • 点击iTunes>偏好
  • 单击“常规”选项卡
  • 点击“导入设置”按钮
  • 在“导入使用”下拉列表中,选择“AIFF编码器”
  • 保存更改
  • 选择声音文件,并选择“创建AIFF版本”

这里跟是我使用的代码,一起SoundEffect.hSoundEffect.m苹果样本BubbleLevel

NSBundle *mainBundle = [NSBundle mainBundle]; 
buzzerSound = [[SoundEffect alloc] initWithContentsOfFile:[mainBundle pathForResource:@"buzzerSound" ofType:@"aif"]]; 
[buzzerSound play]; 

现在相同的代码 - 和声音效果 - 在这两个仿真器工作nd硬件。顺便说一句,不要忘了切换回原来的iTunes设置!

2

正如阿里纳斯 - 我有完全相同的问题,花了大概接近一个小时的文件转换为正确的格式,等等。然而,问题是在iPad上的“静音”开关。所以即使音量开始上升,我也可以听到iPad上的其他声音,因为静音开关已打开,但不会播放系统声音。

为了增加混淆,此应用程序使用文本到语音以及来自转录的音量非常好,它只是来自AudioServicesPlaySystemSound()的声音,我听不到。

+0

好点,做几次相同的事情:) – JOM 2012-12-04 09:27:23

相关问题