iPhone:如何为自定义键盘制作按键声音?

     2023-02-25     227

关键词:

【中文标题】iPhone:如何为自定义键盘制作按键声音?【英文标题】:iPhone: how to make key click sound for custom keypad? 【发布时间】:2009-05-04 01:38:04 【问题描述】:

有没有办法以编程方式调用键盘“点击”声音?我的应用程序有一个自定义键盘(由 UIButtons 构建),我想在用户点击按键时提供一些音频反馈。我尝试在 Garageband 中创建自己的声音,但对我的任何创作都不满意。如果没有调用按键的标准方法,谁能给我指出一个可能有这样一个宝石的声音库?

【问题讨论】:

【参考方案1】:

播放默认键盘声音有一个非常快速的解决方案:

    添加 AudioToolbox.framework

    在您希望播放声音的任何位置添加以下行:

    AudioServicesPlaySystemSound(0x450);

【讨论】:

这是在工具箱中播放任何声音的好方法。 在 iOS 7 上似乎对我不起作用。不确定 id 是否已更改或是否是其他问题。 ID 已更改。试试 AudioServicesPlaySystemSound(1104);. 仅供参考:0x450(十六进制)是 1104(十进制);相同的 ID。【参考方案2】:

从 iOS 4.2 开始,在 UIView 的自定义子类上采用 UIInputViewAudioFeedback 协议。将此视图设为您的“inputView”,然后在适当的时候调用“playInputClick”。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIInputViewAudioFeedback_ProtocolReference/Reference/Reference.html

只是为了节省一些人的时间。把它放在你的自定义视图中:

- (BOOL) enableInputClicksWhenVisible 
    return YES;

要让点击这样做:

[[UIDevice currentDevice] playInputClick];

【讨论】:

这似乎是正确的做法,因为它将尊重用户对键盘点击声音的全局设置。但这似乎不起作用。有人成功实现过这个方法吗? 这对我来说非常好用,但是它有一个问题,它只有在键盘可见时才有效......它非常适合用于文本视图和文本字段的辅助视图和备用输入视图,但如果您只想随时随地播放声音,这不是一个解决方案。 太棒了!对于键盘上的附件视图,这是正确的方法。我以前从未见过这个。 在此处查看此示例实现:***.com/a/39385287/1306012【参考方案3】:

无需将文件复制到您自己的应用程序中 - 您应该可以直接从 UIKit 框架中获取它:

CFURLRef soundFileURLRef = CFBundleCopyResourceURL(
    CFBundleGetBundleWithIdentifier(CFSTR("com.apple.UIKit")),
    CFSTR ("Tock"),CFSTR ("aiff"),NULL);

【讨论】:

如何将其放入代码中?我尝试了 AudioServicesCreateSystemSoundID(soundFileURLRef) 但它抛出了一个错误......【参考方案4】:

这是我根据 aSquared 的评论做出的:

NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:@"Tock" ofType:@"aiff"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path], &soundID);
AudioServicesPlaySystemSound(soundID);
AudioServicesDisposeSystemSoundID(soundID);

【讨论】:

iOS 7 不再捆绑 Tock.aiff。【参考方案5】:

我找到的最简单的方法是从 iPhone 模拟器中提取 Tock.aiff(键盘声音)并将其与您的应用程序打包,然后在适当的时候使用 AudioServicesPlaySystemSound() 播放它。在我的机器上,只需在 Spotlight 中键入 Tock.aiff 即可打开该文件,但如果您必须去寻找它,它位于 UIKit.framework 的模拟器版本中。

【讨论】:

我实际上已经使用节拍器示例中的“Tock.caf”进行了测试,但由于担心版权问题而不愿将其包含在成品中。这是“允许的”吗? 根据我对 iPhone 开发者许可协议的阅读(免责声明:我不是律师),您不能使用 Tock.aiff,除非您可以找到它作为示例代码的一部分或开源组件(第 2.6 节)。 目前尚不清楚这在技术上是否合法,但我现在已经在两个应用程序中完成了,并且没有收到任何投诉。也许苹果实际上愿意一次就某件事讲道理。如果没有,可能有一种方法可以使用 iPhone 上已有的副本,但如果 Apple 删除声音,这似乎很容易被破坏。 它绝对可以在示例代码中找到——查看节拍器示例。它包括“tick”和“tock”声音文件,但我不确定这些声音是否与“系统”实际使用的声音相同。 请记住,这将忽略用户禁用键盘声音的偏好。【参考方案6】:

使用 0x450 作为 SystemSoundID 对我有用(并且音量正确 - 只是播放内置的 Tock.aiff 声音太大了)。不知道它的便携性——这是在第三代 iPod Touch 上。

仍然不尊重勾选/关闭的偏好。

【讨论】:

谢谢你,这很完美。请将相同的答案发布到***.com/questions/1513986/…,这样我就可以给你赏金(你最应得的)。【参考方案7】:

这就是我所做的:

在以下位置找到“Tock.aiff”:/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/System/Library/Frameworks/UIKit.framework

将它拖到 xCode 中的资源文件夹中,勾选“将项目复制到目标组的文件夹”

将 AVFoundation.framework 导入 xCode 的 Frameworks 文件夹中

在班级顶部导入 AVFoundation:

#import <AVFoundation/AVAudioPlayer.h>

使用以下函数:

- (void)PlayClick 
    NSURL* musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle] 
                                               pathForResource:@"Tock"
                                               ofType:@"aiff"]];
    AVAudioPlayer *click = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil];
    [click setVolume:0.15f];
    [click play];

就是这样!

【讨论】:

【参考方案8】:

据我所知,点击声音不适用于应用程序。我在音频会话服务中没有看到任何相关的内容。 AudioServicesPlaySystemSound() 看起来很有希望,但似乎没有任何系统声音 ID 用于点击声音(仔细查看标题可能会出现一些东西)。您可以随时循环调用AudioServicesPlaySystemSound(i) 并查看是否有任何播放。 iPhone 软件恢复图像可能有声音,但它可能未获得一般使用许可。无需提及越狱 iPhone 以获得美妙的咔哒声。

对于(知识共享)声音,请查看Freesound Project。

对于未来,也许要求 Apple 公开除警报声音之外的系统声音,以便与 AudioServicesPlaySystemSound() 一起使用。

【讨论】:

【参考方案9】:

可能有点晚了... 但是在 MrMage 上一篇文章中,如果你在 AudioServicesPlaySystemSound(soundID); 之后直接做 AudioServicesDisposeSystemSoundID(soundID); 那么您将听不到任何声音,因为您在创建系统声音后立即丢弃它。

你必须先让它完成播放。只有在它完成之前调用 AudioServicesDisposeSystemSoundID 来取消声音

【讨论】:

播放系统声音确实让我的界面动画变慢了。有更快的方法吗? 您可以改为在第二个线程中播放声音。使用 NSOperationQueue 在第二个线程中启动任务。而是在那里开始声音【参考方案10】:

您不必立即处理声音对象。 将指向该声音对象的指针保存在属性中,并仅在您要播放另一个声音时才释放它,然后再重新创建它。

当然最后在 dealloc 中处理 SystemSoundID 对象。

【讨论】:

如何为 iPhone 创建自定义 Interface Builder 插件?

】如何为iPhone创建自定义InterfaceBuilder插件?【英文标题】:HowdoIcreatecustomInterfaceBuilderpluginsfortheiPhone?【发布时间】:2010-05-0804:23:21【问题描述】:我刚刚开始进行iPhone开发,我希望能够创建自定义用户界面元素,您可以将这些... 查看详情

如何为自定义 nemo 操作添加键盘快捷键?

】如何为自定义nemo操作添加键盘快捷键?【英文标题】:Howtoaddkeyboardshortcutforcustomnemoaction?【发布时间】:2016-12-2913:46:04【问题描述】:我有一个自定义nemo操作,如下所述:https://wiki.archlinux.org/index.php/Nemo#Nemo_Actions如何为此操... 查看详情

如何为 UIPageViewController Delegate 制作自定义类?

】如何为UIPageViewControllerDelegate制作自定义类?【英文标题】:HowtomakeacustomclassforUIPageViewControllerDelegate?【发布时间】:2019-02-0715:07:04【问题描述】:我正在编写一个带有UIPageViewController的iOS应用程序。我的根视图控制器是ViewContro... 查看详情

如何为 jQuery 选择器制作自定义函数

】如何为jQuery选择器制作自定义函数【英文标题】:HowtomakecustomfunctionforjQueryselector【发布时间】:2011-10-0211:02:57【问题描述】:如何制作一个自定义函数来附加到jQuery选择器?看起来像这样的东西:$(\'.my_class\').my_function();【问... 查看详情

如何为自定义帖子和分类法制作 Wordpress 存档页面?

】如何为自定义帖子和分类法制作Wordpress存档页面?【英文标题】:HowdoImakeaWordpressarchivepageforcustompostsandtaxonomies?【发布时间】:2011-06-0519:07:24【问题描述】:我正在尝试在Wordpress中设置一个包含自定义帖子类型和自定义分类的... 查看详情

如何为 Metro 开发制作自定义控件和组件?

】如何为Metro开发制作自定义控件和组件?【英文标题】:HowtomakeacustomcontrolandcomponentforMetrodevelopment?【发布时间】:2012-03-1301:04:50【问题描述】:我想领先一步,开始为Metro(Win8)制作一些自定义C#控件和组件,但我找不到任何关... 查看详情

如何为谷歌应用脚​​本功能创建自定义键盘快捷键?

】如何为谷歌应用脚​​本功能创建自定义键盘快捷键?【英文标题】:Howtocreatecustomkeyboardshortcutsforgoogleappscriptfunctions?【发布时间】:2012-11-2318:31:52【问题描述】:我正在尝试了解用GoogleDoc电子表格替换我的一些MicrosoftExcel电... 查看详情

如何为 html 页面制作自定义 url [关闭]

】如何为html页面制作自定义url[关闭]【英文标题】:Howtomakeacustomizedurlforahtmlpage[closed]【发布时间】:2016-10-1010:56:00【问题描述】:网站来源:http://www.salefee.com/我的网站上有一个职业版块,它重定向到http://www.salefee.com/index2.html... 查看详情

如何为 iPhone 6/7 自定义边到边图像指定尺寸?

】如何为iPhone6/7自定义边到边图像指定尺寸?【英文标题】:HowtospecifysizeforiPhone6/7customisededge-to-edgeimage?【发布时间】:2014-11-1114:04:24【问题描述】:假设我希望一个捆绑图像占据iPhone应用程序中所有可用的屏幕宽度-例如横幅。... 查看详情

如何为我的 jquery validate 自定义函数制作一条中心消息?

】如何为我的jqueryvalidate自定义函数制作一条中心消息?【英文标题】:HowcanImakeonecentralmessageformyjqueryvalidatecustomfunction?【发布时间】:2011-11-2918:30:33【问题描述】:我正在使用jqueryvalidateplugin来验证我的表单。我需要验证一个部... 查看详情

如何为 iOS AVFoundation 定义自定义检测器?

】如何为iOSAVFoundation定义自定义检测器?【英文标题】:HowtodefinecustomizeddetectorforiOSAVFoundation?【发布时间】:2017-01-0821:04:01【问题描述】:我想使用iPhone从相机输入中检测一些三角形图案。我找到了一些可以使用AVFoundation检测QR/... 查看详情

如何为列表视图创建自定义适配器?获取 ResourceNotFoundException

】如何为列表视图创建自定义适配器?获取ResourceNotFoundException【英文标题】:Howtocreateacustomadapterforalistview?GettingRessourceNotFoundException【发布时间】:2015-06-2701:37:39【问题描述】:我正在尝试为我的列表视图制作一个自定义适配器... 查看详情

如何为 Vuepress 的特定页面使用自定义布局?

】如何为Vuepress的特定页面使用自定义布局?【英文标题】:HowcanIuseCustomLayoutforSpecificPagesoftheVuepress?【发布时间】:2020-05-2610:31:43【问题描述】:我正在尝试使用我自己的vuepress自定义布局,步骤如下:从VuePress文档中的Homepagesty... 查看详情

如何为 iPhone 制作聊天客户端 [关闭]

】如何为iPhone制作聊天客户端[关闭]【英文标题】:HowtomakeachatclientfortheiPhone[closed]【发布时间】:2011-04-1022:30:13【问题描述】:大家好,我正在开始开发一个将实现聊天界面的原生iPhone应用程序。到目前为止,实现似乎相当复杂... 查看详情

如何为 djangocms-blog 设置自定义模板?

】如何为djangocms-blog设置自定义模板?【英文标题】:HowcanIsetacustomTemplatefordjangocms-blog?【发布时间】:2015-10-1715:15:37【问题描述】:我有一个基于djangocms的网站,现在我想要一个应用程序来帮助一个小型博客部分。现在,我已成... 查看详情

如何为 MkAnnotation View 自定义视图,就像表格视图的自定义单元格一样?

】如何为MkAnnotationView自定义视图,就像表格视图的自定义单元格一样?【英文标题】:HowtodocustomaviewforMkAnnotationViewAslikecustomcellfortableview?【发布时间】:2011-09-1210:18:53【问题描述】:我制作了一个应用程序,我必须在其中实现... 查看详情

如何为 iPhone 制作一个简单的音频均衡器?

】如何为iPhone制作一个简单的音频均衡器?【英文标题】:HowtomakeasimpleaudioequalizerfortheiPhone?【发布时间】:2010-02-0301:31:26【问题描述】:我想为iPhone制作一个简单的音频均衡器,但我不知道如何开始。均衡器应该非常简单,只... 查看详情

创建自定义键盘并在 iPhone 上进行配置

】创建自定义键盘并在iPhone上进行配置【英文标题】:CreatecustomkeyboardandconfigureitonyouriPhone【发布时间】:2011-11-0314:16:12【问题描述】:我正在创建由EMOJI提供的自定义键盘,其中包含字符和图形图标,如笑脸和其他日常使用的符... 查看详情