6

しばらくの間、iOS 8 用のカスタム キーボードに取り組んできましたが、これまでのところすべてうまくいきましたが、このタッピング サウンドについてはまだ理解できませんでした。

この問題を高低で検索し、次のようないくつかのアプローチを試しました

  1. AudioToolbox の使用
  2. AVFoundation の使用
  3. tock.caf をバンドルに入れて再生する

それらのいくつかはシミュレーターで動作しますが、私のデバイスでは動作しません。カスタム キーボード ボタンをタップしたときにサウンドを正常に再生したことがある人は、動作するコードを共有できますか? そして、コードがサウンド設定を尊重できれば最高です。

4

6 に答える 6

16

上記のFarzad NazifiAllow openAcesessが新規インストール後に述べたように、私の問題は解決しました。そして、私はより簡単な解決策をお勧めしますplaying system keyboard tap sound

Swift と Objective-Cでも、カスタム サウンド ファイルをインポートする必要はなく、システム タップ サウンドを再生するだけです。

AudioToolbox フレームワークをインポートします。

#import <AudioToolbox/AudioToolbox.h>

AudioServicesPlaySystemSound(1104)

このコードは iOS 8 ベータ 5 でテストされています。Apple が GM バージョンのバグ (バグである場合) を修正することを願っています。

于 2014-09-03T19:58:34.943 に答える
8

フレームワークをインポートします。

#import <AudioToolbox/AudioToolbox.h>

そして使用:

AudioServicesPlaySystemSound(1104);
于 2015-05-06T16:01:53.293 に答える
1

メソッドを使用できますplayInputClick()

迅速:

UIDevice.currentDevice().playInputClick()

目的 C:

[[UIDevice currentDevice] playInputClick];

詳細については、ドキュメントを参照してください。

于 2016-03-07T23:44:16.273 に答える
1

サウンドの再生には OpenAccess が必要です。なぜ Apple がこのようにしているのかはわかりませんが、今のところはそうなっています。これにより、サウンドを再生しようとした後に動作しないラグと問題も修正されます。

キーボードの info.plist の RequestsOpenAccess Key の値を 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 を与えると、動作するはずです。

于 2014-09-03T01:06:42.277 に答える
1

ここで重要なのは、iOS はここで説明されているファイル タイプのみを再生できるということです。iOS はファイル タイプを再生できません.caf。次のコードは、iOS で正常に動作するはずです。このWebサイトを使用して、.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];

}
于 2014-07-02T17:04:33.943 に答える