Index: trunk/src/org/openstreetmap/josm/gui/preferences/AudioPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/AudioPreference.java	(revision 556)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/AudioPreference.java	(revision 557)
@@ -40,4 +40,5 @@
 	private JTextField audioLeadIn = new JTextField(8);
 	private JTextField audioForwardBackAmount = new JTextField(8);
+	private JTextField audioCalibration = new JTextField(8);
 
 	public void addGui(PreferenceDialog gui) {
@@ -110,4 +111,9 @@
 		gui.audio.add(audioLeadIn, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
 
+		audioCalibration.setText(Main.pref.get("audio.calibration", "1.0"));
+		audioCalibration.setToolTipText(tr("The ratio of voice recorder elapsed time to true elapsed time"));
+		gui.audio.add(new JLabel(tr("Voice recorder calibration")), GBC.std());
+		gui.audio.add(audioCalibration, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
+
 		gui.audio.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL));
 	}
@@ -122,4 +128,5 @@
 		Main.pref.put("audio.forwardbackamount", audioForwardBackAmount.getText());		
 		Main.pref.put("audio.leadin", audioLeadIn.getText());		
+		Main.pref.put("audio.calibration", audioCalibration.getText());		
     }
 }
Index: trunk/src/org/openstreetmap/josm/tools/AudioPlayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/AudioPlayer.java	(revision 556)
+++ trunk/src/org/openstreetmap/josm/tools/AudioPlayer.java	(revision 557)
@@ -33,4 +33,5 @@
     private URL playingUrl;
     private double leadIn; // seconds
+    private double calibration; // ratio of purported duration of samples to true duration
 	private double position; // seconds
 	private double bytesPerSecond; 
@@ -176,4 +177,9 @@
 		} catch (NumberFormatException e) {
 			leadIn = 1.0; // failed to parse
+		}
+		try {
+			calibration = Double.parseDouble(Main.pref.get("audio.calibration", "1.0" /* default, ratio */));
+		} catch (NumberFormatException e) {
+			calibration = 1.0; // failed to parse
 		}
 		start();
@@ -248,5 +254,5 @@
 							nBytesRead = 0;
 							position = 0.0;
-							double adjustedOffset = offset - leadIn;
+							double adjustedOffset = (offset - leadIn) * calibration;
 							bytesPerSecond = audioFormat.getFrameRate() /* frames per second */
 								* audioFormat.getFrameSize() /* bytes per frame */;
