wavなどの短い音データなどをandroidで再生させる場合にAudioTrackを使うと素早くできます。ゲームのワンフレーズ等に使えるでしょう。
2024.1.1
AudioTrack
API level 26から以下のAPIは非推奨になりました。
代わりは
とのことです
AudioTrack
AudioTrack.Builder
AudioTrack.Builder を使ってみたいと思います。AudioTrack.Builderにサンプルがありますから、それをそのまま使いましょう。
そのままといっても、音源に合わせて設定しないといけませんが
AudioAttributes
最初にrawフォルダをres以下に作成します。適当なwavファイルをその res/raw/ 以下に置きます。多くの音声ファイルをフォルダ階層で管理したい場合はassetsに置きます。
ここでは、how_are_you というwavファイルを使ってみます。
AudioAttributes からAudioAttributesを選定します。
- AudioAttribute:音源は音声なのでこれらを設定
- setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
- setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
- AudioFormat:これらは音源ファイルを調べればわかります
- setEncoding(AudioFormat.ENCODING_PCM_16BIT)
- setSampleRate(SamplingRate)
- setChannelMask(AudioFormat.CHANNEL_OUT_MONO)
- ステレオ/モノラルの設定
sampling rate
サンプリングレートを調べるには、windowsなどのエクスプローラーでこの音声ファイルのプロパティを見ます。ビットレートが512kbpsであることが分かり、PCMは16bitなので、
512000bps/16bps = 32000 がサンプリングレートとなります。
Macの場合はファイルの情報を見ます。
サンプルコード
以上を踏まえて簡単なテストコードを書いてみました。
MainActivity.java
レイアウト、画像は特に必要ないですが気分です
activity_main.xml
strings.xml
サンプル動画
audioTrack.write(wavData, 44, wavData.length-44);
としているのは、wavファイルのヘッダ部分が44byteあるので、それがノイズ、プチッ音になるのを回避するためです。
それと注意しないといけないのが、このまま使うと他の処理、画面が止まったりします。それが都合が悪い場合はThreadを使って非同期にするなど対応が必要です。
- 関連ページ
- 簡単なMediaPlayerで音楽を再生
- WAV音声ファイルをAudioTrackで再生
- SoundPoolで効果音を鳴らす
Reference:
AudioTrack