Ios 如何在点击自定义键盘按钮时播放tock声音

Ios 如何在点击自定义键盘按钮时播放tock声音,ios,audio,ios8,keyboard,ios-app-extension,Ios,Audio,Ios8,Keyboard,Ios App Extension,我已经为iOS 8定制了一段时间的键盘,到目前为止一切都很好,但我仍然无法理解这种敲击声音 我到处寻找这个问题,并尝试了几种方法,包括 使用AudioToolbox 使用AVFoundation 把tock.caf放在我的包里,就这样玩吧 其中一些可以在模拟器中工作,但没有一个可以在我的设备中工作。 当点击自定义键盘按钮时成功播放声音的人是否愿意分享一些工作代码?如果代码能够遵守声音设置,那就最好了。这里的关键是iOS只能播放所描述的文件类型。iOS无法播放文件类型.caf。以下代码在iOS上应

我已经为iOS 8定制了一段时间的键盘,到目前为止一切都很好,但我仍然无法理解这种敲击声音

我到处寻找这个问题,并尝试了几种方法,包括

  • 使用AudioToolbox
  • 使用AVFoundation
  • 把tock.caf放在我的包里,就这样玩吧
  • 其中一些可以在模拟器中工作,但没有一个可以在我的设备中工作。
    当点击自定义键盘按钮时成功播放声音的人是否愿意分享一些工作代码?如果代码能够遵守声音设置,那就最好了。

    这里的关键是iOS只能播放所描述的文件类型。iOS无法播放文件类型
    .caf
    。以下代码在iOS上应该可以正常工作。您可以使用网站将您的
    .caf
    文件转换为网站上可用且兼容的任何文件。我已经对它进行了测试,
    .caf
    转换可以工作,即使它没有在任何地方指定

    -(void)buttonPressed:(UIButton *)theButton {
    
    
        [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
        [[AVAudioSession sharedInstance] setActive:YES error:nil];
    
        AVAudioPlayer *av = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"Tock" ofType:@"mp3"]] error:nil];
        [av setVolume:1.0];
        [av setNumberOfLoops:0];
        [av prepareToPlay];
        [av play];
    
    }
    

    最后我从另一个SO那里得到了答案


    我已经在iOS8 Beta 2上的模拟器和设备上实现并验证了此方法的有效性

    播放声音需要OpenAccess,我不知道苹果为什么要这样做,但现在就是这样。这也将修复延迟以及尝试播放声音后无法工作的问题

    您可以通过在键盘的info.plist中为RequestsOpenAccess键的值设置YES来获得OpenAccess

    接下来,您应该将AudioToolbox导入到项目中,然后使用以下代码:

    - (void)playSound{
    NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"Tock" ofType:@"caf"];
    SystemSoundID soundID;
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID);
    AudioServicesPlaySystemSound (soundID);
    

    现在安装您的键盘,并在将其添加到键盘时提供Openaccess,它应该可以工作。

    正如Farzad Nazifi在上面提到的
    允许OpenAceses
    重新安装后,解决了我的问题。 我建议为
    播放系统键盘敲击音

    Swift和Objective-C同样`我们不需要导入任何自定义声音文件,只需播放系统敲击声即可

    导入音频工具箱框架:

    #导入

    这段代码在iOS 8 beta 5中进行了测试,我希望苹果能在GM版本中修复该漏洞(如果是漏洞)。

    导入框架:

    #import <AudioToolbox/AudioToolbox.h>
    

    您可以使用
    playInputClick()
    方法

    斯威夫特:

    UIDevice.currentDevice().playInputClick()
    
    目标C:

    [[UIDevice currentDevice] playInputClick];
    

    有关详细信息,请参阅。

    不幸的是,这对我不起作用,我应用了您的实现,它在模拟器上不起作用,在设备上也不起作用。在设备上,点击任何按钮都会带来明显的延迟。但我仍然感谢你在这里的意见。谢谢。@EvanChu设备处于静默状态吗?是的,我确保可以听到系统键盘上的嘀嗒声,然后尝试我自己的。当我使用AudioServicesPlaySystemSound时,出现以下错误:引导查找失败,代码:1100,正在等待重试连接到系统声音服务器。这在beta 3上能用吗?在物理设备上,当我按下键时,它会滞后。在设备上使用它时,一切都会冻结。@StanleyKubrick这里相同/:你知道这是否是iOS8Beta5特有的吗?@Alberrenshaw我希望这是beta 5错误,我正在等待以下版本的修复。但这在自定义键盘扩展中能用吗?
    AudioServicesPlaySystemSound(1104);
    
    UIDevice.currentDevice().playInputClick()
    
    [[UIDevice currentDevice] playInputClick];