1

次のコードを使用して、Web サーバー上の wav ファイルからデータを取得しました。、getFormat()、および がバイトを読み取りgetFormatLength()totallengthそれぞれ http アクセスを実行し、サーバー ログは 3 つのアクセスがあることを示しました。1回の旅行にする方法はありますか?

try {
    audioInputStream = AudioSystem.getAudioInputStream(url);//soundFile);
    format = audioInputStream.getFormat();
    totallength = audioInputStream.getFrameLength()*format.getFrameSize();
    waveData = new byte[(int)totallength];
    int total=0;
    int nBytesRead = 0;
    try {
        while (nBytesRead != -1 && total<totallength) {
            nBytesRead = audioInputStream.read(waveData, total, (int) totallength);
            if (nBytesRead>0)
                total+=nBytesRead;
            }
    ...
4

1 に答える 1

1

最初にファイル全体をメモリに読み込んでいるように見えるので、すべてを最初に読み込んでみませんか。

    // Read the audio file into waveData:
    BufferedInputStream in = new BufferedInputStream(url.openStream());
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    for (;;) {
        int b = in.read();
        if (b == -1) {
            break;
        }
        bos.write(b);
    }
    in.close();
    bos.close();
    byte[] waveData = bos.toByteArray();

    // Create the AudioInputSteam:
    ByteArrayInputStream bis = new ByteArrayInputStream(waveData);
    AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(bis);
于 2013-01-12T22:56:04.833 に答える