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

DVD

开发平台:

Visual C++

  1. /* The Disc class for FreeBurn.  This class is used
  2.  * to represent the basic disc 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 a CD TEXT language map.
  66. // The data types are for the struct and a struct pointer.
  67. typedef struct _CdTextLanguageMap
  68. {
  69.     FXint    mapNumber;    // Map number of the language to use
  70.     FXint    languageType; // Language to use for the map number
  71.     FXString description;  // Description of the Language
  72. } CdTextLanguageMap;
  73. // struct for handling the CD TEXT that can be placed in the
  74. // global CD TEXT area of a disc.
  75. typedef struct _CdTextGlobal
  76. {
  77.     FXint    map_number; // language map number to use for the text
  78.     FXString title;      // disc title
  79.     FXString performer;  // performer (or artist)
  80.     FXString songwriter; // songwriter
  81.     FXString composer;   // composer
  82.     FXString arranger;   // arranger
  83.     FXString message;    // any message the user wishes to include
  84.     FXString discid;     // a Disc ID, format is usually XY12345...
  85.     FXString genre;      // the genre of the music on the disc
  86. } CdTextGlobal;
  87. class CFreeburnDisc
  88. {
  89. public:
  90.     // set the size type of the disc that will be burned.
  91.     // Possible values are 74_650_DISC and 80_700_DISC, 
  92.     // which represent a 74 min/650 MB disc and an 80 min/
  93.     // 700 MB disc, respectively.
  94.     // Returns:
  95.     //      TRUE if set, FALSE if not
  96.     FXbool discSizeType(FXint sizeType);
  97.     // Get the value of the disc size type
  98.     FXint  discSizeType() { return m_discSizeType; }
  99.     // get the size used and remaining information
  100.     FXint discCurrentSize() { return m_discCurrentSize; }
  101.     FXint discFreeSpace()   { return m_discFreeSpace;   }
  102.     // set the type of disc this class represents
  103.     // Returns:
  104.     //      TRUE if type is set
  105.     //      FALSE if the input was invalid
  106.     FXbool discType(FXint newType);
  107.     // Get the value of the disc type
  108.     FXint  discType() { return m_discType; }
  109.     // Set the value of the catalog number
  110.     // Returns:
  111.     //      TRUE if set okay
  112.     //      FALSE if there was an error with the value
  113.     FXbool   catalogNumber(FXString newNumber);
  114.     // Get the value of the catalog number
  115.     FXString catalogNumber() { return m_catalogNumber; }
  116.     // set usingCdText
  117.     void   usingCdText(FXbool cdText) { m_usingCdText = cdText; }
  118.     // get the value of usingCdText
  119.     FXbool usingCdText() { return m_usingCdText; }
  120.     // get the value of cdTextCount
  121.     FXuint cdTextMapCount() { return m_cdTextMapCount; }
  122.     // Insert a new CD Text Language Mapping at the specified position
  123.     // (the default position is zero).
  124.     // Returns:
  125.     //      TRUE if the map was inserted successfully
  126.     //      FALSE if the map was not inserted
  127.     FXbool insertCdTextLanguageMap(CdTextLanguageMap* insertMap, FXuint position = 0);
  128.     FXbool insertCdTextLanguageMap(FXint insertMapNumber, FXint insertLanguageType, 
  129.             FXString description, FXint position = 0);
  130.     // Append a new CD Text Language Mapping at the end of the array
  131.     // Returns:
  132.     //      TRUE if the map was appended successfully
  133.     //      FALSE if the map was not appended
  134.     FXbool appendCdTextLanguageMap(CdTextLanguageMap* appendMap);
  135.     FXbool appendCdTextLanguageMap(FXint appendMapNumber, FXint appendLanguageType, 
  136.         FXString description);
  137.     // This version of appendCdTextLanguageMap appends a new language type and
  138.     // automatically gives the type the next map number not used.
  139.     FXbool appendCdTextLanguageMap(FXint appendLanguageType, FXString description);
  140.     // Get the map number for a specified language type (or array position)
  141.     // Returns:
  142.     //      FXint of the map number
  143.     //      If the return value is negative, the mapping was not found.
  144.     FXint mapNumber(FXint langType);
  145.     FXint mapNumberPosition(FXuint position);
  146.     // Get the description for a specified language type (or array position)
  147.     // Returns:
  148.     //      FXString of the map description
  149.     //      If the string is null (""), no value was found
  150.     FXString mapDescription(FXint langType);
  151.     FXString mapDescriptionPosition(FXuint position);
  152.     
  153.     // Set the global (disc) CD Text Information, either by values
  154.     // or by a global CD Text Struct.
  155.     // Returns:
  156.     //      TRUE is set, FALSE if not
  157.     FXbool setGlobalCdTextInfo(FXint mapNum = 0, FXString title    = "", FXString performer = "", 
  158.                        FXString songwriter = "", FXString composer = "", FXString arranger  = "", 
  159.                        FXString message    = "", FXString discid   = "", FXString genre     = "");
  160.     FXbool setGlobalCdTextInfo(CdTextGlobal* globalText);
  161.     // Basic methods to set and get the global cd text values one by one
  162.     // The method names are given to correspond to the property they 
  163.     // are going to assign or return the value of 
  164.     void     discTextMapNumber(FXint num);
  165.     FXint    discTextMapNumber();
  166.     void     discTitle(FXString title);
  167.     FXString discTitle();
  168.     void     discPerformer(FXString performer);
  169.     FXString discPerformer();
  170.     void     discSongWriter(FXString songwriter);
  171.     FXString discSongWriter();
  172.     void     discComposer(FXString composer);
  173.     FXString discComposer();
  174.     void     discArranger(FXString arranger);
  175.     FXString discArranger();
  176.     void     discMessage(FXString message);
  177.     FXString discMessage();
  178.     void     discId(FXString id);
  179.     FXString discId();
  180.     void     discGenre(FXString genre);
  181.     FXString discGenre();
  182.     // Get the current track count for the disc
  183.     FXuint trackCount() { return m_trackCount; }
  184.     // Create a new track at the end of the disc and make it active
  185.     // Returns:
  186.     //      TRUE if the track is added
  187.     //      FALSE if the track was not added (i.e., the disc is full)
  188.     FXbool createTrack(FXint trackMode = AUDIO, FXint copyProperties = COPY, 
  189.         FXint preEmphProperties = NO_PRE_EMPHASIS, FXbool twoChannelAudio = FALSE, 
  190.         FXbool fourChannelAudio = FALSE, FXint initialDataArraySize = INITIAL_TRACK_PROP_ARRAY_SIZE);
  191.     // Like the above, but inserts a new track at the specified position
  192.     // and set the active track to the new one.  If the array is full, it 
  193.     // will not insert.
  194.     FXbool insertTrack(FXuint pos, FXint trackMode = AUDIO, FXint copyProperties = COPY, 
  195.         FXint preEmphProperties = NO_PRE_EMPHASIS, FXbool twoChannelAudio = FALSE, 
  196.         FXbool fourChannelAudio = FALSE, FXint initialDataArraySize = INITIAL_TRACK_PROP_ARRAY_SIZE);
  197.     // set the active track to manipulate.  If the trackNumber given
  198.     // is not a valid track number (it isn't 1..99 or the track number
  199.     // doesn't exist yet), then the number won't change
  200.     // Returns: TRUE on set, FALSE on not set
  201.     FXbool setActiveTrack(FXuint trackNumber);
  202.     // get the active track number (1..99)
  203.     FXint getActiveTrack();
  204.     // Delete the track at the given position.  If the track
  205.     // is not the last track on the disc, other tracks will
  206.     // be moved up to fill the gap.
  207.     // Returns:
  208.     //      TRUE if the track was deleted
  209.     //      FALSE if the track was not deleted
  210.     FXbool deleteTrack(FXuint pos);
  211.     
  212.     // Get/set the track mode for the active track number
  213.     // Returns: TRUE/track mode if there is an active track
  214.     //          FALSE/-1 if there isn't an active track
  215.     FXbool activeTrackMode(FXint newMode);
  216.     FXint  activeTrackMode();
  217.     
  218.     // Get/set the track copy properties for the active track number
  219.     // Returns: TRUE/track copy mode if there is an active track
  220.     //          FALSE/-1 if there isn't an active track
  221.     FXbool activeTrackCopyMode(FXint copyMode);
  222.     FXint  activeTrackCopyMode();
  223.     
  224.     // Get/set the track pre-emphasis mode for the active track number
  225.     // Returns: TRUE/track pre-emphasis mode if there is an active track
  226.     //          FALSE/-1 if there isn't an active track
  227.     FXbool activeTrackPreEmphMode(FXint newMode);
  228.     FXint  activeTrackPreEmphMode();
  229.     
  230.     // Get/set the track 2 channel and 4 channel audio properties
  231.     void   activeTrackTwoChannelAudio(FXbool mode);
  232.     FXbool activeTrackTwoChannelAudio();
  233.     void   activeTrackFourChannelAudio(FXbool mode);
  234.     FXbool activeTrackFourChannelAudio();
  235.     
  236.     // methods to get/set the active track's CD Text properties
  237.     void     activeTrackTextMapNumber(FXint num);
  238.     FXint    activeTrackTextMapNumber();
  239.     void     activeTrackTitle(FXString title);
  240.     FXString activeTrackTitle();
  241.     void     activeTrackPerformer(FXString performer);
  242.     FXString activeTrackPerformer();
  243.     void     activeTrackSongWriter(FXString songwriter);
  244.     FXString activeTrackSongWriter();
  245.     void     activeTrackComposer(FXString composer);
  246.     FXString activeTrackComposer();
  247.     void     activeTrackArranger(FXString arranger);
  248.     FXString activeTrackArranger();
  249.     void     activeTrackMessage(FXString message);
  250.     FXString activeTrackMessage();
  251.     // this sets both the CD Text ISRC and the regular track ISRC
  252.     void     activeTrackIsrc(FXString isrc);
  253.     FXString activeTrackIsrc();
  254.     // adds a new generic track data item to the
  255.     // end of the track data array, and sets the
  256.     // active array index to the newly added item
  257.     // Returns: True on add, False on no add
  258.     FXbool activeTrackAddData();
  259.     // adds a track data item to the end of the track data array of the 
  260.     // data type AUDIOFILE, and set the properties corresponding to this type
  261.     // Also set the active array index to this new item.
  262.     // Returns: True on add, False on no add
  263.     FXbool activeTrackAddAudioData(FXString filename, DiscTime start, DiscTime length);
  264.     // adds a track data item to the end of the track data array of the 
  265.     // data type DATAFILE, and set the properties corresponding to this type
  266.     // Also set the active array index to this new item.
  267.     // Returns: True on add, False on no add
  268.     FXbool activeTrackAddDataData(FXString filename, FXuint length);
  269.     // adds a track data item to the end of the track data array of the 
  270.     // data type SILENCE, and set the properties corresponding to this type
  271.     // Also set the active array index to this new item.
  272.     // Returns: True on add, False on no add
  273.     FXbool activeTrackAddSilenceData(DiscTime length);
  274.     // adds a track data item to the end of the track data array of the 
  275.     // data type ZERO, and set the properties corresponding to this type
  276.     // Also set the active array index to this new item.
  277.     // Returns: True on add, False on no add
  278.     FXbool activeTrackAddZeroData(FXuint length);
  279.     // adds a track data item to the end of the track data array of the 
  280.     // data type START, and set the properties corresponding to this type
  281.     // Also set the active array index to this new item.
  282.     // Returns: True on add, False on no add
  283.     FXbool activeTrackAddStartData(DiscTime length);
  284.     // adds a track data item to the end of the track data array of the 
  285.     // data type PREGAP, and set the properties corresponding to this type
  286.     // Also set the active array index to this new item.
  287.     // Returns: True on add, False on no add
  288.     FXbool activeTrackAddPregapData(DiscTime length);
  289.     // adds a track data item to the end of the track data array of the 
  290.     // data type INDEX, and set the properties corresponding to this type
  291.     // Also set the active array index to this new item.
  292.     // Returns: True on add, False on no add
  293.     FXbool activeTrackAddIndexData(DiscTime length);
  294.     
  295.     // inserts a new generic track data item at the
  296.     // position specified in the data array, and sets the
  297.     // active array index to the newly added item
  298.     // Returns: True on add, False on no add
  299.     FXbool activeTrackInsertData(FXint pos);
  300.     // inserts a track data item to the track data array at (pos) of the 
  301.     // data type AUDIOFILE, and set the properties corresponding to this type
  302.     // Also set the active array index to this new item.
  303.     // Returns: True on add, False on no add
  304.     FXbool activeTrackInsertAudioData(FXint pos, FXString filename, DiscTime start, DiscTime length);
  305.     // inserts a track data item to the track data array at (pos) of the 
  306.     // data type DATAFILE, and set the properties corresponding to this type
  307.     // Also set the active array index to this new item.
  308.     // Returns: True on add, False on no add
  309.     FXbool activeTrackInsertDataData(FXint pos, FXString filename, FXuint length);
  310.     // inserts a track data item to the track data array at (pos) of the 
  311.     // data type SILENCE, and set the properties corresponding to this type
  312.     // Also set the active array index to this new item.
  313.     // Returns: True on add, False on no add
  314.     FXbool activeTrackInsertSilenceData(FXint pos, DiscTime length);
  315.     // inserts a track data item to the track data array at (pos) of the 
  316.     // data type ZERO, and set the properties corresponding to this type
  317.     // Also set the active array index to this new item.
  318.     // Returns: True on add, False on no add
  319.     FXbool activeTrackInsertZeroData(FXint pos, FXuint length);
  320.     // inserts a track data item to the track data array at (pos) of the 
  321.     // data type START, and set the properties corresponding to this type
  322.     // Also set the active array index to this new item.
  323.     // Returns: True on add, False on no add
  324.     FXbool activeTrackInsertStartData(FXint pos, DiscTime length);
  325.     // inserts a track data item to the track data array at (pos) of the 
  326.     // data type PREGAP, and set the properties corresponding to this type
  327.     // Also set the active array index to this new item.
  328.     // Returns: True on add, False on no add
  329.     FXbool activeTrackInsertPregapData(FXint pos, DiscTime length);
  330.     // inserts a track data item to the track data array at (pos) of the 
  331.     // data type INDEX, and set the properties corresponding to this type
  332.     // Also set the active array index to this new item.
  333.     // Returns: True on add, False on no add
  334.     FXbool activeTrackInsertIndexData(FXint pos, DiscTime length);
  335.     
  336.     // Delete the active track data from the track data array.  If the item isn't
  337.     // at the end of the array, bump the rest of the items down to fill the gap
  338.     // Returns: True on delete, False on a fail
  339.     FXbool activeTrackDeleteData(FXint pos);
  340.     
  341.     // change the index of the track data item
  342.     FXbool activeTrackActiveDataIndex(FXint pos);
  343.     // get the index of the active track data item
  344.     FXint activeTrackActiveDataIndex();
  345.     
  346.     // Get the elements of the currently indexed track data item
  347.     FXint    activeTrackActiveDataType();
  348.     FXString activeTrackActiveFileName();
  349.     FXint    activeTrackActiveStartTimeMinutes();
  350.     FXint    activeTrackActiveStartTimeSeconds();
  351.     FXint    activeTrackActiveStartTimeFrames();
  352.     FXint    activeTrackActiveTimeLengthMinutes();
  353.     FXint    activeTrackActiveTimeLengthSeconds();
  354.     FXint    activeTrackActiveTimeLengthFrames();
  355.     FXint    activeTrackActiveDataLength();
  356.     
  357.     // Set the currently indexed track data item to the new data type
  358.     // Returns: True on change, False if not
  359.     FXbool activeTrackDataSetAudio(FXString filename, DiscTime start, DiscTime length);
  360.     FXbool activeTrackDataSetData(FXString filename, FXuint length);
  361.     FXbool activeTrackDataSetSilence(DiscTime length);
  362.     FXbool activeTrackDataSetZero(FXuint length);
  363.     FXbool activeTrackDataSetStart(DiscTime length);
  364.     FXbool activeTrackDataSetPregap(DiscTime length);
  365.     FXbool activeTrackDataSetIndex(DiscTime length);
  366.     
  367.     // CFreeburnDisc Constructor
  368.     // The constructor initializes any class variables that need to be initialized
  369.     CFreeburnDisc(FXint sizeType = _74_650_DISC, FXint discType = CD_DA);
  370.     // CFreeburnDisc Destructor
  371.     ~CFreeburnDisc();
  372. protected:
  373.     
  374.     // This method will double the size of the active tracks
  375.     // data array, in case the size of the array is too small
  376.     FXbool activeTrackGrowDataArray();
  377. private:
  378.     // The type of disc that will be burned.
  379.     // By types we mean the size of the CD-R or CD-RW.
  380.     // The type will either be 74/650 or 80/700, and are
  381.     // represented by the defines 74_650_DISC and 
  382.     // 80_700_DISC.  A 74/650 disc holds 74 minutes of audio
  383.     // or 650 MB of data.  An 80/700 disc holds 80 minutes
  384.     // of audio or 700 MB of data.  We need to keep track of
  385.     // this so we know how much space is on the disc that 
  386.     // will be burned.
  387.     FXint        m_discSizeType;
  388.     
  389.     // These keep track of the current size of the disc, 
  390.     // and the amount of blocks left.  The maximum size
  391.     // will depend on the size of the current disc
  392.     FXuint       m_discCurrentSize;
  393.     FXuint       m_discFreeSpace;
  394.     
  395.     // type of disc we're going to burn.  
  396.     FXint        m_discType;
  397.     
  398.     // a string specifying the catalog number
  399.     // Max size is 13 characters
  400.     FXString     m_catalogNumber;
  401.     
  402.     // specifies if the disc will use CD TEXT or not.
  403.     // This will help to force CD TEXT for tracks to be
  404.     // defined if the disc CD TEXT is defined.
  405.     FXbool m_usingCdText;
  406.     // the number of CD TEXT language mappings we have
  407.     FXuint m_cdTextMapCount;
  408.     // An array of CD TEXT language mapping definitions
  409.     // to possibly use if we'll use CD TEXT.
  410.     CdTextLanguageMap* m_languageMapArray[CD_TEXT_LANG_ARRAY_LENGTH];
  411.     // Pointer to a Global CD TEXT struct.
  412.     // Will only point to data if we're using CD TEXT.
  413.     CdTextGlobal* m_pGlobalCdText;
  414.     // Count of how many tracks are on this disc. 
  415.     // The number can't be any higher than 99.
  416.     FXuint m_trackCount;
  417.     
  418.     // Also keep track of the current track the user
  419.     // is working with.
  420.     FXuint m_currentTrackIndex;
  421.     // Array of Track Class pointers.  Each pointer
  422.     // only points to data if the track is defined. 
  423.     CFreeburnTrack* m_trackArray[MAX_CD_TRACKS];    
  424. };