2

オフセットと長さを設定できるようにしたかったので、FileDescriptorを受け取るSoundPoolのロード関数を使用してみました。ファイルはリソースに保存されませんが、ストレージカードにファイルが保存されます。SoundPoolのロード機能も再生機能も例外をスローしたり、コンソールに何かを出力したりしなくても、サウンドは再生されません。同じコードを使用しますが、SoundPoolコンストラクターでファイルパス文字列を使用すると完全に機能します。

これが私がロードを試みた方法です(開始は0に等しく、長さはミリ秒単位のファイルの長さです):

FileInputStream fileIS = new FileInputStream(new File(mFile));
mStreamID = mSoundPool.load(fileIS.getFD(), start, length, 0);
mPlayingStreamID = mSoundPool.play(mStreamID, 1f, 1f, 1, 0, 1f);

これを使用すると、次のように機能します。

mStreamID = mSoundPool.load(mFile, 0);
mPlayingStreamID = mSoundPool.play(mStreamID, 1f, 1f, 1, 0, 1f);

誰かアイデアはありますか?

ありがとう

4

1 に答える 1

4

おそらくあなたはすでにこれを理解していますが、ドキュメントを読むと、長さはおそらくミリ秒ではなくバイト単位であるようです。複数のサウンドを単一のバイナリファイルに保存する場合は、ファイル記述子を渡すと便利であると記載されています。これは、倍数のどの音を引き出すかをシステムに指示していることを意味しますが、単一の音として処理できる必要があると思います。したがって、これは、複数のWaveファイルを連結し、バイナリから1つのWaveファイルを再生するように指示する場合に使用されます。

于 2011-01-24T01:51:55.190 に答える