11

音声出力と入力の両方を使用し、他のアプリからの音声ミキシングをサポートする Snapchat に似たアプリでバイブレーションを実行しようとしていますが、これは当初考えていたよりも難しい作業のようです。知っておくべき重要なことは、再生または録音中に振動しようとしていないということです。この件に関して見つけたすべてのドキュメントを読んだ結果、次のことがわかりました。

  • 再生と録音(出力と入力)の両方をサポートするには、使用する必要がありますAVAudioSessionCategoryPlayAndRecord
  • 電話を振動AudioServicesPlaySystemSound (kSystemSoundID_Vibrate)させることは、 を含むどの録音カテゴリでもサポートされていませんAVAudioSessionCategoryPlayAndRecord
  • オプションを追加することで、他のアプリがオーディオを再生できるようにすることができますAVAudioSessionCategoryOptionMixWithOthers

したがって、アプリのデリゲートでこれを行います。

NSError *error = nil;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers error:&error];

私が試したが失敗した振動を行うための可能な解決策は次のとおりです。

  • バイブレーションの前に共有を無効にしAVAudioSession、その後すぐに有効にします。

    [[AVAudioSession sharedInstance] setActive:NO error:nil];         
    AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);
    [[AVAudioSession sharedInstance] setActive:YES error:nil];
    

    これは振動をうまく実行しますが、その後、映画を録画しようとすると、オーディオがダッキングされます (または、他の何かが原因で非常に静かになります)。また、最初に I/O デバイスを削除せずにセッションを非アクティブ化することはできないというエラーが表示されます。

  • 振動する前にカテゴリを変更し、次に元に戻します。

    [[AVAudioSession sharedInstance] setActive:NO error:nil];
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
    [[AVAudioSession sharedInstance] setActive:YES error:nil];
    
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
    
    [[AVAudioSession sharedInstance] setActive:NO error:nil];
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers error:nil];
    [[AVAudioSession sharedInstance] setActive:YES error:nil];
    

    この解決策は時々出てきますが、私にはうまくいかないようです。カテゴリが設定されているように見えますが、振動は発生しません。AVCaptureSessionを設定した場合、これはまだ有効な解決策かもしれませんが、まだusesApplicationAudioSession = YES機能させていません。

ソース:

4

3 に答える 3

3

だから、私は最近、自分のアプリで簡単なビープ音を鳴らそうとしていましたが、その方法の 1 つは次のとおりです。

AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID);

/System/Library/Audio/UISounds/ iOSの全バージョンでサポートされているシステムサウンドを再生する機能です。

RingerVibeChanged音1350は(振動)に等しい。そう..

AudioServicesPlaySystemSound(1350);

…約0.5秒間振動します。

より多くのサウンドに興味がある場合は、再生可能なすべてのサウンドとそれらが追加された iOS バージョンへのリンクを以下に示します: http://iphonedevwiki.net/index.php/AudioServices

于 2016-10-01T19:19:55.373 に答える
1

サポートされているデバイスの要件については言及していませんが、新しいデバイスの場合は、次のような新しい Taptic エンジン API を使用できます。

UIImpactFeedbackGenerator

UISelectionFeedbackGenerator

UINotificationFeedbackGenerator

https://developer.apple.com/reference/uikit/uifeedbackgenerator#2555399

于 2016-09-25T01:21:31.013 に答える