前回は自作アプリ「ZeroStepMemo」の構想について書きました。今回はAndroid Studioでのプログラミングと、直面した課題についてです。
音声のテキスト化は、Google標準のSpeechRecognizerを使って実装できました。部屋でのテストでは正常に保存できましたが、実車テストで問題が発生。
Galaxyをカーオーディオに繋ぎ、音楽を流しながらアプリを起動すると、音楽が完全に途切れてしまいます。録音終了後も音楽は再開されず、手動で再生ボタンを押す必要がありました。これでは手間がかかります。
原因はAndroid OSの「オーディオフォーカス」という仕様でした。マイクを使うアプリが起動すると、電話着信時と同じように、他のアプリの音を止める制御が入るようです。
メディア音量を止めずに割り込ませるため、設定値を変更しました。
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCKという設定を使います。これは他のアプリの音を完全に止めず、一時的に音量だけを下げる(ダッキング)処理です。
アプリ終了時にはabandonAudioFocusRequest()でOSにフォーカスを返す処理も追加しました。
// 実際のオーディオフォーカス要求コードの一部
audioFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)
.setAudioAttributes(AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE) // ナビ音声扱いで割り込み
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build())
.setWillPauseWhenDucked(false) // 音量低下時に一時停止しない
.build()
audioManager.requestAudioFocus(audioFocusRequest!!)
コードを修正して再度実車でテストしました。
メディア再生中にアプリを起動すると、メディア音量がスッと下がり、音声メモを拾い始めました。録音終了後は自動でアプリが閉じ、メディア音量も元に戻りました。
画面に触れることなく、「メディア音量低下 ➡ 録音・テキスト化 ➡ 保存 ➡ メディ音量復帰」の処理が完了しました。
裏側のロジックはこれで完成。
ただ、実際に夜の車内で使ってみると、UIと操作感に関して少し不満が出ました。
次回は「第3回:実践からUI改善!最適なブラインド操作環境」です。自分用に使いやすいデザインへの変更と、確実な操作のための改善プロセスをまとめます。
