/////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2000 John Adcock.  All rights reserved.
/////////////////////////////////////////////////////////////////////////////
//
//	This file is subject to the terms of the GNU General Public License as
//	published by the Free Software Foundation.  A copy of this license is
//	included with this software distribution in the file COPYING.  If you
//	do not have a copy, you may obtain a copy by writing to the Free
//	Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
//
//	This software 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
//
/////////////////////////////////////////////////////////////////////////////
// ID3COM.idl : IDL source for ID3COM.dll
/////////////////////////////////////////////////////////////////////////////
// Change Log
//
// Date          Developer             Changes
//
// 05 Jan 2000   John Adcock           Original Release    
// 18 Aug 2000   Philip Oldaker        Added Picture Functionality
// 01 Nov 2002   John Adcock           Changed fields to reflect changes to id3lib
//
/////////////////////////////////////////////////////////////////////////////

// This file will be processed by the MIDL tool to
// produce the type library (ID3COM.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";
	
	typedef 
	[
		uuid(181CFC77-C770-11d3-841C-0008C782A257), 		
		helpstring("ID3 Field Types")
	]
	enum
	{
      ID3_FIELD_NOFIELD = 0,       /**< No field */
      ID3_FIELD_TEXTENC,           /**< Text encoding (unicode or ASCII) */
      ID3_FIELD_TEXT,              /**< Text field */
      ID3_FIELD_URL,               /**< A URL */
      ID3_FIELD_DATA,              /**< Data field */
      ID3_FIELD_DESCRIPTION,       /**< Description field */
      ID3_FIELD_OWNER,             /**< Owner field */
      ID3_FIELD_EMAIL,             /**< Email field */
      ID3_FIELD_RATING,            /**< Rating field */
      ID3_FIELD_FILENAME,          /**< Filename field */
      ID3_FIELD_LANGUAGE,          /**< Language field */
      ID3_FIELD_PICTURETYPE,       /**< Picture type field */
      ID3_FIELD_IMAGEFORMAT,       /**< Image format field */
      ID3_FIELD_MIMETYPE,          /**< Mimetype field */
      ID3_FIELD_COUNTER,           /**< Counter field */
      ID3_FIELD_ID,                /**< Identifier/Symbol field */
      ID3_FIELD_VOLUMEADJ,         /**< Volume adjustment field */
      ID3_FIELD_NUMBITS,           /**< Number of bits field */
      ID3_FIELD_NUMBER,            /**< General Number, can be anything, as long it's an integer <= 32 bits  */
      ID3_FIELD_VOLCHGRIGHT,       /**< Volume chage on the right channel */
      ID3_FIELD_VOLCHGLEFT,        /**< Volume chage on the left channel */
      ID3_FIELD_PEAKVOLRIGHT,      /**< Peak volume on the right channel */
      ID3_FIELD_PEAKVOLLEFT,       /**< Peak volume on the left channel */
      ID3_FIELD_TIMESTAMPFORMAT,   /**< SYLT Timestamp Format */
      ID3_FIELD_CONTENTTYPE,       /**< SYLT content type */
      ID3_FIELD_REVERBL,           /**< Reverb Left */
      ID3_FIELD_REVERBR,           /**< Reverb Right */
      ID3_FIELD_REVERBBOUNCESL,    /**< Reverb Bounces Left */
      ID3_FIELD_REVERBBOUNCESR,    /**< Reverb Bounces Right */
      ID3_FIELD_REVERBFEEDBACKL2L, /**< Reverb Feedback Left to Left */
      ID3_FIELD_REVERBFEEDBACKL2R, /**< Reverb Feedback Left to Right */
      ID3_FIELD_REVERBFEEDBACKR2R, /**< Reverb Feedback Right to Right */
      ID3_FIELD_REVERBFEEDBACKR2L, /**< Reverb Feedback Right to Left */
      ID3_FIELD_PREMIXL2R,         /**< Premix Left to Right */
      ID3_FIELD_PREMIXR2L,         /**< Premix Right to Left */
      ID3_FIELD_LENGTH,            /**< Size field, can be bits, bytes, time etc */
      ID3_FIELD_FLAGS,             /**< Flags field */
      ID3_FIELD_OFFSET,            /**< Offset, can be bits, bytes, time etc */
      ID3_FIELD_PRICE,             /**< Price Field, containing currency+amount */
      ID3_FIELD_8DATE,             /**< Date Field, containing date as YYYYMMDD */
      ID3_FIELD_SELLER,            /**< Seller */
      ID3_FIELD_DELIVERY,          /**< Way of delivery field */
      ID3_FIELD_BITSSIZE,          /**< contains the number of bits for other fields' fixed size */
      ID3_FIELD_BYTESSIZE,         /**< contains the number of bytes for other fields' fixed size */
      ID3_FIELD_LASTFIELDID        /**< Last field placeholder */
	} eID3FieldTypes;


	typedef 
	[
		uuid(385B5F8C-1F3C-11d3-83C6-0008C782A257), 		
		helpstring("ID3 Frame Types")
	]
	enum
	{
      /* ???? */ ID3_NOFRAME = 0,       /**< No known frame */
      /* AENC */ ID3_AUDIOCRYPTO,       /**< Audio encryption */
      /* APIC */ ID3_PICTURE,           /**< Attached picture */
      /* ASPI */ ID3_AUDIOSEEKPOINT,    /**< Audio seek point index */
      /* COMM */ ID3_COMMENT,           /**< Comments */
      /* COMR */ ID3_COMMERCIAL,        /**< Commercial frame */
      /* ENCR */ ID3_CRYPTOREG,         /**< Encryption method registration */
      /* EQU2 */ ID3_EQUALIZATION2,     /**< Equalisation (2) */
      /* EQUA */ ID3_EQUALIZATION,      /**< Equalization */
      /* ETCO */ ID3_EVENTTIMING,       /**< Event timing codes */
      /* GEOB */ ID3_GENERALOBJECT,     /**< General encapsulated object */
      /* GRID */ ID3_GROUPINGREG,       /**< Group identification registration */
      /* IPLS */ ID3_INVOLVEDPEOPLE,    /**< Involved people list */
      /* LINK */ ID3_LINKEDINFO,        /**< Linked information */
      /* MCDI */ ID3_CDID,              /**< Music CD identifier */
      /* MLLT */ ID3_MPEGLOOKUP,        /**< MPEG location lookup table */
      /* OWNE */ ID3_OWNERSHIP,         /**< Ownership frame */
      /* PRIV */ ID3_PRIVATE,           /**< Private frame */
      /* PCNT */ ID3_PLAYCOUNTER,       /**< Play counter */
      /* POPM */ ID3_POPULARIMETER,     /**< Popularimeter */
      /* POSS */ ID3_POSITIONSYNC,      /**< Position synchronisation frame */
      /* RBUF */ ID3_BUFFERSIZE,        /**< Recommended buffer size */
      /* RVA2 */ ID3_VOLUMEADJ2,        /**< Relative volume adjustment (2) */
      /* RVAD */ ID3_VOLUMEADJ,         /**< Relative volume adjustment */
      /* RVRB */ ID3_REVERB,            /**< Reverb */
      /* SEEK */ ID3_SEEKFRAME,         /**< Seek frame */
      /* SIGN */ ID3_SIGNATURE,         /**< Signature frame */
      /* SYLT */ ID3_SYNCEDLYRICS,      /**< Synchronized lyric/text */
      /* SYTC */ ID3_SYNCEDTEMPO,       /**< Synchronized tempo codes */
      /* TALB */ ID3_ALBUM,             /**< Album/Movie/Show title */
      /* TBPM */ ID3_BPM,               /**< BPM (beats per minute) */
      /* TCOM */ ID3_COMPOSER,          /**< Composer */
      /* TCON */ ID3_CONTENTTYPE,       /**< Content type */
      /* TCOP */ ID3_COPYRIGHT,         /**< Copyright message */
      /* TDAT */ ID3_DATE,              /**< Date */
      /* TDEN */ ID3_ENCODINGTIME,      /**< Encoding time */
      /* TDLY */ ID3_PLAYLISTDELAY,     /**< Playlist delay */
      /* TDOR */ ID3_ORIGRELEASETIME,   /**< Original release time */
      /* TDRC */ ID3_RECORDINGTIME,     /**< Recording time */
      /* TDRL */ ID3_RELEASETIME,       /**< Release time */
      /* TDTG */ ID3_TAGGINGTIME,       /**< Tagging time */
      /* TIPL */ ID3_INVOLVEDPEOPLE2,   /**< Involved people list */
      /* TENC */ ID3_ENCODEDBY,         /**< Encoded by */
      /* TEXT */ ID3_LYRICIST,          /**< Lyricist/Text writer */
      /* TFLT */ ID3_FILETYPE,          /**< File type */
      /* TIME */ ID3_TIME,              /**< Time */
      /* TIT1 */ ID3_CONTENTGROUP,      /**< Content group description */
      /* TIT2 */ ID3_TITLE,             /**< Title/songname/content description */
      /* TIT3 */ ID3_SUBTITLE,          /**< Subtitle/Description refinement */
      /* TKEY */ ID3_INITIALKEY,        /**< Initial key */
      /* TLAN */ ID3_LANGUAGE,          /**< Language(s) */
      /* TLEN */ ID3_SONGLEN,           /**< Length */
      /* TMCL */ ID3_MUSICIANCREDITLIST,/**< Musician credits list */
      /* TMED */ ID3_MEDIATYPE,         /**< Media type */
      /* TMOO */ ID3_MOOD,              /**< Mood */
      /* TOAL */ ID3_ORIGALBUM,         /**< Original album/movie/show title */
      /* TOFN */ ID3_ORIGFILENAME,      /**< Original filename */
      /* TOLY */ ID3_ORIGLYRICIST,      /**< Original lyricist(s)/text writer(s) */
      /* TOPE */ ID3_ORIGARTIST,        /**< Original artist(s)/performer(s) */
      /* TORY */ ID3_ORIGYEAR,          /**< Original release year */
      /* TOWN */ ID3_FILEOWNER,         /**< File owner/licensee */
      /* TPE1 */ ID3_LEADARTIST,        /**< Lead performer(s)/Soloist(s) */
      /* TPE2 */ ID3_BAND,              /**< Band/orchestra/accompaniment */
      /* TPE3 */ ID3_CONDUCTOR,         /**< Conductor/performer refinement */
      /* TPE4 */ ID3_MIXARTIST,         /**< Interpreted, remixed, or otherwise modified by */
      /* TPOS */ ID3_PARTINSET,         /**< Part of a set */
      /* TPRO */ ID3_PRODUCEDNOTICE,    /**< Produced notice */
      /* TPUB */ ID3_PUBLISHER,         /**< Publisher */
      /* TRCK */ ID3_TRACKNUM,          /**< Track number/Position in set */
      /* TRDA */ ID3_RECORDINGDATES,    /**< Recording dates */
      /* TRSN */ ID3_NETRADIOSTATION,   /**< Internet radio station name */
      /* TRSO */ ID3_NETRADIOOWNER,     /**< Internet radio station owner */
      /* TSIZ */ ID3_SIZE,              /**< Size */
      /* TSOA */ ID3_ALBUMSORTORDER,    /**< Album sort order */
      /* TSOP */ ID3_PERFORMERSORTORDER,/**< Performer sort order */
      /* TSOT */ ID3_TITLESORTORDER,    /**< Title sort order */
      /* TSRC */ ID3_ISRC,              /**< ISRC (international standard recording code) */
      /* TSSE */ ID3_ENCODERSETTINGS,   /**< Software/Hardware and settings used for encoding */
      /* TSST */ ID3_SETSUBTITLE,       /**< Set subtitle */
      /* TXXX */ ID3_USERTEXT,          /**< User defined text information */
      /* TYER */ ID3_YEAR,              /**< Year */
      /* UFID */ ID3_UNIQUEFILEID,      /**< Unique file identifier */
      /* USER */ ID3_TERMSOFUSE,        /**< Terms of use */
      /* USLT */ ID3_UNSYNCEDLYRICS,    /**< Unsynchronized lyric/text transcription */
      /* WCOM */ ID3_WWWCOMMERCIALINFO, /**< Commercial information */
      /* WCOP */ ID3_WWWCOPYRIGHT,      /**< Copyright/Legal infromation */
      /* WOAF */ ID3_WWWAUDIOFILE,      /**< Official audio file webpage */
      /* WOAR */ ID3_WWWARTIST,         /**< Official artist/performer webpage */
      /* WOAS */ ID3_WWWAUDIOSOURCE,    /**< Official audio source webpage */
      /* WORS */ ID3_WWWRADIOPAGE,      /**< Official internet radio station homepage */
      /* WPAY */ ID3_WWWPAYMENT,        /**< Payment */
      /* WPUB */ ID3_WWWPUBLISHER,      /**< Official publisher webpage */
      /* WXXX */ ID3_WWWUSER,           /**< User defined URL link */
      /*      */ ID3_METACRYPTO,        /**< Encrypted meta frame (id3v2.2.x) */
      /*      */ ID3_METACOMPRESSION,   /**< Compressed meta frame (id3v2.2.1) */
      /* >>>> */ ID3_LASTFRAMEID        /**< Last field placeholder */
	} eID3FrameTypes;

	[
		object,
		uuid(A513A24E-C749-11D3-841C-0008C782A257),
		dual,
		helpstring("IID3ComField Interface"),
		pointer_default(unique)
	]
	interface IID3ComField : IDispatch
	{
		[propget, id(0), helpstring("property Text")] HRESULT Text([in] long ItemNum, [out, retval] BSTR *pVal);
		[propput, id(0), helpstring("property Text")] HRESULT Text([in] long ItemNum, [in] BSTR newVal);
		[propget, id(1), helpstring("property Long")] HRESULT Long([out, retval] long *pVal);
		[propput, id(1), helpstring("property Long")] HRESULT Long([in] long newVal);
		[id(4), helpstring("method Clear")] HRESULT Clear();
		[id(5), helpstring("method CopyDataToFile")] HRESULT CopyDataToFile(BSTR FileName);
		[id(6), helpstring("method CopyDataFromFile")] HRESULT CopyDataFromFile(BSTR FileName);
		[propget, id(7), helpstring("property NumTextItems")] HRESULT NumTextItems([out, retval] long *pVal);
		[propget, id(8), helpstring("property Binary")] HRESULT Binary([out, retval] BSTR *pVal);
		[propput, id(8), helpstring("property Binary")] HRESULT Binary([in] BSTR newVal);
	};

	[
		object,
		uuid(AEBA98BE-C36C-11D3-841B-0008C782A257),
		dual,
		helpstring("IID3ComFrame Interface"),
		pointer_default(unique)
	]
	interface IID3ComFrame : IDispatch
	{
		[propget, id(1), helpstring("property Field")] HRESULT Field([in] eID3FieldTypes FieldType, [out, retval] IID3ComField** pVal);
		[id(2), helpstring("method Clear")] HRESULT Clear();
		[propget, id(3), helpstring("property ID")] HRESULT ID([out, retval] eID3FrameTypes *pVal);
		[propput, id(3), helpstring("property ID")] HRESULT ID([in] eID3FrameTypes newVal);
		[propget, id(4), helpstring("property FrameName")] HRESULT FrameName([out, retval] BSTR *pVal);
 		[propget, id(5), helpstring("property Compressed")] HRESULT Compressed([out, retval] VARIANT_BOOL *pVal);
 		[propput, id(5), helpstring("property Compressed")] HRESULT Compressed([in] VARIANT_BOOL newVal);
	};
	[
		object,
		uuid(AEBA98BC-C36C-11D3-841B-0008C782A257),
		dual,
		helpstring("IID3ComTag Interface"),
		pointer_default(unique)
	]
	interface IID3ComTag : IDispatch
	{
		[id(1), helpstring("method Link")] HRESULT Link(BSTR* FileName);
		[id(2), helpstring("method Clear")] HRESULT Clear();
		[propget, id(3), helpstring("property HasChanged")] HRESULT HasChanged([out, retval] VARIANT_BOOL *pVal);
		[id(4), helpstring("method FindFrame")] HRESULT FindFrame([in] eID3FrameTypes FrameID, [in, defaultvalue(TRUE)] VARIANT_BOOL CreateNewIfNotFound, [out, retval] IID3ComFrame** pVal);
		[propget, id(5), helpstring("property Count")] HRESULT Count([out, retval] long *pVal);
		[propget, id(DISPID_VALUE), helpstring("property Item")] HRESULT Item([in] long FrameNum, [out, retval] IID3ComFrame** pVal);
		[id(7), helpstring("method SaveV1Tag")] HRESULT SaveV1Tag();
		[id(8), helpstring("method StripV1Tag")] HRESULT StripV1Tag();
		[id(9), helpstring("method SaveV2Tag")] HRESULT SaveV2Tag();
		[id(10), helpstring("method StripV2Tag")] HRESULT StripV2Tag();
		[propget, id(11), helpstring("property Artist")] HRESULT Artist([out, retval] BSTR *pVal);
		[propput, id(11), helpstring("property Artist")] HRESULT Artist([in] BSTR newVal);
		[propget, id(12), helpstring("property Album")] HRESULT Album([out, retval] BSTR *pVal);
		[propput, id(12), helpstring("property Album")] HRESULT Album([in] BSTR newVal);
		[propget, id(13), helpstring("property Title")] HRESULT Title([out, retval] BSTR *pVal);
		[propput, id(13), helpstring("property Title")] HRESULT Title([in] BSTR newVal);
		[propget, id(14), helpstring("property Comment")] HRESULT Comment([out, retval] BSTR *pVal);
		[propput, id(14), helpstring("property Comment")] HRESULT Comment([in] BSTR newVal);
		[propget, id(15), helpstring("property Genre")] HRESULT Genre([out, retval] long *pVal);
		[propput, id(15), helpstring("property Genre")] HRESULT Genre([in] long newVal);
		[propget, id(16), helpstring("property Year")] HRESULT Year([out, retval] BSTR *pVal);
		[propput, id(16), helpstring("property Year")] HRESULT Year([in] BSTR newVal);
		[propget, id(17), helpstring("property Track")] HRESULT Track([out, retval] long *pVal);
		[propput, id(17), helpstring("property Track")] HRESULT Track([in] long newVal);
		[propget, id(18), helpstring("property LastPlayed")] HRESULT LastPlayed([out, retval] DATE *pVal);
		[propput, id(18), helpstring("property LastPlayed")] HRESULT LastPlayed([in] DATE newVal);
		[propget, id(19), helpstring("property HasV1Tag")] HRESULT HasV1Tag([out, retval] VARIANT_BOOL *pVal);
		[propget, id(20), helpstring("property HasV2Tag")] HRESULT HasV2Tag([out, retval] VARIANT_BOOL *pVal);
		[propget, id(21), helpstring("property HasLyrics")] HRESULT HasLyrics([out, retval] VARIANT_BOOL *pVal);
		[id(22), helpstring("method FindFrameString")] HRESULT FindFrameString([in] eID3FrameTypes FrameID, [in] eID3FieldTypes FieldType, [in] BSTR FindString, [in, defaultvalue(TRUE)] VARIANT_BOOL CreateNewIfNotFound, [out, retval] IID3ComFrame** pVal);
		[propget, id(23), helpstring("property PlayCount")] HRESULT PlayCount([in] BSTR EMailAddress, [out, retval] long *pVal);
		[propput, id(23), helpstring("property PlayCount")] HRESULT PlayCount([in] BSTR EMailAddress, [in] long newVal);
		[propget, id(24), helpstring("property Popularity")] HRESULT Popularity([in] BSTR EMailAddress, [out, retval] short *pVal);
		[propput, id(24), helpstring("property Popularity")] HRESULT Popularity([in] BSTR EMailAddress, [in] short newVal);
		[propget, id(25), helpstring("property TagCreated")] HRESULT TagCreated([out, retval] DATE *pVal);
		[propput, id(25), helpstring("property TagCreated")] HRESULT TagCreated([in] DATE newVal);
		[propget, id(26), helpstring("property PercentVolumeAdjust")] HRESULT PercentVolumeAdjust([out, retval] double *pVal);
		[propput, id(26), helpstring("property PercentVolumeAdjust")] HRESULT PercentVolumeAdjust([in] double newVal);
 		[propput, id(27), helpstring("property Padding")] HRESULT Padding([in] VARIANT_BOOL newVal);
 		[propput, id(28), helpstring("property UnSync")] HRESULT UnSync([in] VARIANT_BOOL newVal);
		[propget, id(29), helpstring("property VersionString")] HRESULT VersionString([out, retval] BSTR *pVal);
		[id(35), helpstring("method RemoveFrame")] HRESULT RemoveFrame([in] eID3FrameTypes FrameID);
		[id(37), helpstring("method RemoveFrameByNum")] HRESULT RemoveFrameByNum([in] long FrameNum);
		[propget, id(DISPID_NEWENUM), restricted] HRESULT _NewEnum([out, retval] IUnknown** pRetVal);
	};
[
	uuid(AEBA98B0-C36C-11D3-841B-0008C782A257),
	version(1.0),
	helpstring("ID3COM 1.0 Type Library")
]
library ID3COM
{
	importlib("stdole32.tlb");
	importlib("stdole2.tlb");

	[
		uuid(AEBA98BD-C36C-11D3-841B-0008C782A257),
		helpstring("ID3ComTag Class")
	]
	coclass ID3ComTag
	{
		[default] interface IID3ComTag;
	};
	[
		uuid(AEBA98BF-C36C-11D3-841B-0008C782A257),
		helpstring("ID3ComFrame Class"),
		noncreatable
	]
	coclass ID3ComFrame
	{
		[default] interface IID3ComFrame;
	};
	[
		uuid(A513A24F-C749-11D3-841C-0008C782A257),
		helpstring("ID3ComField Class"),
		noncreatable
	]
	coclass ID3ComField
	{
		[default] interface IID3ComField;
	};
};
