質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

2回答

1308閲覧

android java のAudioTrackで安定したループ再生

kbys32

総合スコア55

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2018/06/24 13:47

編集2018/06/25 10:46

お世話になります。

AudioTrackクラスによる再生はできたので、ループ再生に挑戦しているのですが、再生の終了と同時に次の再生を行えず、妙な間隔があくので、困っています。
しかも、アプリ終了後に突然音がでます。

問題のコードは以下の通りです。

java

1 //再生 2 public void PlaySound() 3 { 4 at.play(); 5 at.write(soundBytes, 46, soundBytes.length-46); 6 } 7  //停止 8 public void StopSound() 9 { 10 at.stop(); 11 at.flush(); 12 } 13  //サブスレッドを立てる。onResumeにて最初の下記関数を呼び出す。 14 private void BGMStart() 15 { 16 Thread t= 17 new Thread(new Runnable(){ 18 19 @Override 20 public void run() { 21 { 22 PlaySound(); 23 24 try { 25 Thread.sleep(SoundTimeMili);//再生時間内は、スレッドを止める 26 } catch (InterruptedException ignore) { 27 } 28 StopSound(); 29 BGMStart(); 30 } 31 } 32 }); 33 t.start(); 34 }

どうすれば、切れ目のないループ再生ができますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

AudioTrackクラスの準備処理において、

java

1 int bufSize = soundByteslength*2*16; 2 at=new AudioTrack(AudioManager.STREAM_MUSIC, 3 44100, AudioFormat.CHANNEL_OUT_STEREO, 4 AudioFormat.ENCODING_PCM_16BIT, bufSize, 5 AudioTrack.MODE_STATIC); 6 at.write(soundBytes, 46, soundBytes.length-46); 7 at.setLoopPoints(0,soundBytes.length/4,-1); 8

とし、再生命令はat.play();のみとしたところ、ループ再生しました。

投稿2018/06/25 14:03

kbys32

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

どうすれば、切れ目のないループ再生ができますか?

AudioTrackである必要性が無いのであれば
SoundPoolに切り替えたほうが簡単では
int loop を-1にするだけです

SoundPool soundPool; ... // play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate) soundPool.play(soundID, 1.0f, 1.0f, 0, -1, 1);

投稿2018/06/25 14:02

aja

総合スコア3733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kbys32

2018/06/25 14:08

ご回答、ありがとうございます。 ありがたきご指摘ではありますが、音素材を暗号化している関係で、AudioTrackを用いております。 一応ではありますが、解決策がみつかりましたので、ご報告いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問