/////////////////////////////////////////////////////////////////////////////
// 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);
		[propget, id(9), helpstring("property DefaultText")] HRESULT DefaultText([out, retval] BSTR *pVal);
		[propput, id(9), helpstring("property DefaultText")] HRESULT DefaultText([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);
	};
	
	[
		object,
		uuid(F7E07D57-DB11-4397-9C97-3D4321DD8183),
		dual,
		helpstring("IMP3Info Interface"),
		pointer_default(unique)
	]
	interface IMP3Info : IDispatch
	{
	};
	[
		object,
		uuid(377C1B33-1726-46AF-A0C3-F86C76EDC77D),
		dual,
		helpstring("ICMP3Info Interface"),
		pointer_default(unique)
	]
	interface ICMP3Info : IDispatch
	{
	};
[
	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;
	};
};
