除了“tock”声之外,是否有其他可用的iOS系统声音?

16

我在我的第一个iPhone应用程序上实现了一个替代键盘。我想在按下按钮时播放声音。当按下标准键盘时,使用默认的点击声音即可,但是我不知道如何获取该声音。

在这个答案中,我找到了如何播放“tock”声音:

Playing system sound without importing your own

我很容易就做到了这一点,但它是一个非常响亮的声音。我在Stack Overflow和Xcode帮助中搜索了除“tock”之外的可用iOS系统声音,但是我找不到它们。

是否有其他内置的声音,甚至是默认键盘声音,可以使用?


1
如果问题真的是标题所示,我敢回答“有AVSystemSoundID_Vibrate”。 - user529758
2个回答

18

在发布这个问题近两周以来,我一直在寻找一种方法来使我的应用程序中的键盘点击声音发挥作用。我尝试了实现和理解苹果关于自定义输入视图的文档,我在尝试让它工作时损坏了我的应用程序,并创建了几个测试项目。我试图从网上的各种其他来源解释如何做到这一点。但所有的努力都没有成功。除了这个最后一个功能,我已经完成了我的应用程序。

最终,我在这个iPhone Dev SDK论坛的问题/帖子的末尾找到了一个简单的答案。最终的答案很容易,只需要几秒钟就可以完成以下简单的步骤。

  1. Link the 'AudioToolbox.framework' to your project (Click on your project's Target, select 'Build Phases' and under the 'Link Binary with Libraries' item click the + button and add the framework.

  2. Add the following to the header file of the class where you want to implement the click:

     #import <AudioToolbox/AudioToolbox.h>
    
  3. Add the following line of code in the implementation file of your class wherever you want the keyboard click sound to appear:

     AudioServicesPlaySystemSound(0x450);
    

就是这样!它奏效了!哈利路亚!

根据另一个论坛上的保罗所说,这种方法有以下缺点:

“键盘按键不会受到iOS用户偏好键盘声音开/关的影响。”

但是当我在iPhone上调高或调低音量,或者将iPhone静音时,键盘点击声会随之上下调整或静音,正如预期的那样。鉴于我发现按照文档中记录的“UIInputViewAudioFeedback”实现键盘点击声几乎不可能,我很高兴能让任何东西起作用。

附言:如果有人有一个可以下载、构建和在我的iPhone上运行以查看如何正确实现“UIInputViewAudioFeedback”的实际项目链接,我很乐意看一看。但到目前为止,我还没有找到任何这样的链接,也没有任何逐步指导新手如何使其工作的说明。

[2012年9月30日更新:]我很高兴地说,我的应用程序使用了这种方法被接受进入了应用商店。这是它: https://itunes.apple.com/app/fine-tip-tip-calculator/id563429225

...戴尔


我已经放弃寻找解决方案了。谢谢您的发布。 - d.altman
4
这是一个包含所有音频代码的链接,您可以将其输入到该方法中。http://iphonedevwiki.net/index.php/AudioServices - M Jesse
真的没有可以替代 0x450 的常量吗?! - Olie
谢谢,戴尔。我在iOS 8.1.3 / iPhone 6上注意到一件事情,那就是当视频相机开启时,我能够播放:AudioServicesPlaySystemSound(1114); // =“endrecord.caf”。但我无法通过其他各种声音播放方法来播放它。 另外请注意:iphondevwiki中的大多数声音在该场景下都无法播放。 - Jason R. Escamilla
看看这个答案。也许对你有用,可以在不使用音频工具箱的情况下播放声音:https://dev59.com/CJrga4cB1Zd3GeqPkUUx#39385287 - Bruno Bieri
显示剩余2条评论

7
尝试使用UIDeviceplayInputClick
[[UIDevice currentDevice] playInputClick];

从文档中可以看到:

使用此方法在用户在自定义输入或键盘辅助视图中轻敲时播放标准系统键盘点击。仅当用户在“设置”>“声音”中启用键盘点击,并且输入视图本身被启用和可见时,才会播放点击声音。

确保您在输入视图类中采用了UIInputViewAudioFeedback协议,并实现了enableInputClicksWhenVisible代理方法以返回YES,如文档所述。

编辑 - 有关代理方法的实现,请查看苹果公司关于自定义输入视图的文档


谢谢mopsled!我有点超出我的能力范围了。我无法让它工作。以下是我迄今为止所做的事情。在我的视图*.h文件中,我添加了粗体文本:'@interface TipMainViewController : UIViewController <TipFlipsideViewControllerDelegate, **UIInputViewAudioFeedback**>''@property (nonatomic, readonly) BOOL enableInputClicksWhenVisible;' 在我的视图*.m文件中,我添加了:'@synthesize enableInputClicksWhenVisible;''- (BOOL) enableInputClicksWhenVisible { return YES; }'并在我想要打勾声的地方插入了以下内容:'[[UIDevice currentDevice] playInputClick];'我做错了什么? - Dale Dietrich
抱歉,我尝试了很多次给上面的内容加上一些结构,但是这里的评论系统似乎不允许它。 :( - Dale Dietrich
你的实现已经接近了,但是你不应该添加任何@property@synthesize语句来实现委托。此外,你应该在输入视图上实现协议,而不是在视图控制器上实现。请查看我在答案中添加的链接。 - mopsled
好的,但我没有单独的键盘输入视图。我使用拖放到视图控制器的xib文件中的TextField。我隐藏了正常的键盘,并通过添加到视图控制器的xib文件上的按钮实现了一个键盘。我确实阅读了您在上面“EDIT”字段中链接的优秀教程。认为我正在遵循其说明,我走上了创建一个名为“KeyboardClick”的单独UITextField类的道路。在Interface Builder中使用Identity Inspector将适用的输入文本字段链接到新的KeyboardClick类。[空间不足:(] - Dale Dietrich
我必须承认,我并不完全理解协议和委托。我需要实例化新的KeyboardClick类吗?我尝试过这样做,但什么也没有发生。此外,xCode说它是一个未使用的变量。我感到很沮丧。 - Dale Dietrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接