6

.wavサードパーティのライブラリを使用せずに、Java でファイルを 22050 khz から 44100 khzにリサンプリングすることは可能ですか?

たぶん使用AudioInputStream

編集:サードパーティのライブラリがないと簡単にできないように思われるので、リサンプリングを行うためにどのサードパーティのライブラリが存在しますか?

4

5 に答える 5

4

その可能性があり、速くて汚い。javax.sound API を掘り下げる必要があります。

import java.io.File;

import javax.sound.sampled.AudioFileFormat.Type;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import com.sun.media.sound.WaveFileReader;
import com.sun.media.sound.WaveFileWriter;

public class Resample {

public static void main(String[] argv) {
    try {
        File wavFile = new File("C:\\Temp\\test.wav");
        File dstFile = new File("C:\\Temp\\test_half.wav");
        WaveFileReader reader = new WaveFileReader();
        AudioInputStream audioIn = reader.getAudioInputStream(wavFile);
        AudioFormat srcFormat = audioIn.getFormat();

        AudioFormat dstFormat = new AudioFormat(srcFormat.getEncoding(),
                srcFormat.getSampleRate() / 2,
                srcFormat.getSampleSizeInBits(),
                srcFormat.getChannels(),
                srcFormat.getFrameSize(),
                srcFormat.getFrameRate() / 2,
                srcFormat.isBigEndian());

        AudioInputStream convertedIn = AudioSystem.getAudioInputStream(dstFormat, audioIn);

        WaveFileWriter writer = new WaveFileWriter();
        writer.write(convertedIn, Type.WAVE, dstFile);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

}

この短いハッキング例では、ソースで指定されたファイルの半分のサンプル レートでコピーを作成します。かなり自明だと思います。

于 2013-03-26T16:22:20.653 に答える
4

あなたは現在、サードパーティのライブラリを受け入れているので、ここに私の提案があります

オーディオwavファイルをリサンプリングできるサードパーティのライブラリがたくさんあります。私の場合(そして最近使用しました)、最もユーザーフレンドリーなサードパーティのライブラリはJave です。jarを含めるだけです。 . 他のライブラリのように面倒なインストールはもう必要ありません

Jave には次の名前のメソッドがあります。

public void setSamplingRate(java.lang.Integer bitRate)

これにより、指定されたビットレートでオーディオをリサンプリングできます。

于 2013-03-25T22:34:37.497 に答える
1

音質を向上させるかどうかにかかわらず、元のファイルのサンプルを含む新しい .wav ファイルを作成する必要があります。元のファイルの品質を維持したい場合は、すべてのサンプルを 2 回書き込むことができます。

ただし、品質を「改善」するためのかなり単純なアルゴリズムがあります。3 つの連続したサンプルを読み取り、それらに a、b、c という名前を付けましょう。a と b の間の余分な出力サンプルを z とします。

z=(a+b)/2 とします。b を (a + 2b + c)/4 に置き換えます。b の古い値を使用して z を計算することを忘れないでください! a、z、および新しい b のみを出力に書き込みます。

もう 1 つのサンプルを読んで、それを d としましょう。(b+c)/2 を使用して、次の追加出力サンプル y を計算します。b の古い値を使用します。c を再計算し、(b + 2c + d)/4 に等しくします。b の新しい値と y を出力に書き込みます。

!EOF の間、推測、読み取り、繰り返しを把握できます。古い値を使用して計算することを忘れないでください。ただし、新しい値を出力してください。

于 2013-03-22T15:59:41.133 に答える
0

はい、AudioInputstream の使用は機能します。ここでいくつかのサンプル コードをキャッチできます。

http://www.jsresources.org/examples/SampleRateConverter.html

Tritonius について心配する必要はありません。その情報は Java の新しいバージョンには関係ありません。*.wav ファイルに固執する限り、サードパーティのライブラリを使用せずに、ネイティブ Java でリサンプリングできます。

さらに、Java でのオーディオ関連の質問のほとんどは、この FAQ で回答されています。最新ではないかもしれませんが、ほとんどの情報はまだ関連しています。

http://www.jsresources.org/faq.html

于 2014-08-14T12:39:32.273 に答える
0

いいえ...隣接するサンプルから平均として計算された新しいサンプルを使用して、新しいwavファイルを書き込んでみてください。粗雑ですが、目的には十分かもしれません。

サードパーティのライブラリを受け入れる場合は、JSSRCが適切なオプションのようです。ただし、自分で .jar をビルドする必要があります。

于 2013-03-14T13:37:36.997 に答える