001 // License: GPL. Copyright 2009 by David Earl and others 002 package org.openstreetmap.josm.tools; 003 004 import java.io.File; 005 import java.net.URL; 006 007 import javax.sound.sampled.AudioFormat; 008 import javax.sound.sampled.AudioInputStream; 009 import javax.sound.sampled.AudioSystem; 010 011 import org.openstreetmap.josm.Main; 012 013 /** 014 * Returns calibrated length of recording in seconds. 015 * 016 * @author David Earl <david@frankieandshadow.com> 017 * 018 */ 019 public class AudioUtil { 020 static public double getCalibratedDuration(File wavFile) { 021 try { 022 AudioInputStream audioInputStream = AudioSystem.getAudioInputStream( 023 new URL("file:".concat(wavFile.getAbsolutePath()))); 024 AudioFormat audioFormat = audioInputStream.getFormat(); 025 long filesize = wavFile.length(); 026 double bytesPerSecond = audioFormat.getFrameRate() /* frames per second */ 027 * audioFormat.getFrameSize() /* bytes per frame */; 028 double naturalLength = filesize / bytesPerSecond; 029 audioInputStream.close(); 030 double calibration = Main.pref.getDouble("audio.calibration", "1.0" /* default, ratio */); 031 return naturalLength / calibration; 032 } catch (Exception e) { 033 return 0.0; 034 } 035 } 036 }