2

基本的にメモリが少ないAndroid 1.6 HTCデバイスで、次のコード(AudioTrack)を使用して、より大きなサイズのオーディオwavファイル(> 20 mb)を再生しようとしています。しかし、読み取り、書き込み、再生を実行するとすぐにデバイスがクラッシュすることがわかりました。しかし、同じコードは問題なく動作し、より小さいサイズのオーディオ wav ファイル (10kb、20kb ファイルなど) を非常にうまく再生します。PS:ここで使用する理由は、PCM(.wav) バッファー サウンドを再生する必要があるためです。AudioTrack

私のデバイスのメモリは少ないですが、メモリの制約によるクラッシュを避けるために、より大きなオーディオ ファイルをバイト単位で読み取り、サウンドを再生するにはどうすればよいでしょうか。

private void AudioTrackPlayPCM() throws IOException
{
    String filePath = "/sdcard/myWav.wav"; // 8 kb file

    byte[] byteData = null;             
    File file = null; 

    file = new File(filePath);

    byteData = new byte[(int) file.length()];

    FileInputStream in = null;

    try {
        in = new FileInputStream( file );
        in.read( byteData );
        in.close(); 
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    int intSize = android.media.AudioTrack.getMinBufferSize(8000, AudioFormat.CHANNEL_CONFIGURATION_MONO,
    AudioFormat.ENCODING_PCM_8BIT);     

    AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO,
    AudioFormat.ENCODING_PCM_8BIT, intSize, AudioTrack.MODE_STREAM);        

    at.play();

    at.write(byteData, 0, byteData.length);         
    at.stop();

    at.release();
}

より大きなサイズの wav ファイルの AudioTrack コードを再生する方法を教えてもらえますか?

4

1 に答える 1

0

intSize は、AudioTrack を初期化するために必要な最小バッファー サイズになります。これの倍数を使用して、より大きなバッファーを作成してみてください。

AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, 
AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_8BIT, intSize*10, 
AudioTrack.MODE_STREAM); 
于 2010-03-26T09:38:55.860 に答える