4

Java Media Frameworkを使用して.movファイルを.wavファイルとマージするのに疲れているので、それらの期間を知る必要があります。これどうやってするの?任意のアイデアをいただければ幸いです。

4

3 に答える 3

7

この方法(VitalyValの2番目の方法)を使用して、サウンドファイルの長さを知ることができます。

  import java.net.URL;

        import javax.sound.sampled.AudioFormat;
        import javax.sound.sampled.AudioInputStream;
        import javax.sound.sampled.AudioSystem;
        import javax.sound.sampled.Clip;
        import javax.sound.sampled.DataLine;

        public class SoundUtils {
            public static double getLength(String path) throws Exception {
                AudioInputStream stream;
                stream = AudioSystem.getAudioInputStream(new URL(path));
                AudioFormat format = stream.getFormat();
                if (format.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
                    format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, format
                            .getSampleRate(), format.getSampleSizeInBits() * 2, format
                            .getChannels(), format.getFrameSize() * 2, format
                            .getFrameRate(), true); // big endian
                    stream = AudioSystem.getAudioInputStream(format, stream);
                }
                DataLine.Info info = new DataLine.Info(Clip.class, stream.getFormat(),
                        ((int) stream.getFrameLength() * format.getFrameSize()));
                Clip clip = (Clip) AudioSystem.getLine(info);
                clip.close();
                return clip.getBufferSize()
                        / (clip.getFormat().getFrameSize() * clip.getFormat()
                                .getFrameRate());
            }

            public static void main(String[] args) {
                try {

                    System.out
                            .println(getLength("..."));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

        }
于 2010-04-26T20:32:16.680 に答える
5

受け入れられた答えを試しましたが、例外が発生した後、簡単な方法で行うことにしました。

基本的な情報がいくつかある場合は、オーディオデータの長さを計算できます。主な部分は次のとおりです。

  • サンプルレート
  • サンプルサイズ(サンプルあたりのビット数)
  • ファイルサイズ
  • チャンネル数(モノラル/ステレオ)

これらをお持ちの場合は、期間を確認できます。Javaは、最小限の労力でこのすべての情報を簡単に取得するためのライブラリを提供するため、優れています。式は次のとおりです。

サンプルレート*サンプルサイズ*期間*チャネルカウント=ファイルサイズ

Javaでこの計算を行う以下のコードを参照してください。

public static double getDurationOfWavInSeconds(File file)
{   
    AudioInputStream stream = null;

    try 
    {
        stream = AudioSystem.getAudioInputStream(file);

        AudioFormat format = stream.getFormat();

        return file.length() / format.getSampleRate() / (format.getSampleSizeInBits() / 8.0) / format.getChannels();
    }
    catch (Exception e) 
    {
        // log an error
        return -1;
    }
    finally
    {
        try { stream.close(); } catch (Exception ex) { }
    }
}

これが誰かを助けてくれることを願っています!ただし、WAVファイルでのみテストしました。

于 2011-06-30T20:11:15.160 に答える
1

私はJavaMediaFrameworkに精通していませんが、おそらく次のことが役立つでしょう。

1)理論的には、「ファクト」チャンクからwavファイルの長さを取得できます。しかし、私は疑わしいですが、JMFはチャンクへの直接アクセスを提供します。さらに、チャンクに誤った値が含まれている可能性があります。

2)オーディオデータサイズ(バイト単位)とサンプルレート(またはビットレート)を把握して、継続時間を計算できます。

于 2010-04-25T20:24:03.987 に答える