前提・実現したいこと
いつもお世話になっています。
現在、Androidアプリを作成しながら勉強しています。
AudioTrackで、Waveファイルを再生する方法を模索しています。
ストリーム系だとAudioTrackが良いとの事でしたので勉強しておりますが、
参考見分があまりなく、Java見分を変換しながらソースを作成しています。
ところが、AudioTrackの生成から音楽データの書き込みをするところで
ByteArray形式で求められますが、どうしてもByteArray形式で書き込む方法がわかりません。
発生している問題・エラーメッセージ
audioTrack.write(waveData, offset , bufSize - offset)
該当のソースコード
kotlin
1val rate = 44100 2val bufSize = 212922 // waveファイルサイズ 3val offset = 46 // ヘッダーサイズ 4val waveData = filesDir.path + "/0123.wav" // ファイルはアプリのプライベートストレージに保存 5 6val audioTrack = AudioTrack.Builder() 7 .setAudioAttributes( 8 AudioAttributes.Builder() 9 .setUsage(AudioAttributes.USAGE_MEDIA) 10 .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) 11 .build() 12 ) 13 .setAudioFormat( 14 AudioFormat.Builder() 15 .setEncoding(AudioFormat.ENCODING_PCM_16BIT) 16 .setSampleRate(rate) 17 .setChannelMask(AudioFormat.CHANNEL_OUT_STEREO) 18 .build() 19 ) 20 .setBufferSizeInBytes(bufSize) 21 .setTransferMode(AudioTrack.MODE_STREAM) 22 .build() 23 24audioTrack.play() 25audioTrack.write(waveData, offset, bufSize - offset) 26// waveDataをByteArray形式でセットしないといけない
MediaPlayerだと再生されますが、
どうしてもAudioTrackで再生したいです。
また、ネットだとR.raw
指定での方法が記述されているのですが、
自分が使うと赤い波線でエラーになってしまいます。
(ファイルはセットしてあるのですが...)
とりあえずプライベートストレージ内のwaveファイルを再生したいです。
どのようにすればよろしいでしょうか。
申し訳ありませんが、ご教示くださいませ。
よろしくお願い致します。
これ参考になるかも。
https://akira-watson.com/android/audiotrack.html
hoshi-takanoriさん、ご教示ありがとうございます。
ここのサイトは自分も確認してまして、ただ配列セットが
Kotlinだとどうやってやればよいか、わからない状況です。
Java:
input = getResources().openRawResource(R.raw.audio_sample);
wavData = new byte[input.available()];
Kotlin:
val waveData = filesDir.path + "/0123.wav"
...?
お分かりでしたらご教示くださいますと、嬉しいです。
よろしくお願い致します。
とりあえずこれでいけるかも? (いいのかなぁ)
val waveData = File(filesDir.path + "/0123.wav").readBytes()
hoshi-takanoriさん、ありがとうございます。
早速上記を追記してやってみましたが、
エラーは出ませんでしたが、音も出ませんでした。
(Windowsのサウンドはしていますのでデバイスの問題ではないです)
なかなかに難しいですね。
回答1件
あなたの回答
tips
プレビュー