Author: bpoussin Date: 2012-09-06 10:05:18 +0200 (Thu, 06 Sep 2012) New Revision: 534 Url: http://forge.codelutin.com/repositories/revision/sammoa/534 Log: ajout du support de la compression dans la config Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioConfig.java trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/SammoaAudioRecorder.java trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/AudioCheck.java Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioConfig.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioConfig.java 2012-09-05 16:32:30 UTC (rev 533) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/AudioConfig.java 2012-09-06 08:05:18 UTC (rev 534) @@ -43,6 +43,12 @@ } /** @return {@link AudioConfigOption#SAMPLE_RATE} value */ + public String getCompression() { + String result = applicationConfig.getOption(AudioConfigOption.COMPRESSION.key); + return result; + } + + /** @return {@link AudioConfigOption#SAMPLE_RATE} value */ public float getSampleRate() { float result = applicationConfig.getOptionAsFloat(AudioConfigOption.SAMPLE_RATE.key); return result; @@ -63,6 +69,13 @@ public enum AudioConfigOption implements ApplicationConfig.OptionDef { /** Sampel rate to record audio */ + COMPRESSION( + "sammoa.audio.compression", + n_("sammoa.config.audio.compression"), + "ULAW", + String.class + ), + /** Sampel rate to record audio */ SAMPLE_RATE( "sammoa.audio.sampleRate", n_("sammoa.config.audio.sampleRate"), Modified: trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/SammoaAudioRecorder.java =================================================================== --- trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/SammoaAudioRecorder.java 2012-09-05 16:32:30 UTC (rev 533) +++ trunk/sammoa-application/src/main/java/fr/ulr/sammoa/application/device/audio/SammoaAudioRecorder.java 2012-09-06 08:05:18 UTC (rev 534) @@ -43,6 +43,7 @@ import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.TargetDataLine; import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -72,6 +73,8 @@ protected AudioFormat audioFormat; + protected AudioFormat.Encoding encoding; + protected AudioFileFormat.Type outputType; protected DeviceState state; @@ -85,7 +88,7 @@ public SammoaAudioRecorder(AudioConfig config) { this.config = config; init(config.getSampleRate(), config.getSampleSizeInBits(), - config.getRecordDelayInSeconds()); + config.getCompression(), config.getRecordDelayInSeconds()); } /** @@ -95,11 +98,12 @@ * @param delay le delai avant de reellement coupe un enregistrement (tous * les PC ne le supporte pas) */ - public SammoaAudioRecorder(float sampleRate, int sampleSizeInBits, int delay) { - init(sampleRate, sampleSizeInBits, delay); + public SammoaAudioRecorder( + float sampleRate, int sampleSizeInBits, String compression, int delay) { + init(sampleRate, sampleSizeInBits, compression, delay); } - protected void init(float sampleRate, int sampleSizeInBits, int delay) { + protected void init(float sampleRate, int sampleSizeInBits, String compression, int delay) { this.delay = delay; int channels = 1; // 1,2 @@ -113,6 +117,12 @@ signed, bigEndian); + if (StringUtils.isNotBlank(compression)) { + encoding = new AudioFormat.Encoding(compression); + } else { + encoding = AudioFormat.Encoding.PCM_SIGNED; + } + outputType = AudioFileFormat.Type.WAVE; listeners = Sets.newHashSet(); } @@ -216,7 +226,7 @@ stop(); // start new recorder thread currentRecorder = new AudioRecorderThread( - audioFormat, outputType, outputFile, delay, this); + audioFormat, encoding, outputType, outputFile, delay, this); currentRecorder.start(); setState(DeviceState.RUNNING, null); @@ -260,11 +270,10 @@ protected AudioInputStream stream; protected SammoaAudioRecorder audioRecorder; - public AudioRecorderThread(AudioFormat audioFormat, - AudioFileFormat.Type fileType, - File file, - long delayToClose, - SammoaAudioRecorder audioRecorder) + public AudioRecorderThread( + AudioFormat audioFormat, AudioFormat.Encoding encoding, + AudioFileFormat.Type fileType, File file, long delayToClose, + SammoaAudioRecorder audioRecorder) throws LineUnavailableException { this.fileType = fileType; @@ -277,12 +286,10 @@ targetDataLine = (TargetDataLine) AudioSystem.getLine(dataLineInfo); - AudioFormat.Encoding targetEncoding = AudioFormat.Encoding.PCM_SIGNED; //ULAW; - targetDataLine.open(audioFormat); targetDataLine.start(); stream = new AudioInputStream(targetDataLine); - stream = AudioSystem.getAudioInputStream(targetEncoding, stream); + stream = AudioSystem.getAudioInputStream(encoding, stream); } Modified: trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/AudioCheck.java =================================================================== --- trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/AudioCheck.java 2012-09-05 16:32:30 UTC (rev 533) +++ trunk/sammoa-ui-swing/src/main/java/fr/ulr/sammoa/ui/swing/AudioCheck.java 2012-09-06 08:05:18 UTC (rev 534) @@ -10,16 +10,24 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; import java.io.File; import java.io.IOException; import java.util.Date; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.Control; +import javax.sound.sampled.Line; import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.Mixer; +import javax.sound.sampled.Port; import javax.sound.sampled.UnsupportedAudioFileException; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JFrame; +import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextArea; @@ -63,6 +71,9 @@ protected JButton loadBtn = new JButton("Load"); protected SoundPlayer playerPanel = new SoundPlayer(new SammoaAudioReader()); + protected JLabel compressionLabel = new JLabel("Compression"); + protected JTextField compression = new JTextField("ULAW"); + protected JPanel btnPanelSampleRate = new JPanel(); protected ButtonGroup btnGroupSampleRate = new ButtonGroup(); JRadioButton[] btnSampleRate = new JRadioButton[]{ @@ -94,6 +105,11 @@ box.add(filenameField); box.add(buttons); + Box compressionBox = Box.createHorizontalBox(); + compressionBox.add(compressionLabel); + compressionBox.add(compression); + box.add(compressionBox); + for (JRadioButton b : btnSampleRate) { //Include the radio buttons in a group btnGroupSampleRate.add(b); @@ -145,6 +161,14 @@ // ADD LISTENER + compression.addKeyListener( + new KeyAdapter(){ + @Override + public void keyReleased(KeyEvent e) { + updateConfigInfo(); + } + }); + //Register anonymous listeners captureBtn.addActionListener( new ActionListener(){ @@ -179,13 +203,18 @@ protected void captureAudio(){ try{ File file = new File(filenameField.getText()); - recorder = new SammoaAudioRecorder(getSampleRate(), getSampleSizeInBits(), 0); + recorder = new SammoaAudioRecorder( + getSampleRate(), getSampleSizeInBits(), getCompression(), 0); recorder.record(file, true); }catch (Exception eee) { logger.error("Can't capture audio", eee); } } + protected String getCompression() { + return compression.getText(); + } + protected float getSampleRate() { float result = 44100; for (JRadioButton b : btnSampleRate) { @@ -210,13 +239,14 @@ informationArea.setText(String.format( "sammoa.audio.recordDelayInSeconds=%s\n" + "sammoa.audio.sampleRate=%s\n" - + "sammoa.audio.sampleSizeInBits=%s\n", - delay, getSampleRate(), getSampleSizeInBits())); + + "sammoa.audio.sampleSizeInBits=%s\n" + + "sammoa.audio.compression=%s\n", + delay, getSampleRate(), getSampleSizeInBits(), getCompression())); } protected void checkMultiRecord() { - SammoaAudioRecorder r1 = new SammoaAudioRecorder(8000, 16, 2); - SammoaAudioRecorder r2 = new SammoaAudioRecorder(8000, 16, 2); + SammoaAudioRecorder r1 = new SammoaAudioRecorder(8000, 16, "", 2); + SammoaAudioRecorder r2 = new SammoaAudioRecorder(8000, 16, "", 2); try { File f1 = File.createTempFile("sammoa-audioCheck-", ".wav"); f1.deleteOnExit();