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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

Q&A

1回答

1623閲覧

効果音のタイミング設定

navesanta

総合スコア198

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

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

0グッド

0クリップ

投稿2016/10/07 09:13

Android Studioでアニメーションを使ってくじを引くアプリを作成しているのですが効果音の出るタイミングをうまく合わせる設定ができません。

流れとしては
1)MainActivityにボタンを設定して押すとインテントでAnimeActivityへ
2)AnimeActivity(福引くじ)が開始します。
3)Runnableを使ってタイミングをずらしてResultActivity(くじの結果)へ
です。
上記の流れなのですがこれにアニメが開始してからくじの結果までガラガラ効果音(wavGaraPlay)をいれようと
やっているのですがうまくいきません。

うまくいかない症状)
AnimeActivityの中の3か所にそれぞれ順番に設定(設定A,設定B,設定C)してみたのですが・・・
AnimeActivityのアニメが開始する前に効果音だけ出て効果音が終了した時点で
アニメが開始してしまいます。
スレッドが原因の様な気がしますがどういう風にすればいいか分かりません。
ヒントでも良いので分かる方お願いします。

MainActivity(抜粋)

kujiButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int kujiNumber = preferences.getInt("kujiNumkey",0); if(kujiNumber < kujiArrayList.size()) { Log.d("test_kujiNumber", String.valueOf(kujiNumber)); Log.d("test_kujiarraysize", String.valueOf(kujiArrayList.size())); //animeスタート Intent intent = new Intent(getApplicationContext(), AnimeActivity.class); intent.putExtra("kUJIID", "kujiID"); startActivity(intent); } } });

AnimeActivity

public

1 2 public static Flag mFlag; 3 private String kujiId = ""; 4 5 6 private static final int SamplingRate = 44100; 7 8 @Override 9 protected void onCreate(Bundle savedInstanceState) { 10 super.onCreate(savedInstanceState); 11 setContentView(R.layout.activity_anime); 12 13 //設定A wavGaraPlay() 14 15 mFlag = new Flag(); 16 17 new Handler().postDelayed(delayFunc,5700); 18 19 Intent kujiIntent = getIntent(); 20 kujiId = kujiIntent.getStringExtra("kUJIID"); 21 22 ImageView imgAnime = (ImageView)findViewById(R.id.imageAnime); 23 imgAnime.setBackgroundResource(R.drawable.nfc_anime); 24 AnimationDrawable frameAnimation = (AnimationDrawable)imgAnime.getBackground(); 25 frameAnimation.start(); 26 27 //設定B wavGaraPlay() 28 } 29 @Override 30 public void onRestart() { 31 super.onRestart(); 32 if (mFlag.isFinishFlag() == true) { 33 finish(); 34 } 35 } 36 37 private final Runnable delayFunc = new Runnable() { 38 @Override 39 public void run() { 40 Intent resultIntent = new Intent(getApplicationContext(), ResultActivity.class); 41 resultIntent.putExtra("kUJIID", kujiId); 42 startActivity(resultIntent); 43 44 //設定C wavGaraPlay() 45 } 46 }; 47 48 private void wavGaraPlay(){ 49 InputStream inputStream; 50 byte[] wavData; 51 try { 52 inputStream = getResources().openRawResource(R.raw.garagarabell); 53 wavData = new byte[(int)inputStream.available()]; 54 inputStream.read(wavData); 55 inputStream.close(); 56 57 int bufSize = android.media.AudioTrack.getMinBufferSize( 58 SamplingRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT); 59 60 AudioTrack audioTrack = new AudioTrack( 61 AudioManager.STREAM_MUSIC, SamplingRate, AudioFormat.CHANNEL_OUT_MONO, 62 AudioFormat.ENCODING_PCM_16BIT, bufSize, AudioTrack.MODE_STREAM); 63 audioTrack.play(); 64 audioTrack.write(wavData, 44, wavData.length-44); 65 }catch (IOException e){ 66 e.printStackTrace(); 67 Log.d("debug", "error"); 68 } 69 } 70}

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

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

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

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

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

guest

回答1

0

Handlerを使ってUIスレッドで実行されているのでUI処理をブロックしていると思われます。
Threadを使った非同期にすると改善すると思います。

投稿2016/10/07 13:00

yona

総合スコア18155

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問