关于objective C:如何获得 iPhone OS 3.1 的键盘声音低沉?

How to get iPhone OS 3.1 muffled keyboard sound?

我已将 iPhone 的 Tock 声音添加到我自己的自定义键盘中,如下所示:

1
2
3
4
5
6
NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:@"Tock" ofType:@"aiff"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path], &soundID);
AudioServicesPlaySystemSound(soundID);
// we don't dispose of the sound to keep the sound in the cache for the next time
//AudioServicesDisposeSystemSoundID(soundID);

然而,在 iPhone OS 3.1 中,键盘的 Tock 声音被抑制了,例如比其他声音和 3.0 中的声音要安静得多。我的方法的声音仍然很大并且处于最大音量。如何获得与 iPhone 的默认键盘相同的音量?

顺便说一句,Twitterrific 中的 Tock 声音被适当地消音了。

干杯

法师先生


使用 0x450 作为 SystemSoundID 在正确的音量下为我工作 - 请注意,它不尊重键盘点击打开/关闭偏好。

我不确定它的便携性——它适用于我的模拟器和第三代 iPod Touch。我怀疑它适用于所有设备,但可能会在软件更新中更改,恕不另行通知。

我通过在 AudioServicesPlaySystemSound 上设置断点并按普通键盘键得到这个数字 - 第一条汇编指令将 SystemSoundID 复制到寄存器中,因此您可以在调试器的"寄存器"视图中看到它。


使用 AVAudioPlayer 而不是 AudioServices,您将可以访问允许您降低和提高声音音量的音量属性。


通过使用支持 UIInputViewAudioFeedback 的客户输入视图,您可以以正确的音量播放声音并尊重用户的按键声音设置。


这可能很愚蠢,但我在其他示例代码中看到还有一个 tick 声音文件。从我看到的例子来看,它是 ofType:@"caf",所以也值得一试。对不起,如果我走远了。