有没有办法以编程方式调用键盘“点击”声音?我的应用程序有一个自定义键盘(由 UIButtons 构建),我想在用户点击按键时提供一些音频反馈。我尝试在 Garageband 中创建自己的声音,但对我的任何创作都不满意。如果没有调用按键的标准方法,谁能指出我可能有这样一个宝石的声音库?
10 回答
播放默认键盘声音有一个非常快速的解决方案:
添加 AudioToolbox.framework
在您希望播放声音的任何位置添加以下行:
AudioServicesPlaySystemSound(0x450);
从 iOS 4.2 开始,在 UIView 的自定义子类上采用 UIInputViewAudioFeedback 协议。将此视图设为您的“inputView”,然后在适当的时候调用“playInputClick”。
只是为了节省一些人的时间。把它放在你的自定义视图中:
- (BOOL) enableInputClicksWhenVisible {
return YES;
}
要进行点击,请执行以下操作:
[[UIDevice currentDevice] playInputClick];
无需将文件复制到您自己的应用程序中 - 您应该能够直接从 UIKit 框架中获取它:
CFURLRef soundFileURLRef = CFBundleCopyResourceURL(
CFBundleGetBundleWithIdentifier(CFSTR("com.apple.UIKit")),
CFSTR ("Tock"),CFSTR ("aiff"),NULL);
这就是我从 aSquared 的评论中得出的结论:
NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] pathForResource:@"Tock" ofType:@"aiff"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path], &soundID);
AudioServicesPlaySystemSound(soundID);
AudioServicesDisposeSystemSoundID(soundID);
我发现的最简单的方法是从 iPhone 模拟器中提取 Tock.aiff(键盘声音)并将其与您的应用程序打包,然后AudioServicesPlaySystemSound()
在适当的时间使用它进行播放。在我的机器上,只需在 Spotlight 中键入 Tock.aiff 即可打开该文件,但如果您必须去寻找它,它位于 UIKit.framework 的模拟器版本中。
使用 0x450 作为 SystemSoundID 对我有用(并且音量正确——只是播放内置的 Tock.aiff 声音太大了)。不知道它有多便携——这是在第三代 iPod Touch 上。
仍然不尊重勾选/关闭的偏好。
这是我所做的:
在以下位置找到“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];
}
就是这样!
据我所知,点击声音不适用于应用程序。我在音频会话服务中没有看到任何相关的内容。 AudioServicesPlaySystemSound()
看起来很有希望,但似乎没有任何系统声音 ID 用于点击声音(仔细查看标题可能会出现一些东西)。您总是可以循环调用 toAudioServicesPlaySystemSound(i)
并查看是否有任何播放。iPhone 软件恢复图像可能有声音,但它可能未获得一般使用许可。无需提及越狱 iPhone 以获得美妙的咔哒声。
对于(知识共享)声音,请查看Freesound Project。
对于未来,也许要求 Apple 公开除警报声音以外的系统声音以供AudioServicesPlaySystemSound()
.
也许有点晚了...但是在 MrMage 上一篇文章中,如果您在此AudioServicesDisposeSystemSoundID(soundID);
之后立即进行操作,AudioServicesPlaySystemSound(soundID);
那么您将听不到任何声音,因为您在创建系统声音后立即将其丢弃。
你必须让它先完成播放。只有在它完成之前调用 AudioServicesDisposeSystemSoundID 来取消声音
您不必立即处理声音对象。将指向该声音对象的指针保存在属性中,并且仅在您要播放另一个声音时才释放它,然后再重新创建它。
当然最后在 dealloc 中处理 SystemSoundID 对象。