Package com.meapsoft

Source Code of com.meapsoft.Chunk

/*
*  Copyright 2006-2007 Columbia University.
*
*  This file is part of MEAPsoft.
*
*  MEAPsoft is free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License version 2 as
*  published by the Free Software Foundation.
*
*  MEAPsoft 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
*  General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with MEAPsoft; if not, write to the Free Software
*  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
*  02110-1301 USA
*
*  See the file "COPYING" for the text of the license.
*/

package com.meapsoft;

import java.io.IOException;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.UnsupportedAudioFileException;

/**
* Representation of a single audio chunk (i.e. a single line of an
* EDL or feature file).
*
* @author Ron Weiss (ronw@ee.columbia.edu)
*/
public abstract class Chunk implements Comparable
{
    // Filename of audio file that contains this chunk
    public String srcFile;
    // Start time (in seconds) of this chunk in srcFile
    public double startTime;
    // Length (in seconds) of this chunk
    public double length;
  
    // Comment string associated with this chunk - used so that
    // FeatExtractor will not strip the comments from a segment file
    public String comment = "";

    /**
     * Chunk constructor
     */
    public Chunk(String sf, double st, double l)
    {
        srcFile = sf;
        startTime = st;
        length = l;
    }
   
    /**
     * Load samples corresponding to this Chunk
     */
    public double[] getSamples(AudioFormat format) throws IOException, UnsupportedAudioFileException
    {
        AudioInputStream ais = MEAPUtil.openInputStream(srcFile, format);

        // this format had better match the output file format or we
        // have problems
        AudioFormat fmt = ais.getFormat();
       
        int frameSize = fmt.getFrameSize();
        float frameRate = fmt.getFrameRate();
       
        int startByte = (int)(startTime*frameRate*frameSize);
        int byteLen = (int)(length*frameRate*frameSize);
       
        byte[] bytes = new byte[byteLen];

        //System.out.print("getSamples: ais.skip: "+new Date()+" - ");
        ais.skip(startByte);
        //System.out.println(new Date());
        //System.out.print("getSamples: ais.read: "+new Date()+" - ");
        ais.read(bytes, 0, byteLen);
        //System.out.println(new Date());
        ais.close();
       
        double[] samples = new double[(int)(frameRate*length)];
        MEAPUtil.bytes2doubles(bytes, samples, fmt);

        return samples;
    }

    /**
     * Compare one Chunk to another - comparisons are performed based
     * on srcFile and then startTime fields.
     */
    public int compareTo(Object o) throws ClassCastException
    {
        Chunk c = (Chunk)o;

        int compare = this.srcFile.compareTo(c.srcFile);
        if(compare == 0)
            compare = Double.compare(this.startTime, c.startTime);

        return compare;
    }

    /**
     * Return a string representation of this chunk, using the segment
     * file format.
     */
    public String toString()
    {
        // concatenating strings is super slow.  Better to use StringBuffer
        // guesstimate the string length
        StringBuffer s = new StringBuffer(200);
        s.append(srcFile.replaceAll(" ", "%20")).append(" ").append(startTime).append(" ");
        s.append(length).append(" ").append(comment).append("\n");
       
        return s.toString();
    }
}
TOP

Related Classes of com.meapsoft.Chunk

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.