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

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

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

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

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

1回答

2071閲覧

SoundPoolで音が再生されません

hodoru3sei

総合スコア284

Java

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

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2019/06/01 04:01

[Android & Kotlin] SoundPool で効果音を鳴らすというサイトを参考に音の再生をやってみたのですが、うまく音が再生されずに困っています。

コード

コードはサイトを参考に以下のようなものを作成しました。
タップ処理の中に入ってくるのは確認済みでログが出力されます。
ロードの部分のログも出力されていることを確認しています。

Kotlin

1 private lateinit var soundPool: SoundPool 2 var tempoSound = 0 3 4 override fun onCreate(savedInstanceState: Bundle?) { 5 super.onCreate(savedInstanceState) 6 7 val audioAtributes = AudioAttributes.Builder() 8 .setUsage(AudioAttributes.USAGE_GAME) 9 .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) 10 .build() 11 soundPool = SoundPool.Builder() 12 .setAudioAttributes(audioAtributes) 13 .setMaxStreams(1) 14 .build() 15 16 soundPool.setOnLoadCompleteListener{ soundPool, sampleId, status -> 17 Log.d("debug", "sampleId=$sampleId") 18 Log.d("debug", "status=$status") 19 } 20 21 tempoSound = soundPool.load(this, R.raw.tempo_sound, 1) 22 23 24 setContentView(R.layout.activity_main) 25 startStopButton = findViewById(R.id.startStopButton) 26 startStopButton!!.setOnClickListener{ 27 Log.d("debug", "クリックの中") 28 soundPool.play(tempoSound, 1.0f, 1.0f, 0, 0, 1.0f) 29 } 30 }

rawフォルダ

サイトにres/rawフォルダに保存とあったのですが、resフォルダ直下にrawというフォルダが見当たらなかったので自作してそこにファイルを置きました。
イメージ説明

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

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

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

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

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

guest

回答1

0

添付のソースコードをほぼそのまま実行してみましたが、エミュレータでは再生可能でした。

確認するところとしては、
・何かエラーログとか出ていませんか?
・ボリュームはONになっていますか?
・音源が長くないですか?
あまり長いとエラーになったような記憶があります。
・他のファイル形式(wavとか)で試してみたらどうですか?
端末によっては、mp3は再生できないかもしれません。

投稿2019/06/01 12:02

Akashic

総合スコア298

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

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

hodoru3sei

2019/06/01 12:35

ありがとうございます、端末はpixel3aで試しています。 音源は約1秒のものを使用しています。 wav形式は試していなかったので他の指摘いただいた点を含め試してみようと思います
hodoru3sei

2019/06/01 14:21

logcatのログをdebugで絞っていたのでわからなかったのですが、 W/SoundPool: sample 1 not READY というワーニングが出力されていました。 タップ処理のコードを以下のように変更したのですが、音は以前出ないままです。 ファイル形式もwavのものに置き換えて試してみたのですが、ダメでした。 startStopButton.setOnClickListener { soundPool.setOnLoadCompleteListener { soundPool, sampleId, status -> if (status == 0) { soundPool.play(tempoSound, 1.0f, 1.0f, 0, 0, 1.0f) } } }
Akashic

2019/06/01 23:22 編集

startStopButton.setOnClickListener は、ボタン押下時に呼ばれる処理で、 soundPool.setOnLoadCompleteListener は、音源のloadが終わったときに呼ばれる処理になります。 なので、startStopButton.setOnClickListenerの中でsoundPool.setOnLoadCompleteListenerを書くと意図した動作にはならないかと。 質問欄に書いてあるコードでsoundPool.setOnLoadCompleteListenerは書かれているので、改めてstartStopButton.setOnClickListenerに書く必要はなさそうです。 setOnLoadCompleteListener で出している以下ログは、 Log.d("debug", "status=$status") は、status=0と表示されていますか? 表示されたら音源loadが終わっているので、その後にstartStopButtonを押してみてください。
Akashic

2019/06/01 23:47

あとは、ボタン設定周りはコードから確認できませんが、 >タップ処理の中に入ってくるのは確認済みでログが出力されます。 とのことですので、あまり気にしていませんでした。 ボタン押下時は、 "クリックの中" のログが表示されている soundPool.play(tempoSound, 1.0f, 1.0f, 0, 0, 1.0f) この辺りで、エラーログは出ていないですか?
hodoru3sei

2019/06/02 11:44

setOnLoadCompleteListenerで出力されているログを確認したところ0ではなく1と表示されてしまっていました。 ボタン押下時のエラーログは出ていないようでした。
Akashic

2019/06/02 14:45

status=1の情報があまりなさそうですね。 エミュレータか別な端末で試してみてはいかがでしょう。 とりあえず、それで動けばコードは問題ないので端末側、他でも同様ならコード側で切り分けはできるかもしれません。
hodoru3sei

2019/06/03 12:39

エミュレータでためしてみたのですが、やはりsample 1 not READYと出てしまいました。 実機はPixel3aしか持っていないので、Androidを持っている友人に借りて試してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問