/* * Copyright (c) 2007 - 2008 by Damien Di Fede <ddf@compartmental.net> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as published * by the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package ddf.minim.javasound; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.Clip; import javax.sound.sampled.Control; import javax.sound.sampled.LineEvent; import javax.sound.sampled.LineListener; import ddf.minim.AudioMetaData; import ddf.minim.MultiChannelBuffer; import ddf.minim.spi.AudioRecording; /** @deprecated */ class JSAudioRecordingClip implements AudioRecording { private Clip c; private int loopCount; private AudioMetaData meta; private boolean playing; JSAudioRecordingClip(Clip clip, AudioMetaData mdata) { c = clip; // because Clip doesn't give access to the loop count // we just loop it ourselves by triggering off of a STOP event c.addLineListener( new LineListener() { public void update(LineEvent event) { if ( event.getType().equals( LineEvent.Type.STOP ) ) { if ( playing && loopCount != 0 ) { c.setMicrosecondPosition( 0 ); c.start(); if ( loopCount > 0 ) { loopCount--; } } else { playing = false; } } } } ); playing = false; loopCount = 0; meta = mdata; } public int getLoopCount() { return loopCount; } public int getMillisecondLength() { return (int)c.getMicrosecondLength() / 1000; } public int getMillisecondPosition() { return (int)c.getMicrosecondPosition() / 1000; } public AudioMetaData getMetaData() { return meta; } public boolean isPlaying() { return playing; } public void loop(int count) { play(); loopCount = count; } public void setLoopPoints(int start, int end) { c.setLoopPoints( start, end ); } public void setMillisecondPosition(int pos) { c.setMicrosecondPosition( pos * 1000 ); } public void play() { if ( c.getMicrosecondPosition() != c.getMicrosecondLength() ) { c.start(); playing = true; } } public void pause() { c.stop(); playing = false; } public void close() { c.close(); } public Control[] getControls() { return c.getControls(); } public AudioFormat getFormat() { return c.getFormat(); } public void open() { // don't need to do anything here } public int bufferSize() { return 0; } public float[] read() { return null; } public int read(MultiChannelBuffer buffer) { return 0; } }