Package com.meapsoft.composers

Source Code of com.meapsoft.composers.Composer

/*
*  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.composers;

import gnu.getopt.Getopt;

import java.io.IOException;
import java.util.Iterator;
import java.util.Vector;

import com.meapsoft.EDLChunk;
import com.meapsoft.EDLFile;
import com.meapsoft.MEAPUtil;
import com.meapsoft.ParserException;

/**
* Abstract class that defines the basic interface that all MEAPsoft
* composers should follow.
*
* @author Ron Weiss (ronw@ee.columbia.edu)
*/
public abstract class Composer extends MEAPUtil
{
    // Short description of this composer
  public static String description = "I am a generic Composer.";

    // The EDL file that this composer generates
    EDLFile outFile;

    // Commands to be applied to all
    Vector commands = null;

    /**
     * Setup the Composer - read in files, etc.
     *
     * This should be called before any call to compose() to ensure
     * that the inputs and outputs are properly initialized.
     */
    public void setup() throws IOException, ParserException
    {
        // clear old EDL
        outFile.clearChunks();

        // keep track of our progress in composing:
        progress.setMinimum(0);
        progress.setValue(0);
    }

    /**
     *  Compose an EDLFile.  This is where the magic happens.
     */
    public abstract EDLFile compose();

    /*
     * Setup, compose, and write output file.  Handles exceptions.
     */
    public void run()
    {
        try
        {
            doComposer();
        }
        catch(Exception e)
        {
            exceptionHandler.handleException(e);
        }
    }

    /**
     * Setup, compose, and write output file.  Doesn't handle
     * exceptions.
     */
    public void doComposer() throws IOException, ParserException
    {
      //System.out.println("Composer: doing setup...");
        setup();
    //System.out.println("Composer: doing compose...");
        compose();
    //System.out.println("Composer: adding commands...");
        addCommandsToAllEDLChunks();
    //System.out.println("Composer: writing file...");
        if(writeMEAPFile)
        {
            outFile.writeFile();
      //System.out.println("filename: " + outFile.filename);
        }
    //System.out.println("Composer: finished!");
    }

    /**
     *  Add a command to all chunks in outFile
     */
    public void addCommandToAllEDLChunks(String cmd)
    {
        if(outFile != null)
        {
            Iterator i = outFile.chunks.iterator();
            while(i.hasNext())
            {
                EDLChunk chunk = (EDLChunk)i.next();

                if(chunk.commands != null)
                    chunk.commands.add(cmd);
            }
        }
    }

    /**
     *  Add commands to all chunks in outFile
     */
    public void addCommandsToAllEDLChunks(Vector cmds)
    {
        Iterator i = cmds.iterator();
        while(i.hasNext())
            addCommandToAllEDLChunks((String)i.next());
    }

    public void addCommandsToAllEDLChunks()
    {
        if(commands != null)
            addCommandsToAllEDLChunks(commands);
    }

    /**
     *  Add a command to be applied to all EDL chunks.
     */
    public void addCommand(String cmd)
    {
        if(commands == null)
            commands = new Vector();

        commands.add(cmd);
    }

    /**
     * Print usage of Compose command line options
     */
    public static void printCommandLineOptions(char arg)
    {
        if(arg == 'c')
        {
            System.out.println(
                "    -c command      apply command to all chunks in the EDL output file\n" +
                "                    Supported commands include: reverse, crossfade(time), overlap(time) (time in seconds), gain(x)." +
                "");
        }
        else
            MEAPUtil.printCommandLineOptions(arg);
    }

    /**
     * Parse command strings from the command line arguments
     */
    public void parseCommands(String[] args, String argString)
    {
        Getopt opt = new Getopt("Composer", args, argString);
        opt.setOpterr(false);
       
        int c = -1;
        while ((c = opt.getopt()) != -1)
        {
            if(c == 'c')
            {
                if(commands == null)
                    commands = new Vector();
               
                commands.add(opt.getOptarg());
            }
        }
    }

  public String description()
  {
    return description;
  }
}
TOP

Related Classes of com.meapsoft.composers.Composer

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.