FreeburnTrack.h
上传用户:cnxinhai
上传日期:2013-08-06
资源大小:265k
文件大小:7k
源码类别:

DVD

开发平台:

Visual C++

  1. /* The Track class for FreeBurn.  This class is used
  2.  * to represent the basic track structure in FreeBurn.
  3.  * 
  4.  * Copyright (C) 2001, 2002 Adam Schlag
  5.  */
  6. /*
  7.  * FreeBurn Software License
  8.  * (based on the Apache Software License)
  9.  * 
  10.  * Version 1.1
  11.  * 
  12.  * Copyright (c) 2001, 2002 The FreeBurn Project. All rights reserved.
  13.  * 
  14.  * Redistribution and use in source and binary forms, with or without 
  15.  * modification, are permitted provided that the following conditions are met:
  16.  * 
  17.  * 1. Redistributions of source code must retain the above copyright 
  18.  * notice, this list of conditions and the following disclaimer.
  19.  * 
  20.  * 2. Redistributions in binary form must reproduce the above copyright 
  21.  * notice, this list of conditions and the following disclaimer in the 
  22.  * documentation and/or other materials provided with the distribution.
  23.  * 
  24.  * 3. The end-user documentation included with the redistribution, if any, must 
  25.  * include the following acknowledgment:
  26.  * 
  27.  *  "This product includes software developed by the FreeBurn 
  28.  *     Project (http://freeburn.sourceforge.net/)."
  29.  * 
  30.  * Alternately, this acknowledgment may appear in the software itself, 
  31.  * if and wherever such third-party acknowledgments normally appear.
  32.  * 
  33.  * 4. The names "FreeBurn" and "FreeBurn Project" must not be 
  34.  * used to endorse or promote products derived from this software 
  35.  * without prior written permission. For written permission, please 
  36.  * contact aschlag@users.sourceforge.net.
  37.  * 
  38.  * 5. Products derived from this software may not be called "FreeBurn", 
  39.  * nor may "FreeBurn" appear in their name, without prior written 
  40.  * permission of the FreeBurn Project.
  41.  * 
  42.  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED 
  43.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
  44.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
  45.  * DISCLAIMED. IN NO EVENT SHALL THE FREEBURN PROJECT OR ITS 
  46.  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
  47.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
  48.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
  49.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
  50.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
  51.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
  52.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  53.  * SUCH DAMAGE.
  54.  * 
  55.  * This software consists of voluntary contributions made by many 
  56.  * individuals on behalf of the FreeBurn Project. For more 
  57.  * information on the FreeBurn Project and FreeBurn, please see 
  58.  * <http://freeburn.sourceforge.net/>.
  59.  * 
  60.  * This software is distributed with software that is released under the GNU 
  61.  * General Public License (GPL).  You can find the terms of this license in the
  62.  * file GPL.txt distributed in this package.  You can find information on the
  63.  * software distributed with this package in the file PROGRAMS.txt.
  64.  */
  65. // struct for handling times the way they are on a CD.  Times are in MM:SS:FF, 
  66. // or minutes (MM), seconds (SS), and frames (FF).  Frames are 1/75 of a second 
  67. // and the smallest division of audio supported on a CD.
  68. typedef struct _DiscTime
  69. {
  70.     FXuint minutes; // 0 - max disc time
  71.     FXuint seconds; // 0 - 59
  72.     FXuint frames;  // 0 - 74 (a frame is 1/75 of a second)
  73. } DiscTime;
  74. // struct for handling the CD TEXT that can be placed in the
  75. // CD TEXT area of a track.
  76. typedef struct _CdTextTrack
  77. {
  78.     FXint    map_number; // language map number to use for the text
  79.     FXString title;      // disc title
  80.     FXString performer;  // performer (or artist)
  81.     FXString songwriter; // songwriter
  82.     FXString composer;   // composer
  83.     FXString arranger;   // arranger
  84.     FXString message;    // any message the user wishes to include
  85.     FXString isrc;       // ISRC Code (in the format CC-OOO-YY-SSSSS, see below)
  86. } CdTextTrack;
  87. // struct for setting up the data attributes of a track.
  88. // This makes it easy for stringing together pregaps, silence, start times,
  89. // indicies, etc. in a track regardless if it is for DAO or TAO.  The only difference
  90. // is that for TAO tracks we wouldn't have as many of these structs strung together.
  91. //
  92. // A TAO Disc can only contain the following Track data:
  93. // [Pregap]->[START with no time set]->[Entire Portion of data/audio file]
  94. typedef struct _TrackDataStruct
  95. {
  96.     // the type of data described here
  97.     FXint dataType;
  98.     // name of the file to be used here (only 
  99.     // useful with AUDIOFILE and DATAFILE types)
  100.     FXString filename;
  101.     
  102.     // DiscTime describing the length in CD time to 
  103.     // be used from a file (only used with AUDIOFILE)
  104.     DiscTime startTime;
  105.     
  106.     // Length of the file in bytes.
  107.     // Only used with DATAFILE
  108.     FXint lengthData;
  109.     // DiscTime describing the start/length time in 
  110.     // CD time for each data type except DATAFILE
  111.     DiscTime lengthTime;
  112. } TrackDataStruct;
  113. class CFreeburnTrack
  114. {
  115. public:
  116.     // class constructor
  117.     CFreeburnTrack(FXint trackMode = AUDIO, FXint copyProperties = COPY, FXint preEmphProperties = NO_PRE_EMPHASIS, 
  118.         FXbool twoChannelAudio = FALSE, FXbool fourChannelAudio = FALSE,
  119.         FXint initialDataArraySize = INITIAL_TRACK_PROP_ARRAY_SIZE);
  120.     
  121.     // class destructor
  122.     ~CFreeburnTrack();
  123.     // we want CFreeburnDisc to have access to track data
  124.     // directly (so the entire disc maintenance can be
  125.     // handled through the CFreeburnDisc class
  126.     friend class CFreeburnDisc;
  127.     
  128. protected:
  129. private:
  130.     // The mode of this track
  131.     FXint        m_trackMode;
  132.     // The copy properties of this track
  133.     FXint        m_trackCopyProperties;
  134.     
  135.     // Pre-emphasis properties of this track
  136.     FXint        m_trackPreEmphasisProperties;
  137.     // Specifies if the track is Two Channel Audio.
  138.     FXbool m_trackTwoChannelAudio;
  139.     // Specifies if the track is Four Channel Audio.
  140.     FXbool m_trackFourChannelAudio;
  141.     // Pointer to the CD TEXT for this track
  142.     CdTextTrack* m_trackCdText;
  143.     
  144.     // Specifies if a START type has been set (there
  145.     // can only be one per track).  If there is no
  146.     // START, there is no pregap.
  147.     FXbool m_trackStartSet;
  148.     // Represents the track ISRC code.  This code
  149.     // is 12 characters long, and is represented
  150.     // like this: CCOOOYYSSSSS
  151.     // where each character represents:
  152.     //      C: country code (upper case letters or digits)
  153.     //      O: owner code (upper case letters or digits)
  154.     //      Y: year (digits)
  155.     //      S: serial number (digits)
  156.     FXString     m_trackIsrc;
  157.     // Pointer for the Track data array of structs defining
  158.     // what data will be used in the track.  For TAO (cdrecord)
  159.     // recordings, there will only be a few of these per track.
  160.     // For DAO (cdrdao) recordings, there can be multiple 
  161.     // files and properties for each track, so we need to be able 
  162.     // to specify more than one file and accompanying attributes.  
  163.     // This is a dynamic array, and will be designed (with the
  164.     // class methods) to grow as needed.
  165.     TrackDataStruct* m_trackDataArray;
  166.     // The current length of the track data array
  167.     FXint            m_trackDataArrayLength;
  168.     // The current index of the track data array
  169.     FXint            m_trackDataArrayIndex;
  170.     // The last item in the array that is being used
  171.     FXint            m_trackDataArrayLastIndex;
  172. };