// Path: src/main/java/com/googlecode/eckoit/events/RecordingSplitEvent.java
// public class RecordingSplitEvent {
//     private File finishedFile;
//     private boolean isFinal = false;
//     private String recordingID;
//     private long startTime;
// 
//     public RecordingSplitEvent(File finishedFile, String recordingID, long startTime) {
//         this.recordingID = recordingID;
//         this.finishedFile = finishedFile;
//         this.startTime = startTime;
//     }
// 
//     public File getFinishedFile() {
//         return finishedFile;
//     }
// 
//     /**
//      * @param finishedFile the finishedFile to set
//      */
//     public void setFinishedFile(File finishedFile) {
//         this.finishedFile = finishedFile;
//     }
// 
//     /**
//      * @return the isFinal
//      */
//     public boolean isIsFinal() {
//         return isFinal;
//     }
// 
//     /**
//      * @param isFinal the isFinal to set
//      */
//     public void setIsFinal(boolean isFinal) {
//         this.isFinal = isFinal;
//     }
// 
//     /**
//      * @return the recordingID
//      */
//     public String getRecordingID() {
//         return recordingID;
//     }
// 
//     /**
//      * @param recordingID the recordingID to set
//      */
//     public void setRecordingID(String recordingID) {
//         this.recordingID = recordingID;
//     }
// 
//     /**
//      * @return the startTime
//      */
//     public long getStartTime() {
//         return startTime;
//     }
// 
// }
// 
// Path: src/main/java/com/googlecode/eckoit/util/Slugger.java
// public class Slugger {
// 
//     public static String generateSlug(String text) {
//        return text.replaceAll("[^a-zA-Z0-9]", "_");
//     }
// 
// }


import com.googlecode.eckoit.events.RecordingSplitEvent;
import com.googlecode.eckoit.util.Slugger;
import java.io.IOException;
import java.io.File;
import java.util.Timer;
import java.util.TimerTask;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.TargetDataLine;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.Mixer;
import org.bushe.swing.event.EventBus;
    public static void setSplitTime(long splitTime) {
        SplitAudioRecorder.splitTime = splitTime;
    }

    public static long getSplitTime() {
        return splitTime;
    }

    public static void setConfig(SplitAudioRecorderConfiguration configSetup) {
        config = configSetup;
    }


    public static void setRoot(File dir) {
        root = dir;
        if (!root.isDirectory()) {
            throw new RuntimeException("A directory is expected");
        }
    }


    @Override
    public synchronized void startRecording(String recordingID, final String mixer, float gain) throws LineUnavailableException {


        if (isRecording || m_line != null || (m_line != null && m_line.isOpen())) {
            throw new LineUnavailableException();
        }


// Path: src/main/java/com/googlecode/eckoit/events/RecordingSplitEvent.java
// public class RecordingSplitEvent {
//     private File finishedFile;
//     private boolean isFinal = false;
//     private String recordingID;
//     private long startTime;
// 
//     public RecordingSplitEvent(File finishedFile, String recordingID, long startTime) {
//         this.recordingID = recordingID;
//         this.finishedFile = finishedFile;
//         this.startTime = startTime;
//     }
// 
//     public File getFinishedFile() {
//         return finishedFile;
//     }
// 
//     /**
//      * @param finishedFile the finishedFile to set
//      */
//     public void setFinishedFile(File finishedFile) {
//         this.finishedFile = finishedFile;
//     }
// 
//     /**
//      * @return the isFinal
//      */
//     public boolean isIsFinal() {
//         return isFinal;
//     }
// 
//     /**
//      * @param isFinal the isFinal to set
//      */
//     public void setIsFinal(boolean isFinal) {
//         this.isFinal = isFinal;
//     }
// 
//     /**
//      * @return the recordingID
//      */
//     public String getRecordingID() {
//         return recordingID;
//     }
// 
//     /**
//      * @param recordingID the recordingID to set
//      */
//     public void setRecordingID(String recordingID) {
//         this.recordingID = recordingID;
//     }
// 
//     /**
//      * @return the startTime
//      */
//     public long getStartTime() {
//         return startTime;
//     }
// 
// }
// 
// Path: src/main/java/com/googlecode/eckoit/util/Slugger.java
// public class Slugger {
// 
//     public static String generateSlug(String text) {
//        return text.replaceAll("[^a-zA-Z0-9]", "_");
//     }
// 
// }


// Path: src/main/java/com/googlecode/eckoit/audio/SplitAudioRecorder.java
import com.googlecode.eckoit.events.RecordingSplitEvent;
import com.googlecode.eckoit.util.Slugger;
import java.io.IOException;
import java.io.File;
import java.util.Timer;
import java.util.TimerTask;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.TargetDataLine;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.Mixer;
import org.bushe.swing.event.EventBus;

    public static void setSplitTime(long splitTime) {
        SplitAudioRecorder.splitTime = splitTime;
    }

    public static long getSplitTime() {
        return splitTime;
    }

    public static void setConfig(SplitAudioRecorderConfiguration configSetup) {
        config = configSetup;
    }


    public static void setRoot(File dir) {
        root = dir;
        if (!root.isDirectory()) {
            throw new RuntimeException("A directory is expected");
        }
    }


    @Override
    public synchronized void startRecording(String recordingID, final String mixer, float gain) throws LineUnavailableException {


        if (isRecording || m_line != null || (m_line != null && m_line.isOpen())) {
            throw new LineUnavailableException();
        }


        String safeFileName = Slugger.generateSlug(recordingID);