簡體   English   中英

用Java讀取WAV文件的問題

[英]Problem with reading wav file with Java

我使用該API在Java上讀取wav文件:在Java中讀取和寫入Wav文件

我使用Java讀取了wav文件,並希望將所有值放入arraylist。 我寫:

// Open the wav file specified as the first argument
     WavFile wavFile = WavFile.openWavFile(fileToRemoveSilence);
     List<Double> allBuffer = new ArrayList<Double>();

 ....
     do {
        // Read frames into buffer
        framesRead = wavFile.readFrames(buffer, 50);
        for (double aBuffer : buffer) {
           allBuffer.add(aBuffer);
        }

     } while (framesRead != 0);

當我在調試器中檢查allBuffer的大小時,它說:

74700

但是在我使用的代碼中:

wavFile.display();

它的輸出:

....
... Frames: 74613
....

我的allbuffer大於該API顯示的幀。 怎么來的?

PS:我以前對此有疑問:

用Java讀取WAV文件

如何用Java將WAV文件分成1秒?

PS2:我修復了錯誤,但是在運行程序時有時會出現該錯誤:可能是什么問題?

java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
at sun.java2d.Disposer.run(Disposer.java:127)
at java.lang.Thread.run(Thread.java:662)

刪除引用時發生異常:java.lang.InterruptedException

我想你想要這樣的東西:

// Open the wav file specified as the first argument
     WavFile wavFile = WavFile.openWavFile(fileToRemoveSilence);
     List<double[]> allBuffer = new List<double[]>();

    int bufferSize = 44100; // 1 second, probably
    double[] buffer;


 ....
     do {
        // Read frames into buffer

        buffer = new double[bufferSize];
        framesRead = wavFile.readFrames(buffer, bufferSize);
        if (framesRead == bufferSize)
        {
            allBuffer.add(buffer);
        }
        else
        {
            double[] crippleBuffer = new double[framesRead];
            Array.Copy(buffer, crippleBuffer, framesRead);
            allBuffer.add(crippleBuffer);
            break;
        }

     } 

這將為您提供一個由1秒的double[]個示例數組組成的List (實際上,最后一個數組將小於一整秒)。 然后,您可以遍歷此數組集合,並將每個數組轉換為單獨的WAV文件。

從緩沖區復制到列表時,需要考慮framesRead。 在上次通話中,您復制的雙打內容比從文件中實際讀取的多。 (即與您第一個鏈接中的示例代碼完全一樣)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM