itunes-com 0.2.0

Bindings over iTunes COM API
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
// Copied-and-pasted from oleview.exe (File > View TypeLib, then open iTunes.exe)

[
  odl,
  uuid(9FAB0E27-70D7-4E3A-9965-B0C8B8869BB6),
  helpstring("IITObject Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITObject : IDispatch {
    [id(0x60020000), helpstring("Returns the four IDs that uniquely identify this object.")]
    HRESULT GetITObjectIDs(
                    [out] long* sourceID,
                    [out] long* playlistID,
                    [out] long* trackID,
                    [out] long* databaseID);
    [id(0x60020001), propget, helpstring("The name of the object.")]
    HRESULT Name([out, retval] BSTR* Name);
    [id(0x60020001), propput, helpstring("The name of the object.")]
    HRESULT Name([in] BSTR Name);
    [id(0x60020003), propget, helpstring("The index of the object in internal application order (1-based).")]
    HRESULT Index([out, retval] long* Index);
    [id(0x60020004), propget, helpstring("The source ID of the object.")]
    HRESULT sourceID([out, retval] long* sourceID);
    [id(0x60020005), propget, helpstring("The playlist ID of the object.")]
    HRESULT playlistID([out, retval] long* playlistID);
    [id(0x60020006), propget, helpstring("The track ID of the object.")]
    HRESULT trackID([out, retval] long* trackID);
    [id(0x60020007), propget, helpstring("The track database ID of the object.")]
    HRESULT TrackDatabaseID([out, retval] long* databaseID);
};

[
  odl,
  uuid(AEC1C4D3-AEF1-4255-B892-3E3D13ADFDF9),
  helpstring("IITSource Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITSource : IITObject {
    [id(0x60030000), propget, helpstring("The source kind.")]
    HRESULT Kind([out, retval] ITSourceKind* Kind);
    [id(0x60030001), propget, helpstring("The total size of the source, if it has a fixed size.")]
    HRESULT Capacity([out, retval] double* Capacity);
    [id(0x60030002), propget, helpstring("The free space on the source, if it has a fixed size.")]
    HRESULT FreeSpace([out, retval] double* FreeSpace);
    [id(0x60030003), propget, helpstring("Returns a collection of playlists.")]
    HRESULT Playlists([out, retval] IITPlaylistCollection** iPlaylistCollection);
};

[
  odl,
  uuid(FF194254-909D-4437-9C50-3AAC2AE6305C),
  helpstring("IITPlaylistCollection Interface"),
  dual,
  oleautomation
]
interface IITPlaylistCollection : IDispatch {
    [id(0x60020000), propget, helpstring("Returns the number of playlists in the collection.")]
    HRESULT Count([out, retval] long* Count);
    [id(00000000), propget, helpstring("Returns an IITPlaylist object corresponding to the given index (1-based).")]
    HRESULT Item(
                    [in] long Index,
                    [out, retval] IITPlaylist** iPlaylist);
    [id(0x60020002), propget, helpstring("Returns an IITPlaylist object with the specified name.")]
    HRESULT ItemByName(
                    [in] BSTR Name,
                    [out, retval] IITPlaylist** iPlaylist);
    [id(0xfffffffc), propget, restricted, helpstring("Returns an IEnumVARIANT object which can enumerate the collection.")]
    HRESULT _NewEnum([out, retval] IUnknown** iEnumerator);
    [id(0x60020004), propget, helpstring("Returns an IITPlaylist object with the specified persistent ID.")]
    HRESULT ItemByPersistentID(
                    [in] long highID,
                    [in] long lowID,
                    [out, retval] IITPlaylist** iPlaylist);
};

[
  odl,
  uuid(3D5E072F-2A77-4B17-9E73-E03B77CCCCA9),
  helpstring("IITPlaylist Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITPlaylist : IITObject {
    [id(0x60030000), helpstring("Delete this playlist.")]
    HRESULT Delete();
    [id(0x60030001), helpstring("Start playing the first track in this playlist.")]
    HRESULT PlayFirstTrack();
    [id(0x60030002), helpstring("Print this playlist.")]
    HRESULT Print(
                    [in] VARIANT_BOOL showPrintDialog,
                    [in] ITPlaylistPrintKind printKind,
                    [in] BSTR theme);
    [id(0x60030003), helpstring("Search tracks in this playlist for the specified string.")]
    HRESULT Search(
                    [in] BSTR searchText,
                    [in] ITPlaylistSearchField searchFields,
                    [out, retval] IITTrackCollection** iTrackCollection);
    [id(0x60030004), propget, helpstring("The playlist kind.")]
    HRESULT Kind([out, retval] ITPlaylistKind* Kind);
    [id(0x60030005), propget, helpstring("The source that contains this playlist.")]
    HRESULT Source([out, retval] IITSource** iSource);
    [id(0x60030006), propget, helpstring("The total length of all songs in the playlist (in seconds).")]
    HRESULT Duration([out, retval] long* Duration);
    [id(0x60030007), propget, helpstring("True if songs in the playlist are played in random order.")]
    HRESULT Shuffle([out, retval] VARIANT_BOOL* isShuffle);
    [id(0x60030007), propput, helpstring("True if songs in the playlist are played in random order.")]
    HRESULT Shuffle([in] VARIANT_BOOL isShuffle);
    [id(0x60030009), propget, helpstring("The total size of all songs in the playlist (in bytes).")]
    HRESULT Size([out, retval] double* Size);
    [id(0x6003000a), propget, helpstring("The playback repeat mode.")]
    HRESULT SongRepeat([out, retval] ITPlaylistRepeatMode* repeatMode);
    [id(0x6003000a), propput, helpstring("The playback repeat mode.")]
    HRESULT SongRepeat([in] ITPlaylistRepeatMode repeatMode);
    [id(0x6003000c), propget, helpstring("The total length of all songs in the playlist (in MM:SS format).")]
    HRESULT Time([out, retval] BSTR* Time);
    [id(0x6003000d), propget, helpstring("True if the playlist is visible in the Source list.")]
    HRESULT Visible([out, retval] VARIANT_BOOL* isVisible);
    [id(0x6003000e), propget, helpstring("Returns a collection of tracks in this playlist.")]
    HRESULT Tracks([out, retval] IITTrackCollection** iTrackCollection);
};

[
  odl,
  uuid(755D76F1-6B85-4CE4-8F5F-F88D9743DCD8),
  helpstring("IITTrackCollection Interface"),
  dual,
  oleautomation
]
interface IITTrackCollection : IDispatch {
    [id(0x60020000), propget, helpstring("Returns the number of tracks in the collection.")]
    HRESULT Count([out, retval] long* Count);
    [id(00000000), propget, helpstring("Returns an IITTrack object corresponding to the given fixed index, where the index is independent of the play order (1-based).")]
    HRESULT Item(
                    [in] long Index,
                    [out, retval] IITTrack** iTrack);
    [id(0x60020002), propget, helpstring("Returns an IITTrack object corresponding to the given index, where the index is defined by the play order of the playlist containing the track collection (1-based).")]
    HRESULT ItemByPlayOrder(
                    [in] long Index,
                    [out, retval] IITTrack** iTrack);
    [id(0x60020003), propget, helpstring("Returns an IITTrack object with the specified name.")]
    HRESULT ItemByName(
                    [in] BSTR Name,
                    [out, retval] IITTrack** iTrack);
    [id(0xfffffffc), propget, restricted, helpstring("Returns an IEnumVARIANT object which can enumerate the collection.")]
    HRESULT _NewEnum([out, retval] IUnknown** iEnumerator);
    [id(0x60020005), propget, helpstring("Returns an IITTrack object with the specified persistent ID.")]
    HRESULT ItemByPersistentID(
                    [in] long highID,
                    [in] long lowID,
                    [out, retval] IITTrack** iTrack);
};

[
  odl,
  uuid(4CB0915D-1E54-4727-BAF3-CE6CC9A225A1),
  helpstring("IITTrack Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITTrack : IITObject {
    [id(0x60030000), helpstring("Delete this track.")]
    HRESULT Delete();
    [id(0x60030001), helpstring("Start playing this track.")]
    HRESULT Play();
    [id(0x60030002), helpstring("Add artwork from an image file to this track.")]
    HRESULT AddArtworkFromFile(
                    [in] BSTR filePath,
                    [out, retval] IITArtwork** iArtwork);
    [id(0x60030003), propget, helpstring("The track kind.")]
    HRESULT Kind([out, retval] ITTrackKind* Kind);
    [id(0x60030004), propget, helpstring("The playlist that contains this track.")]
    HRESULT Playlist([out, retval] IITPlaylist** iPlaylist);
    [id(0x60030005), propget, helpstring("The album containing the track.")]
    HRESULT Album([out, retval] BSTR* Album);
    [id(0x60030005), propput, helpstring("The album containing the track.")]
    HRESULT Album([in] BSTR Album);
    [id(0x60030007), propget, helpstring("The artist/source of the track.")]
    HRESULT Artist([out, retval] BSTR* Artist);
    [id(0x60030007), propput, helpstring("The artist/source of the track.")]
    HRESULT Artist([in] BSTR Artist);
    [id(0x60030009), propget, helpstring("The bit rate of the track (in kbps).")]
    HRESULT BitRate([out, retval] long* BitRate);
    [id(0x6003000a), propget, helpstring("The tempo of the track (in beats per minute).")]
    HRESULT BPM([out, retval] long* beatsPerMinute);
    [id(0x6003000a), propput, helpstring("The tempo of the track (in beats per minute).")]
    HRESULT BPM([in] long beatsPerMinute);
    [id(0x6003000c), propget, helpstring("Freeform notes about the track.")]
    HRESULT Comment([out, retval] BSTR* Comment);
    [id(0x6003000c), propput, helpstring("Freeform notes about the track.")]
    HRESULT Comment([in] BSTR Comment);
    [id(0x6003000e), propget, helpstring("True if this track is from a compilation album.")]
    HRESULT Compilation([out, retval] VARIANT_BOOL* isCompilation);
    [id(0x6003000e), propput, helpstring("True if this track is from a compilation album.")]
    HRESULT Compilation([in] VARIANT_BOOL isCompilation);
    [id(0x60030010), propget, helpstring("The composer of the track.")]
    HRESULT Composer([out, retval] BSTR* Composer);
    [id(0x60030010), propput, helpstring("The composer of the track.")]
    HRESULT Composer([in] BSTR Composer);
    [id(0x60030012), propget, helpstring("The date the track was added to the playlist.")]
    HRESULT DateAdded([out, retval] DATE* DateAdded);
    [id(0x60030013), propget, helpstring("The total number of discs in the source album.")]
    HRESULT DiscCount([out, retval] long* DiscCount);
    [id(0x60030013), propput, helpstring("The total number of discs in the source album.")]
    HRESULT DiscCount([in] long DiscCount);
    [id(0x60030015), propget, helpstring("The index of the disc containing the track on the source album.")]
    HRESULT DiscNumber([out, retval] long* DiscNumber);
    [id(0x60030015), propput, helpstring("The index of the disc containing the track on the source album.")]
    HRESULT DiscNumber([in] long DiscNumber);
    [id(0x60030017), propget, helpstring("The length of the track (in seconds).")]
    HRESULT Duration([out, retval] long* Duration);
    [id(0x60030018), propget, helpstring("True if the track is checked for playback.")]
    HRESULT Enabled([out, retval] VARIANT_BOOL* isEnabled);
    [id(0x60030018), propput, helpstring("True if the track is checked for playback.")]
    HRESULT Enabled([in] VARIANT_BOOL isEnabled);
    [id(0x6003001a), propget, helpstring("The name of the EQ preset of the track.")]
    HRESULT EQ([out, retval] BSTR* EQ);
    [id(0x6003001a), propput, helpstring("The name of the EQ preset of the track.")]
    HRESULT EQ([in] BSTR EQ);
    [id(0x6003001c), propput, helpstring("The stop time of the track (in seconds).")]
    HRESULT Finish([in] long Finish);
    [id(0x6003001c), propget, helpstring("The stop time of the track (in seconds).")]
    HRESULT Finish([out, retval] long* Finish);
    [id(0x6003001e), propget, helpstring("The music/audio genre (category) of the track.")]
    HRESULT Genre([out, retval] BSTR* Genre);
    [id(0x6003001e), propput, helpstring("The music/audio genre (category) of the track.")]
    HRESULT Genre([in] BSTR Genre);
    [id(0x60030020), propget, helpstring("The grouping (piece) of the track.  Generally used to denote movements within classical work.")]
    HRESULT Grouping([out, retval] BSTR* Grouping);
    [id(0x60030020), propput, helpstring("The grouping (piece) of the track.  Generally used to denote movements within classical work.")]
    HRESULT Grouping([in] BSTR Grouping);
    [id(0x60030022), propget, helpstring("A text description of the track.")]
    HRESULT KindAsString([out, retval] BSTR* Kind);
    [id(0x60030023), propget, helpstring("The modification date of the content of the track.")]
    HRESULT ModificationDate([out, retval] DATE* dateModified);
    [id(0x60030024), propget, helpstring("The number of times the track has been played.")]
    HRESULT PlayedCount([out, retval] long* PlayedCount);
    [id(0x60030024), propput, helpstring("The number of times the track has been played.")]
    HRESULT PlayedCount([in] long PlayedCount);
    [id(0x60030026), propget, helpstring("The date and time the track was last played.  A value of zero means no played date.")]
    HRESULT PlayedDate([out, retval] DATE* PlayedDate);
    [id(0x60030026), propput, helpstring("The date and time the track was last played.  A value of zero means no played date.")]
    HRESULT PlayedDate([in] DATE PlayedDate);
    [id(0x60030028), propget, helpstring("The play order index of the track in the owner playlist (1-based).")]
    HRESULT PlayOrderIndex([out, retval] long* Index);
    [id(0x60030029), propget, helpstring("The rating of the track (0 to 100).")]
    HRESULT Rating([out, retval] long* Rating);
    [id(0x60030029), propput, helpstring("The rating of the track (0 to 100).")]
    HRESULT Rating([in] long Rating);
    [id(0x6003002b), propget, helpstring("The sample rate of the track (in Hz).")]
    HRESULT SampleRate([out, retval] long* SampleRate);
    [id(0x6003002c), propget, helpstring("The size of the track (in bytes).")]
    HRESULT Size([out, retval] long* Size);
    [id(0x6003002d), propget, helpstring("The start time of the track (in seconds).")]
    HRESULT Start([out, retval] long* Start);
    [id(0x6003002d), propput, helpstring("The start time of the track (in seconds).")]
    HRESULT Start([in] long Start);
    [id(0x6003002f), propget, helpstring("The length of the track (in MM:SS format).")]
    HRESULT Time([out, retval] BSTR* Time);
    [id(0x60030030), propget, helpstring("The total number of tracks on the source album.")]
    HRESULT TrackCount([out, retval] long* TrackCount);
    [id(0x60030030), propput, helpstring("The total number of tracks on the source album.")]
    HRESULT TrackCount([in] long TrackCount);
    [id(0x60030032), propget, helpstring("The index of the track on the source album.")]
    HRESULT TrackNumber([out, retval] long* TrackNumber);
    [id(0x60030032), propput, helpstring("The index of the track on the source album.")]
    HRESULT TrackNumber([in] long TrackNumber);
    [id(0x60030034), propget, helpstring("The relative volume adjustment of the track (-100% to 100%).")]
    HRESULT VolumeAdjustment([out, retval] long* VolumeAdjustment);
    [id(0x60030034), propput, helpstring("The relative volume adjustment of the track (-100% to 100%).")]
    HRESULT VolumeAdjustment([in] long VolumeAdjustment);
    [id(0x60030036), propget, helpstring("The year the track was recorded/released.")]
    HRESULT Year([out, retval] long* Year);
    [id(0x60030036), propput, helpstring("The year the track was recorded/released.")]
    HRESULT Year([in] long Year);
    [id(0x60030038), propget, helpstring("Returns a collection of artwork.")]
    HRESULT Artwork([out, retval] IITArtworkCollection** iArtworkCollection);
};

[
  odl,
  uuid(D0A6C1F8-BF3D-4CD8-AC47-FE32BDD17257),
  helpstring("IITArtwork Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITArtwork : IDispatch {
    [id(0x60020000), helpstring("Delete this piece of artwork from the track.")]
    HRESULT Delete();
    [id(0x60020001), helpstring("Replace existing artwork data with new artwork from an image file.")]
    HRESULT SetArtworkFromFile([in] BSTR filePath);
    [id(0x60020002), helpstring("Save artwork data to an image file.")]
    HRESULT SaveArtworkToFile([in] BSTR filePath);
    [id(0x60020003), propget, helpstring("The format of the artwork.")]
    HRESULT Format([out, retval] ITArtworkFormat* Format);
    [id(0x60020004), propget, helpstring("True if the artwork was downloaded by iTunes.")]
    HRESULT IsDownloadedArtwork([out, retval] VARIANT_BOOL* IsDownloadedArtwork);
    [id(0x60020005), propget, helpstring("The description for the artwork.")]
    HRESULT Description([out, retval] BSTR* Description);
    [id(0x60020005), propput, helpstring("The description for the artwork.")]
    HRESULT Description([in] BSTR Description);
};

[
  odl,
  uuid(BF2742D7-418C-4858-9AF9-2981B062D23E),
  helpstring("IITArtworkCollection Interface"),
  dual,
  oleautomation
]
interface IITArtworkCollection : IDispatch {
    [id(0x60020000), propget, helpstring("Returns the number of pieces of artwork in the collection.")]
    HRESULT Count([out, retval] long* Count);
    [id(00000000), propget, helpstring("Returns an IITArtwork object corresponding to the given index (1-based).")]
    HRESULT Item(
                    [in] long Index,
                    [out, retval] IITArtwork** iArtwork);
    [id(0xfffffffc), propget, restricted, helpstring("Returns an IEnumVARIANT object which can enumerate the collection.")]
    HRESULT _NewEnum([out, retval] IUnknown** iEnumerator);
};

[
  odl,
  uuid(2FF6CE20-FF87-4183-B0B3-F323D047AF41),
  helpstring("IITSourceCollection Interface"),
  dual,
  oleautomation
]
interface IITSourceCollection : IDispatch {
    [id(0x60020000), propget, helpstring("Returns the number of sources in the collection.")]
    HRESULT Count([out, retval] long* Count);
    [id(00000000), propget, helpstring("Returns an IITSource object corresponding to the given index (1-based).")]
    HRESULT Item(
                    [in] long Index,
                    [out, retval] IITSource** iSource);
    [id(0x60020002), propget, helpstring("Returns an IITSource object with the specified name.")]
    HRESULT ItemByName(
                    [in] BSTR Name,
                    [out, retval] IITSource** iSource);
    [id(0xfffffffc), propget, restricted, helpstring("Returns an IEnumVARIANT object which can enumerate the collection.")]
    HRESULT _NewEnum([out, retval] IUnknown** iEnumerator);
    [id(0x60020004), propget, helpstring("Returns an IITSource object with the specified persistent ID.")]
    HRESULT ItemByPersistentID(
                    [in] long highID,
                    [in] long lowID,
                    [out, retval] IITSource** iSource);
};

[
  odl,
  uuid(1CF95A1C-55FE-4F45-A2D3-85AC6C504A73),
  helpstring("IITEncoder Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITEncoder : IDispatch {
    [id(0x60020000), propget, helpstring("The name of the the encoder.")]
    HRESULT Name([out, retval] BSTR* Name);
    [id(0x60020001), propget, helpstring("The data format created by the encoder.")]
    HRESULT Format([out, retval] BSTR* Format);
};

[
  odl,
  uuid(8862BCA9-168D-4549-A9D5-ADB35E553BA6),
  helpstring("IITEncoderCollection Interface"),
  dual,
  oleautomation
]
interface IITEncoderCollection : IDispatch {
    [id(0x60020000), propget, helpstring("Returns the number of encoders in the collection.")]
    HRESULT Count([out, retval] long* Count);
    [id(00000000), propget, helpstring("Returns an IITEncoder object corresponding to the given index (1-based).")]
    HRESULT Item(
                    [in] long Index,
                    [out, retval] IITEncoder** iEncoder);
    [id(0x60020002), propget, helpstring("Returns an IITEncoder object with the specified name.")]
    HRESULT ItemByName(
                    [in] BSTR Name,
                    [out, retval] IITEncoder** iEncoder);
    [id(0xfffffffc), propget, restricted, helpstring("Returns an IEnumVARIANT object which can enumerate the collection.")]
    HRESULT _NewEnum([out, retval] IUnknown** iEnumerator);
};

[
  odl,
  uuid(5BE75F4F-68FA-4212-ACB7-BE44EA569759),
  helpstring("IITEQPreset Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITEQPreset : IDispatch {
    [id(0x60020000), propget, helpstring("The name of the the EQ preset.")]
    HRESULT Name([out, retval] BSTR* Name);
    [id(0x60020001), propget, helpstring("True if this EQ preset can be modified.")]
    HRESULT Modifiable([out, retval] VARIANT_BOOL* isModifiable);
    [id(0x60020002), propget, helpstring("The equalizer preamp level (-12.0 db to +12.0 db).")]
    HRESULT Preamp([out, retval] double* level);
    [id(0x60020002), propput, helpstring("The equalizer preamp level (-12.0 db to +12.0 db).")]
    HRESULT Preamp([in] double level);
    [id(0x60020004), propget, helpstring("The equalizer 32Hz band level (-12.0 db to +12.0 db).")]
    HRESULT Band1([out, retval] double* level);
    [id(0x60020004), propput, helpstring("The equalizer 32Hz band level (-12.0 db to +12.0 db).")]
    HRESULT Band1([in] double level);
    [id(0x60020006), propget, helpstring("The equalizer 64Hz band level (-12.0 db to +12.0 db).")]
    HRESULT Band2([out, retval] double* level);
    [id(0x60020006), propput, helpstring("The equalizer 64Hz band level (-12.0 db to +12.0 db).")]
    HRESULT Band2([in] double level);
    [id(0x60020008), propget, helpstring("The equalizer 125Hz band level (-12.0 db to +12.0 db).")]
    HRESULT Band3([out, retval] double* level);
    [id(0x60020008), propput, helpstring("The equalizer 125Hz band level (-12.0 db to +12.0 db).")]
    HRESULT Band3([in] double level);
    [id(0x6002000a), propget, helpstring("The equalizer 250Hz band level (-12.0 db to +12.0 db).")]
    HRESULT Band4([out, retval] double* level);
    [id(0x6002000a), propput, helpstring("The equalizer 250Hz band level (-12.0 db to +12.0 db).")]
    HRESULT Band4([in] double level);
    [id(0x6002000c), propget, helpstring("The equalizer 500Hz band level (-12.0 db to +12.0 db).")]
    HRESULT Band5([out, retval] double* level);
    [id(0x6002000c), propput, helpstring("The equalizer 500Hz band level (-12.0 db to +12.0 db).")]
    HRESULT Band5([in] double level);
    [id(0x6002000e), propget, helpstring("The equalizer 1KHz band level (-12.0 db to +12.0 db).")]
    HRESULT Band6([out, retval] double* level);
    [id(0x6002000e), propput, helpstring("The equalizer 1KHz band level (-12.0 db to +12.0 db).")]
    HRESULT Band6([in] double level);
    [id(0x60020010), propget, helpstring("The equalizer 2KHz band level (-12.0 db to +12.0 db).")]
    HRESULT Band7([out, retval] double* level);
    [id(0x60020010), propput, helpstring("The equalizer 2KHz band level (-12.0 db to +12.0 db).")]
    HRESULT Band7([in] double level);
    [id(0x60020012), propget, helpstring("The equalizer 4KHz band level (-12.0 db to +12.0 db).")]
    HRESULT Band8([out, retval] double* level);
    [id(0x60020012), propput, helpstring("The equalizer 4KHz band level (-12.0 db to +12.0 db).")]
    HRESULT Band8([in] double level);
    [id(0x60020014), propget, helpstring("The equalizer 8KHz band level (-12.0 db to +12.0 db).")]
    HRESULT Band9([out, retval] double* level);
    [id(0x60020014), propput, helpstring("The equalizer 8KHz band level (-12.0 db to +12.0 db).")]
    HRESULT Band9([in] double level);
    [id(0x60020016), propget, helpstring("The equalizer 16KHz band level (-12.0 db to +12.0 db).")]
    HRESULT Band10([out, retval] double* level);
    [id(0x60020016), propput, helpstring("The equalizer 16KHz band level (-12.0 db to +12.0 db).")]
    HRESULT Band10([in] double level);
    [id(0x60020018), helpstring("Delete this EQ preset.")]
    HRESULT Delete([in] VARIANT_BOOL updateAllTracks);
    [id(0x60020019), helpstring("Rename this EQ preset.")]
    HRESULT Rename(
                    [in] BSTR newName,
                    [in] VARIANT_BOOL updateAllTracks);
};

[
  odl,
  uuid(AEF4D111-3331-48DA-B0C2-B468D5D61D08),
  helpstring("IITEQPresetCollection Interface"),
  dual,
  oleautomation
]
interface IITEQPresetCollection : IDispatch {
    [id(0x60020000), propget, helpstring("Returns the number of EQ presets in the collection.")]
    HRESULT Count([out, retval] long* Count);
    [id(00000000), propget, helpstring("Returns an IITEQPreset object corresponding to the given index (1-based).")]
    HRESULT Item(
                    [in] long Index,
                    [out, retval] IITEQPreset** iEQPreset);
    [id(0x60020002), propget, helpstring("Returns an IITEQPreset object with the specified name.")]
    HRESULT ItemByName(
                    [in] BSTR Name,
                    [out, retval] IITEQPreset** iEQPreset);
    [id(0xfffffffc), propget, restricted, helpstring("Returns an IEnumVARIANT object which can enumerate the collection.")]
    HRESULT _NewEnum([out, retval] IUnknown** iEnumerator);
};

[
  odl,
  uuid(206479C9-FE32-4F9B-A18A-475AC939B479),
  helpstring("IITOperationStatus Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITOperationStatus : IDispatch {
    [id(0x60020000), propget, helpstring("True if the operation is still in progress.")]
    HRESULT InProgress([out, retval] VARIANT_BOOL* isInProgress);
    [id(0x60020001), propget, helpstring("Returns a collection containing the tracks that were generated by the operation.")]
    HRESULT Tracks([out, retval] IITTrackCollection** iTrackCollection);
};

[
  odl,
  uuid(7063AAF6-ABA0-493B-B4FC-920A9F105875),
  helpstring("IITConvertOperationStatus Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITConvertOperationStatus : IITOperationStatus {
    [id(0x60030000), helpstring("Returns the current conversion status.")]
    HRESULT GetConversionStatus(
                    [out] BSTR* trackName,
                    [out] long* progressValue,
                    [out] long* maxProgressValue);
    [id(0x60030001), helpstring("Stops the current conversion operation.")]
    HRESULT StopConversion();
    [id(0x60030002), propget, helpstring("Returns the name of the track currently being converted.")]
    HRESULT trackName([out, retval] BSTR* trackName);
    [id(0x60030003), propget, helpstring("Returns the current progress value for the track being converted.")]
    HRESULT progressValue([out, retval] long* progressValue);
    [id(0x60030004), propget, helpstring("Returns the maximum progress value for the track being converted.")]
    HRESULT maxProgressValue([out, retval] long* maxProgressValue);
};

[
  odl,
  uuid(53AE1704-491C-4289-94A0-958815675A3D),
  helpstring("IITLibraryPlaylist Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITLibraryPlaylist : IITPlaylist {
    [id(0x60040000), helpstring("Add the specified file path to the library.")]
    HRESULT AddFile(
                    [in] BSTR filePath,
                    [out, retval] IITOperationStatus** iStatus);
    [id(0x60040001), helpstring("Add the specified array of file paths to the library. filePaths can be of type VT_ARRAY|VT_VARIANT, where each entry is a VT_BSTR, or VT_ARRAY|VT_BSTR.  You can also pass a JScript Array object.")]
    HRESULT AddFiles(
                    [in] VARIANT* filePaths,
                    [out, retval] IITOperationStatus** iStatus);
    [id(0x60040002), helpstring("Add the specified streaming audio URL to the library.")]
    HRESULT AddURL(
                    [in] BSTR URL,
                    [out, retval] IITURLTrack** iURLTrack);
    [id(0x60040003), helpstring("Add the specified track to the library.  iTrackToAdd is a VARIANT of type VT_DISPATCH that points to an IITTrack.")]
    HRESULT AddTrack(
                    [in] VARIANT* iTrackToAdd,
                    [out, retval] IITTrack** iAddedTrack);
};

[
  odl,
  uuid(1116E3B5-29FD-4393-A7BD-454E5E327900),
  helpstring("IITURLTrack Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITURLTrack : IITTrack {
    [id(0x60040000), propget, helpstring("The URL of the stream represented by this track.")]
    HRESULT URL([out, retval] BSTR* URL);
    [id(0x60040000), propput, helpstring("The URL of the stream represented by this track.")]
    HRESULT URL([in] BSTR URL);
    [id(0x60040002), propget, helpstring("True if this is a podcast track.")]
    HRESULT Podcast([out, retval] VARIANT_BOOL* isPodcast);
    [id(0x60040003), helpstring("Update the podcast feed for this track.")]
    HRESULT UpdatePodcastFeed();
    [id(0x60040004), helpstring("Start downloading the podcast episode that corresponds to this track.")]
    HRESULT DownloadPodcastEpisode();
    [id(0x60040005), propget, helpstring("Category for the track.")]
    HRESULT Category([out, retval] BSTR* Category);
    [id(0x60040005), propput, helpstring("Category for the track.")]
    HRESULT Category([in] BSTR Category);
    [id(0x60040007), propget, helpstring("Description for the track.")]
    HRESULT Description([out, retval] BSTR* Description);
    [id(0x60040007), propput, helpstring("Description for the track.")]
    HRESULT Description([in] BSTR Description);
    [id(0x60040009), propget, helpstring("Long description for the track.")]
    HRESULT LongDescription([out, retval] BSTR* LongDescription);
    [id(0x60040009), propput, helpstring("Long description for the track.")]
    HRESULT LongDescription([in] BSTR LongDescription);
    [id(0x6004000b), helpstring("Reveal the track in the main browser window.")]
    HRESULT Reveal();
    [id(0x6004000c), propget, helpstring("The user or computed rating of the album that this track belongs to (0 to 100).")]
    HRESULT AlbumRating([out, retval] long* Rating);
    [id(0x6004000c), propput, helpstring("The user or computed rating of the album that this track belongs to (0 to 100).")]
    HRESULT AlbumRating([in] long Rating);
    [id(0x6004000e), propget, helpstring("The album rating kind.")]
    HRESULT AlbumRatingKind([out, retval] ITRatingKind* ratingKind);
    [id(0x6004000f), propget, helpstring("The track rating kind.")]
    HRESULT ratingKind([out, retval] ITRatingKind* ratingKind);
    [id(0x60040010), propget, helpstring("Returns a collection of playlists that contain the song that this track represents.")]
    HRESULT Playlists([out, retval] IITPlaylistCollection** iPlaylistCollection);
};

[
  odl,
  uuid(0A504DED-A0B5-465A-8A94-50E20D7DF692),
  helpstring("IITUserPlaylist Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITUserPlaylist : IITPlaylist {
    [id(0x60040000), helpstring("Add the specified file path to the user playlist.")]
    HRESULT AddFile(
                    [in] BSTR filePath,
                    [out, retval] IITOperationStatus** iStatus);
    [id(0x60040001), helpstring("Add the specified array of file paths to the user playlist. filePaths can be of type VT_ARRAY|VT_VARIANT, where each entry is a VT_BSTR, or VT_ARRAY|VT_BSTR.  You can also pass a JScript Array object.")]
    HRESULT AddFiles(
                    [in] VARIANT* filePaths,
                    [out, retval] IITOperationStatus** iStatus);
    [id(0x60040002), helpstring("Add the specified streaming audio URL to the user playlist.")]
    HRESULT AddURL(
                    [in] BSTR URL,
                    [out, retval] IITURLTrack** iURLTrack);
    [id(0x60040003), helpstring("Add the specified track to the user playlist.  iTrackToAdd is a VARIANT of type VT_DISPATCH that points to an IITTrack.")]
    HRESULT AddTrack(
                    [in] VARIANT* iTrackToAdd,
                    [out, retval] IITTrack** iAddedTrack);
    [id(0x60040004), propget, helpstring("True if the user playlist is being shared.")]
    HRESULT Shared([out, retval] VARIANT_BOOL* isShared);
    [id(0x60040004), propput, helpstring("True if the user playlist is being shared.")]
    HRESULT Shared([in] VARIANT_BOOL isShared);
    [id(0x60040006), propget, helpstring("True if this is a smart playlist.")]
    HRESULT Smart([out, retval] VARIANT_BOOL* isSmart);
    [id(0x60040007), propget, helpstring("The playlist special kind.")]
    HRESULT SpecialKind([out, retval] ITUserPlaylistSpecialKind* SpecialKind);
    [id(0x60040008), propget, helpstring("The parent of this playlist.")]
    HRESULT Parent([out, retval] IITUserPlaylist** iParentPlayList);
    [id(0x60040009), helpstring("Creates a new playlist in a folder playlist.")]
    HRESULT CreatePlaylist(
                    [in] BSTR playlistName,
                    [out, retval] IITPlaylist** iPlaylist);
    [id(0x6004000a), helpstring("Creates a new folder in a folder playlist.")]
    HRESULT CreateFolder(
                    [in] BSTR folderName,
                    [out, retval] IITPlaylist** iFolder);
    [id(0x60040008), propput, helpstring("The parent of this playlist.")]
    HRESULT Parent([in] VARIANT* iParentPlayList);
    [id(0x6004000c), helpstring("Reveal the user playlist in the main browser window.")]
    HRESULT Reveal();
};

[
  odl,
  uuid(340F3315-ED72-4C09-9ACF-21EB4BDF9931),
  helpstring("IITVisual Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITVisual : IDispatch {
    [id(0x60020000), propget, helpstring("The name of the the visual plug-in.")]
    HRESULT Name([out, retval] BSTR* Name);
};

[
  odl,
  uuid(88A4CCDD-114F-4043-B69B-84D4E6274957),
  helpstring("IITVisualCollection Interface"),
  dual,
  oleautomation
]
interface IITVisualCollection : IDispatch {
    [id(0x60020000), propget, helpstring("Returns the number of visual plug-ins in the collection.")]
    HRESULT Count([out, retval] long* Count);
    [id(00000000), propget, helpstring("Returns an IITVisual object corresponding to the given index (1-based).")]
    HRESULT Item(
                    [in] long Index,
                    [out, retval] IITVisual** iVisual);
    [id(0x60020002), propget, helpstring("Returns an IITVisual object with the specified name.")]
    HRESULT ItemByName(
                    [in] BSTR Name,
                    [out, retval] IITVisual** iVisual);
    [id(0xfffffffc), propget, restricted, helpstring("Returns an IEnumVARIANT object which can enumerate the collection.")]
    HRESULT _NewEnum([out, retval] IUnknown** iEnumerator);
};

[
  odl,
  uuid(370D7BE0-3A89-4A42-B902-C75FC138BE09),
  helpstring("IITWindow Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITWindow : IDispatch {
    [id(0x60020000), propget, helpstring("The title of the window.")]
    HRESULT Name([out, retval] BSTR* Name);
    [id(0x60020001), propget, helpstring("The window kind.")]
    HRESULT Kind([out, retval] ITWindowKind* Kind);
    [id(0x60020002), propget, helpstring("True if the window is visible. Note that the main browser window cannot be hidden.")]
    HRESULT Visible([out, retval] VARIANT_BOOL* isVisible);
    [id(0x60020002), propput, helpstring("True if the window is visible. Note that the main browser window cannot be hidden.")]
    HRESULT Visible([in] VARIANT_BOOL isVisible);
    [id(0x60020004), propget, helpstring("True if the window is resizable.")]
    HRESULT Resizable([out, retval] VARIANT_BOOL* isResizable);
    [id(0x60020005), propget, helpstring("True if the window is minimized.")]
    HRESULT Minimized([out, retval] VARIANT_BOOL* isMinimized);
    [id(0x60020005), propput, helpstring("True if the window is minimized.")]
    HRESULT Minimized([in] VARIANT_BOOL isMinimized);
    [id(0x60020007), propget, helpstring("True if the window is maximizable.")]
    HRESULT Maximizable([out, retval] VARIANT_BOOL* isMaximizable);
    [id(0x60020008), propget, helpstring("True if the window is maximized.")]
    HRESULT Maximized([out, retval] VARIANT_BOOL* isMaximized);
    [id(0x60020008), propput, helpstring("True if the window is maximized.")]
    HRESULT Maximized([in] VARIANT_BOOL isMaximized);
    [id(0x6002000a), propget, helpstring("True if the window is zoomable.")]
    HRESULT Zoomable([out, retval] VARIANT_BOOL* isZoomable);
    [id(0x6002000b), propget, helpstring("True if the window is zoomed.")]
    HRESULT Zoomed([out, retval] VARIANT_BOOL* isZoomed);
    [id(0x6002000b), propput, helpstring("True if the window is zoomed.")]
    HRESULT Zoomed([in] VARIANT_BOOL isZoomed);
    [id(0x6002000d), propget, helpstring("The screen coordinate of the top edge of the window.")]
    HRESULT Top([out, retval] long* Top);
    [id(0x6002000d), propput, helpstring("The screen coordinate of the top edge of the window.")]
    HRESULT Top([in] long Top);
    [id(0x6002000f), propget, helpstring("The screen coordinate of the left edge of the window.")]
    HRESULT Left([out, retval] long* Left);
    [id(0x6002000f), propput, helpstring("The screen coordinate of the left edge of the window.")]
    HRESULT Left([in] long Left);
    [id(0x60020011), propget, helpstring("The screen coordinate of the bottom edge of the window.")]
    HRESULT Bottom([out, retval] long* Bottom);
    [id(0x60020011), propput, helpstring("The screen coordinate of the bottom edge of the window.")]
    HRESULT Bottom([in] long Bottom);
    [id(0x60020013), propget, helpstring("The screen coordinate of the right edge of the window.")]
    HRESULT Right([out, retval] long* Right);
    [id(0x60020013), propput, helpstring("The screen coordinate of the right edge of the window.")]
    HRESULT Right([in] long Right);
    [id(0x60020015), propget, helpstring("The width of the window.")]
    HRESULT Width([out, retval] long* Width);
    [id(0x60020015), propput, helpstring("The width of the window.")]
    HRESULT Width([in] long Width);
    [id(0x60020017), propget, helpstring("The height of the window.")]
    HRESULT Height([out, retval] long* Height);
    [id(0x60020017), propput, helpstring("The height of the window.")]
    HRESULT Height([in] long Height);
};

[
  odl,
  uuid(C999F455-C4D5-4AA4-8277-F99753699974),
  helpstring("IITBrowserWindow Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITBrowserWindow : IITWindow {
    [id(0x60030000), propget, helpstring("True if window is in MiniPlayer mode.")]
    HRESULT MiniPlayer([out, retval] VARIANT_BOOL* isMiniPlayer);
    [id(0x60030000), propput, helpstring("True if window is in MiniPlayer mode.")]
    HRESULT MiniPlayer([in] VARIANT_BOOL isMiniPlayer);
    [id(0x60030002), propget, helpstring("Returns a collection containing the currently selected track or tracks.")]
    HRESULT SelectedTracks([out, retval] IITTrackCollection** iTrackCollection);
    [id(0x60030003), propget, helpstring("The currently selected playlist in the Source list.")]
    HRESULT SelectedPlaylist([out, retval] IITPlaylist** iPlaylist);
    [id(0x60030003), propput, helpstring("The currently selected playlist in the Source list.")]
    HRESULT SelectedPlaylist([in] VARIANT* iPlaylist);
};

[
  odl,
  uuid(3D8DE381-6C0E-481F-A865-E2385F59FA43),
  helpstring("IITWindowCollection Interface"),
  dual,
  oleautomation
]
interface IITWindowCollection : IDispatch {
    [id(0x60020000), propget, helpstring("Returns the number of windows in the collection.")]
    HRESULT Count([out, retval] long* Count);
    [id(00000000), propget, helpstring("Returns an IITWindow object corresponding to the given index (1-based).")]
    HRESULT Item(
                    [in] long Index,
                    [out, retval] IITWindow** iWindow);
    [id(0x60020002), propget, helpstring("Returns an IITWindow object with the specified name.")]
    HRESULT ItemByName(
                    [in] BSTR Name,
                    [out, retval] IITWindow** iWindow);
    [id(0xfffffffc), propget, restricted, helpstring("Returns an IEnumVARIANT object which can enumerate the collection.")]
    HRESULT _NewEnum([out, retval] IUnknown** iEnumerator);
};

[
  odl,
  uuid(9DD6680B-3EDC-40DB-A771-E6FE4832E34A),
  helpstring("IiTunes Interface"),
  hidden,
  dual,
  oleautomation
]
interface IiTunes : IDispatch {
    [id(0x60020000), helpstring("Reposition to the beginning of the current track or go to the previous track if already at start of current track.")]
    HRESULT BackTrack();
    [id(0x60020001), helpstring("Skip forward in a playing track.")]
    HRESULT FastForward();
    [id(0x60020002), helpstring("Advance to the next track in the current playlist.")]
    HRESULT NextTrack();
    [id(0x60020003), helpstring("Pause playback.")]
    HRESULT Pause();
    [id(0x60020004), helpstring("Play the currently targeted track.")]
    HRESULT Play();
    [id(0x60020005), helpstring("Play the specified file path, adding it to the library if not already present.")]
    HRESULT PlayFile([in] BSTR filePath);
    [id(0x60020006), helpstring("Toggle the playing/paused state of the current track.")]
    HRESULT PlayPause();
    [id(0x60020007), helpstring("Return to the previous track in the current playlist.")]
    HRESULT PreviousTrack();
    [id(0x60020008), helpstring("Disable fast forward/rewind and resume playback, if playing.")]
    HRESULT Resume();
    [id(0x60020009), helpstring("Skip backwards in a playing track.")]
    HRESULT Rewind();
    [id(0x6002000a), helpstring("Stop playback.")]
    HRESULT Stop();
    [id(0x6002000b), helpstring("Start converting the specified file path.")]
    HRESULT ConvertFile(
                    [in] BSTR filePath,
                    [out, retval] IITOperationStatus** iStatus);
    [id(0x6002000c), helpstring("Start converting the specified array of file paths. filePaths can be of type VT_ARRAY|VT_VARIANT, where each entry is a VT_BSTR, or VT_ARRAY|VT_BSTR.  You can also pass a JScript Array object.")]
    HRESULT ConvertFiles(
                    [in] VARIANT* filePaths,
                    [out, retval] IITOperationStatus** iStatus);
    [id(0x6002000d), helpstring("Start converting the specified track.  iTrackToConvert is a VARIANT of type VT_DISPATCH that points to an IITTrack.")]
    HRESULT ConvertTrack(
                    [in] VARIANT* iTrackToConvert,
                    [out, retval] IITOperationStatus** iStatus);
    [id(0x6002000e), helpstring("Start converting the specified tracks.  iTracksToConvert is a VARIANT of type VT_DISPATCH that points to an IITTrackCollection.")]
    HRESULT ConvertTracks(
                    [in] VARIANT* iTracksToConvert,
                    [out, retval] IITOperationStatus** iStatus);
    [id(0x6002000f), helpstring("Returns true if this version of the iTunes type library is compatible with the specified version.")]
    HRESULT CheckVersion(
                    [in] long majorVersion,
                    [in] long minorVersion,
                    [out, retval] VARIANT_BOOL* isCompatible);
    [id(0x60020010), helpstring("Returns an IITObject corresponding to the specified IDs.")]
    HRESULT GetITObjectByID(
                    [in] long sourceID,
                    [in] long playlistID,
                    [in] long trackID,
                    [in] long databaseID,
                    [out, retval] IITObject** iObject);
    [id(0x60020011), helpstring("Creates a new playlist in the main library.")]
    HRESULT CreatePlaylist(
                    [in] BSTR playlistName,
                    [out, retval] IITPlaylist** iPlaylist);
    [id(0x60020012), helpstring("Open the specified iTunes Store or streaming audio URL.")]
    HRESULT OpenURL([in] BSTR URL);
    [id(0x60020013), helpstring("Go to the iTunes Store home page.")]
    HRESULT GotoMusicStoreHomePage();
    [id(0x60020014), helpstring("Update the contents of the iPod.")]
    HRESULT UpdateIPod();
    [id(0x60020015)]
    HRESULT Authorize(
                    [in] long numElems,
                    [in] VARIANT* data,
                    [in] BSTR* names);
    [id(0x60020016), helpstring("Exits the iTunes application.")]
    HRESULT Quit();
    [id(0x60020017), propget, helpstring("Returns a collection of music sources (music library, CD, device, etc.).")]
    HRESULT Sources([out, retval] IITSourceCollection** iSourceCollection);
    [id(0x60020018), propget, helpstring("Returns a collection of encoders.")]
    HRESULT Encoders([out, retval] IITEncoderCollection** iEncoderCollection);
    [id(0x60020019), propget, helpstring("Returns a collection of EQ presets.")]
    HRESULT EQPresets([out, retval] IITEQPresetCollection** iEQPresetCollection);
    [id(0x6002001a), propget, helpstring("Returns a collection of visual plug-ins.")]
    HRESULT Visuals([out, retval] IITVisualCollection** iVisualCollection);
    [id(0x6002001b), propget, helpstring("Returns a collection of windows.")]
    HRESULT Windows([out, retval] IITWindowCollection** iWindowCollection);
    [id(0x6002001c), propget, helpstring("Returns the sound output volume (0 = minimum, 100 = maximum).")]
    HRESULT SoundVolume([out, retval] long* volume);
    [id(0x6002001c), propput, helpstring("Returns the sound output volume (0 = minimum, 100 = maximum).")]
    HRESULT SoundVolume([in] long volume);
    [id(0x6002001e), propget, helpstring("True if sound output is muted.")]
    HRESULT Mute([out, retval] VARIANT_BOOL* isMuted);
    [id(0x6002001e), propput, helpstring("True if sound output is muted.")]
    HRESULT Mute([in] VARIANT_BOOL isMuted);
    [id(0x60020020), propget, helpstring("Returns the current player state.")]
    HRESULT PlayerState([out, retval] ITPlayerState* PlayerState);
    [id(0x60020021), propget, helpstring("Returns the player's position within the currently playing track in seconds.")]
    HRESULT PlayerPosition([out, retval] long* playerPos);
    [id(0x60020021), propput, helpstring("Returns the player's position within the currently playing track in seconds.")]
    HRESULT PlayerPosition([in] long playerPos);
    [id(0x60020023), propget, helpstring("Returns the currently selected encoder (AAC, MP3, AIFF, WAV, etc.).")]
    HRESULT CurrentEncoder([out, retval] IITEncoder** iEncoder);
    [id(0x60020023), propput, helpstring("Returns the currently selected encoder (AAC, MP3, AIFF, WAV, etc.).")]
    HRESULT CurrentEncoder([in] IITEncoder* iEncoder);
    [id(0x60020025), propget, helpstring("True if visuals are currently being displayed.")]
    HRESULT VisualsEnabled([out, retval] VARIANT_BOOL* isEnabled);
    [id(0x60020025), propput, helpstring("True if visuals are currently being displayed.")]
    HRESULT VisualsEnabled([in] VARIANT_BOOL isEnabled);
    [id(0x60020027), propget, helpstring("True if the visuals are displayed using the entire screen.")]
    HRESULT FullScreenVisuals([out, retval] VARIANT_BOOL* isFullScreen);
    [id(0x60020027), propput, helpstring("True if the visuals are displayed using the entire screen.")]
    HRESULT FullScreenVisuals([in] VARIANT_BOOL isFullScreen);
    [id(0x60020029), propget, helpstring("Returns the size of the displayed visual.")]
    HRESULT VisualSize([out, retval] ITVisualSize* VisualSize);
    [id(0x60020029), propput, helpstring("Returns the size of the displayed visual.")]
    HRESULT VisualSize([in] ITVisualSize VisualSize);
    [id(0x6002002b), propget, helpstring("Returns the currently selected visual plug-in.")]
    HRESULT CurrentVisual([out, retval] IITVisual** iVisual);
    [id(0x6002002b), propput, helpstring("Returns the currently selected visual plug-in.")]
    HRESULT CurrentVisual([in] IITVisual* iVisual);
    [id(0x6002002d), propget, helpstring("True if the equalizer is enabled.")]
    HRESULT EQEnabled([out, retval] VARIANT_BOOL* isEnabled);
    [id(0x6002002d), propput, helpstring("True if the equalizer is enabled.")]
    HRESULT EQEnabled([in] VARIANT_BOOL isEnabled);
    [id(0x6002002f), propget, helpstring("Returns the currently selected EQ preset.")]
    HRESULT CurrentEQPreset([out, retval] IITEQPreset** iEQPreset);
    [id(0x6002002f), propput, helpstring("Returns the currently selected EQ preset.")]
    HRESULT CurrentEQPreset([in] IITEQPreset* iEQPreset);
    [id(0x60020031), propget, helpstring("The name of the current song in the playing stream (provided by streaming server).")]
    HRESULT CurrentStreamTitle([out, retval] BSTR* streamTitle);
    [id(0x60020032), propget, helpstring("The URL of the playing stream or streaming web site (provided by streaming server).")]
    HRESULT CurrentStreamURL([out, retval] BSTR* streamURL);
    [id(0x60020033), propget, helpstring("Returns the main iTunes browser window.")]
    HRESULT BrowserWindow([out, retval] IITBrowserWindow** iBrowserWindow);
    [id(0x60020034), propget, helpstring("Returns the EQ window.")]
    HRESULT EQWindow([out, retval] IITWindow** iEQWindow);
    [id(0x60020035), propget, helpstring("Returns the source that represents the main library.")]
    HRESULT LibrarySource([out, retval] IITSource** iLibrarySource);
    [id(0x60020036), propget, helpstring("Returns the main library playlist in the main library source.")]
    HRESULT LibraryPlaylist([out, retval] IITLibraryPlaylist** iLibraryPlaylist);
    [id(0x60020037), propget, helpstring("Returns the currently targeted track.")]
    HRESULT CurrentTrack([out, retval] IITTrack** iTrack);
    [id(0x60020038), propget, helpstring("Returns the playlist containing the currently targeted track.")]
    HRESULT CurrentPlaylist([out, retval] IITPlaylist** iPlaylist);
    [id(0x60020039), propget, helpstring("Returns a collection containing the currently selected track or tracks.")]
    HRESULT SelectedTracks([out, retval] IITTrackCollection** iTrackCollection);
    [id(0x6002003a), propget, helpstring("Returns the version of the iTunes application.")]
    HRESULT Version([out, retval] BSTR* Version);
    [id(0x6002003b)]
    HRESULT SetOptions([in] long options);
    [id(0x6002003c), helpstring("Start converting the specified file path.")]
    HRESULT ConvertFile2(
                    [in] BSTR filePath,
                    [out, retval] IITConvertOperationStatus** iStatus);
    [id(0x6002003d), helpstring("Start converting the specified array of file paths. filePaths can be of type VT_ARRAY|VT_VARIANT, where each entry is a VT_BSTR, or VT_ARRAY|VT_BSTR.  You can also pass a JScript Array object.")]
    HRESULT ConvertFiles2(
                    [in] VARIANT* filePaths,
                    [out, retval] IITConvertOperationStatus** iStatus);
    [id(0x6002003e), helpstring("Start converting the specified track.  iTrackToConvert is a VARIANT of type VT_DISPATCH that points to an IITTrack.")]
    HRESULT ConvertTrack2(
                    [in] VARIANT* iTrackToConvert,
                    [out, retval] IITConvertOperationStatus** iStatus);
    [id(0x6002003f), helpstring("Start converting the specified tracks.  iTracksToConvert is a VARIANT of type VT_DISPATCH that points to an IITTrackCollection.")]
    HRESULT ConvertTracks2(
                    [in] VARIANT* iTracksToConvert,
                    [out, retval] IITConvertOperationStatus** iStatus);
    [id(0x60020040), propget, helpstring("True if iTunes will process APPCOMMAND Windows messages.")]
    HRESULT AppCommandMessageProcessingEnabled([out, retval] VARIANT_BOOL* isEnabled);
    [id(0x60020040), propput, helpstring("True if iTunes will process APPCOMMAND Windows messages.")]
    HRESULT AppCommandMessageProcessingEnabled([in] VARIANT_BOOL isEnabled);
    [id(0x60020042), propget, helpstring("True if iTunes will force itself to be the foreground application when it displays a dialog.")]
    HRESULT ForceToForegroundOnDialog([out, retval] VARIANT_BOOL* ForceToForegroundOnDialog);
    [id(0x60020042), propput, helpstring("True if iTunes will force itself to be the foreground application when it displays a dialog.")]
    HRESULT ForceToForegroundOnDialog([in] VARIANT_BOOL ForceToForegroundOnDialog);
    [id(0x60020044), helpstring("Create a new EQ preset.")]
    HRESULT CreateEQPreset(
                    [in] BSTR eqPresetName,
                    [out, retval] IITEQPreset** iEQPreset);
    [id(0x60020045), helpstring("Creates a new playlist in an existing source.")]
    HRESULT CreatePlaylistInSource(
                    [in] BSTR playlistName,
                    [in] VARIANT* iSource,
                    [out, retval] IITPlaylist** iPlaylist);
    [id(0x60020046), helpstring("Retrieves the current state of the player buttons.")]
    HRESULT GetPlayerButtonsState(
                    [out] VARIANT_BOOL* previousEnabled,
                    [out] ITPlayButtonState* playPauseStopState,
                    [out] VARIANT_BOOL* nextEnabled);
    [id(0x60020047), helpstring("Simulate click on a player control button.")]
    HRESULT PlayerButtonClicked(
                    [in] ITPlayerButton playerButton,
                    [in] long playerButtonModifierKeys);
    [id(0x60020048), propget, helpstring("True if the Shuffle property is writable for the specified playlist.")]
    HRESULT CanSetShuffle(
                    [in] VARIANT* iPlaylist,
                    [out, retval] VARIANT_BOOL* CanSetShuffle);
    [id(0x60020049), propget, helpstring("True if the SongRepeat property is writable for the specified playlist.")]
    HRESULT CanSetSongRepeat(
                    [in] VARIANT* iPlaylist,
                    [out, retval] VARIANT_BOOL* CanSetSongRepeat);
    [id(0x6002004a), propget, helpstring("Returns an IITConvertOperationStatus object if there is currently a conversion in progress.")]
    HRESULT ConvertOperationStatus([out, retval] IITConvertOperationStatus** iStatus);
    [id(0x6002004b), helpstring("Subscribe to the specified podcast feed URL.")]
    HRESULT SubscribeToPodcast([in] BSTR URL);
    [id(0x6002004c), helpstring("Update all podcast feeds.")]
    HRESULT UpdatePodcastFeeds();
    [id(0x6002004d), helpstring("Creates a new folder in the main library.")]
    HRESULT CreateFolder(
                    [in] BSTR folderName,
                    [out, retval] IITPlaylist** iFolder);
    [id(0x6002004e), helpstring("Creates a new folder in an existing source.")]
    HRESULT CreateFolderInSource(
                    [in] BSTR folderName,
                    [in] VARIANT* iSource,
                    [out, retval] IITPlaylist** iFolder);
    [id(0x6002004f), propget, helpstring("True if the sound volume control is enabled.")]
    HRESULT SoundVolumeControlEnabled([out, retval] VARIANT_BOOL* isEnabled);
    [id(0x60020050), propget, helpstring("The full path to the current iTunes library XML file.")]
    HRESULT LibraryXMLPath([out, retval] BSTR* filePath);
    [id(0x60020051), propget, helpstring("Returns the high 32 bits of the persistent ID of the specified IITObject.")]
    HRESULT ITObjectPersistentIDHigh(
                    [in] VARIANT* iObject,
                    [out, retval] long* highID);
    [id(0x60020052), propget, helpstring("Returns the low 32 bits of the persistent ID of the specified IITObject.")]
    HRESULT ITObjectPersistentIDLow(
                    [in] VARIANT* iObject,
                    [out, retval] long* lowID);
    [id(0x60020053), helpstring("Returns the high and low 32 bits of the persistent ID of the specified IITObject.")]
    HRESULT GetITObjectPersistentIDs(
                    [in] VARIANT* iObject,
                    [out] long* highID,
                    [out] long* lowID);
    [id(0x60020054), propget, helpstring("Returns the player's position within the currently playing track in milliseconds.")]
    HRESULT PlayerPositionMS([out, retval] long* playerPos);
    [id(0x60020054), propput, helpstring("Returns the player's position within the currently playing track in milliseconds.")]
    HRESULT PlayerPositionMS([in] long playerPos);
};

[
  odl,
  uuid(CF496DF3-0FED-4D7D-9BD8-529B6E8A082E),
  helpstring("IITAudioCDPlaylist Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITAudioCDPlaylist : IITPlaylist {
    [id(0x60040000), propget, helpstring("The artist of the CD.")]
    HRESULT Artist([out, retval] BSTR* Artist);
    [id(0x60040001), propget, helpstring("True if this CD is a compilation album.")]
    HRESULT Compilation([out, retval] VARIANT_BOOL* isCompiliation);
    [id(0x60040002), propget, helpstring("The composer of the CD.")]
    HRESULT Composer([out, retval] BSTR* Composer);
    [id(0x60040003), propget, helpstring("The total number of discs in this CD's album.")]
    HRESULT DiscCount([out, retval] long* DiscCount);
    [id(0x60040004), propget, helpstring("The index of the CD disc in the source album.")]
    HRESULT DiscNumber([out, retval] long* DiscNumber);
    [id(0x60040005), propget, helpstring("The genre of the CD.")]
    HRESULT Genre([out, retval] BSTR* Genre);
    [id(0x60040006), propget, helpstring("The year the album was recorded/released.")]
    HRESULT Year([out, retval] long* Year);
    [id(0x60040007), helpstring("Reveal the CD playlist in the main browser window.")]
    HRESULT Reveal();
};

[
  odl,
  uuid(CF4D8ACE-1720-4FB9-B0AE-9877249E89B0),
  helpstring("IITIPodSource Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITIPodSource : IITSource {
    [id(0x60040000), helpstring("Update the contents of the iPod.")]
    HRESULT UpdateIPod();
    [id(0x60040001), helpstring("Eject the iPod.")]
    HRESULT EjectIPod();
    [id(0x60040002), propget, helpstring("The iPod software version.")]
    HRESULT SoftwareVersion([out, retval] BSTR* SoftwareVersion);
};

[
  odl,
  uuid(00D7FE99-7868-4CC7-AD9E-ACFD70D09566),
  helpstring("IITFileOrCDTrack Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITFileOrCDTrack : IITTrack {
    [id(0x60040000), propget, helpstring("The full path to the file represented by this track.")]
    HRESULT Location([out, retval] BSTR* Location);
    [id(0x60040001), helpstring("Update this track's information with the information stored in its file.")]
    HRESULT UpdateInfoFromFile();
    [id(0x60040002), propget, helpstring("True if this is a podcast track.")]
    HRESULT Podcast([out, retval] VARIANT_BOOL* isPodcast);
    [id(0x60040003), helpstring("Update the podcast feed for this track.")]
    HRESULT UpdatePodcastFeed();
    [id(0x60040004), propget, helpstring("True if playback position is remembered.")]
    HRESULT RememberBookmark([out, retval] VARIANT_BOOL* RememberBookmark);
    [id(0x60040004), propput, helpstring("True if playback position is remembered.")]
    HRESULT RememberBookmark([in] VARIANT_BOOL RememberBookmark);
    [id(0x60040006), propget, helpstring("True if track is skipped when shuffling.")]
    HRESULT ExcludeFromShuffle([out, retval] VARIANT_BOOL* ExcludeFromShuffle);
    [id(0x60040006), propput, helpstring("True if track is skipped when shuffling.")]
    HRESULT ExcludeFromShuffle([in] VARIANT_BOOL ExcludeFromShuffle);
    [id(0x60040008), propget, helpstring("Lyrics for the track.")]
    HRESULT Lyrics([out, retval] BSTR* Lyrics);
    [id(0x60040008), propput, helpstring("Lyrics for the track.")]
    HRESULT Lyrics([in] BSTR Lyrics);
    [id(0x6004000a), propget, helpstring("Category for the track.")]
    HRESULT Category([out, retval] BSTR* Category);
    [id(0x6004000a), propput, helpstring("Category for the track.")]
    HRESULT Category([in] BSTR Category);
    [id(0x6004000c), propget, helpstring("Description for the track.")]
    HRESULT Description([out, retval] BSTR* Description);
    [id(0x6004000c), propput, helpstring("Description for the track.")]
    HRESULT Description([in] BSTR Description);
    [id(0x6004000e), propget, helpstring("Long description for the track.")]
    HRESULT LongDescription([out, retval] BSTR* LongDescription);
    [id(0x6004000e), propput, helpstring("Long description for the track.")]
    HRESULT LongDescription([in] BSTR LongDescription);
    [id(0x60040010), propget, helpstring("The bookmark time of the track (in seconds).")]
    HRESULT BookmarkTime([out, retval] long* BookmarkTime);
    [id(0x60040010), propput, helpstring("The bookmark time of the track (in seconds).")]
    HRESULT BookmarkTime([in] long BookmarkTime);
    [id(0x60040012), propget, helpstring("The video track kind.")]
    HRESULT VideoKind([out, retval] ITVideoKind* VideoKind);
    [id(0x60040012), propput, helpstring("The video track kind.")]
    HRESULT VideoKind([in] ITVideoKind VideoKind);
    [id(0x60040014), propget, helpstring("The number of times the track has been skipped.")]
    HRESULT SkippedCount([out, retval] long* SkippedCount);
    [id(0x60040014), propput, helpstring("The number of times the track has been skipped.")]
    HRESULT SkippedCount([in] long SkippedCount);
    [id(0x60040016), propget, helpstring("The date and time the track was last skipped.  A value of zero means no skipped date.")]
    HRESULT SkippedDate([out, retval] DATE* SkippedDate);
    [id(0x60040016), propput, helpstring("The date and time the track was last skipped.  A value of zero means no skipped date.")]
    HRESULT SkippedDate([in] DATE SkippedDate);
    [id(0x60040018), propget, helpstring("True if track is part of a gapless album.")]
    HRESULT PartOfGaplessAlbum([out, retval] VARIANT_BOOL* PartOfGaplessAlbum);
    [id(0x60040018), propput, helpstring("True if track is part of a gapless album.")]
    HRESULT PartOfGaplessAlbum([in] VARIANT_BOOL PartOfGaplessAlbum);
    [id(0x6004001a), propget, helpstring("The album artist of the track.")]
    HRESULT AlbumArtist([out, retval] BSTR* AlbumArtist);
    [id(0x6004001a), propput, helpstring("The album artist of the track.")]
    HRESULT AlbumArtist([in] BSTR AlbumArtist);
    [id(0x6004001c), propget, helpstring("The show name of the track.")]
    HRESULT Show([out, retval] BSTR* showName);
    [id(0x6004001c), propput, helpstring("The show name of the track.")]
    HRESULT Show([in] BSTR showName);
    [id(0x6004001e), propget, helpstring("The season number of the track.")]
    HRESULT SeasonNumber([out, retval] long* SeasonNumber);
    [id(0x6004001e), propput, helpstring("The season number of the track.")]
    HRESULT SeasonNumber([in] long SeasonNumber);
    [id(0x60040020), propget, helpstring("The episode ID of the track.")]
    HRESULT EpisodeID([out, retval] BSTR* EpisodeID);
    [id(0x60040020), propput, helpstring("The episode ID of the track.")]
    HRESULT EpisodeID([in] BSTR EpisodeID);
    [id(0x60040022), propget, helpstring("The episode number of the track.")]
    HRESULT EpisodeNumber([out, retval] long* EpisodeNumber);
    [id(0x60040022), propput, helpstring("The episode number of the track.")]
    HRESULT EpisodeNumber([in] long EpisodeNumber);
    [id(0x60040024), propget, helpstring("The high 32-bits of the size of the track (in bytes).")]
    HRESULT Size64High([out, retval] long* sizeHigh);
    [id(0x60040025), propget, helpstring("The low 32-bits of the size of the track (in bytes).")]
    HRESULT Size64Low([out, retval] long* sizeLow);
    [id(0x60040026), propget, helpstring("True if track has not been played.")]
    HRESULT Unplayed([out, retval] VARIANT_BOOL* isUnplayed);
    [id(0x60040026), propput, helpstring("True if track has not been played.")]
    HRESULT Unplayed([in] VARIANT_BOOL isUnplayed);
    [id(0x60040028), propget, helpstring("The album used for sorting.")]
    HRESULT SortAlbum([out, retval] BSTR* Album);
    [id(0x60040028), propput, helpstring("The album used for sorting.")]
    HRESULT SortAlbum([in] BSTR Album);
    [id(0x6004002a), propget, helpstring("The album artist used for sorting.")]
    HRESULT SortAlbumArtist([out, retval] BSTR* AlbumArtist);
    [id(0x6004002a), propput, helpstring("The album artist used for sorting.")]
    HRESULT SortAlbumArtist([in] BSTR AlbumArtist);
    [id(0x6004002c), propget, helpstring("The artist used for sorting.")]
    HRESULT SortArtist([out, retval] BSTR* Artist);
    [id(0x6004002c), propput, helpstring("The artist used for sorting.")]
    HRESULT SortArtist([in] BSTR Artist);
    [id(0x6004002e), propget, helpstring("The composer used for sorting.")]
    HRESULT SortComposer([out, retval] BSTR* Composer);
    [id(0x6004002e), propput, helpstring("The composer used for sorting.")]
    HRESULT SortComposer([in] BSTR Composer);
    [id(0x60040030), propget, helpstring("The track name used for sorting.")]
    HRESULT SortName([out, retval] BSTR* Name);
    [id(0x60040030), propput, helpstring("The track name used for sorting.")]
    HRESULT SortName([in] BSTR Name);
    [id(0x60040032), propget, helpstring("The show name used for sorting.")]
    HRESULT SortShow([out, retval] BSTR* showName);
    [id(0x60040032), propput, helpstring("The show name used for sorting.")]
    HRESULT SortShow([in] BSTR showName);
    [id(0x60040034), helpstring("Reveal the track in the main browser window.")]
    HRESULT Reveal();
    [id(0x60040035), propget, helpstring("The user or computed rating of the album that this track belongs to (0 to 100).")]
    HRESULT AlbumRating([out, retval] long* Rating);
    [id(0x60040035), propput, helpstring("The user or computed rating of the album that this track belongs to (0 to 100).")]
    HRESULT AlbumRating([in] long Rating);
    [id(0x60040037), propget, helpstring("The album rating kind.")]
    HRESULT AlbumRatingKind([out, retval] ITRatingKind* ratingKind);
    [id(0x60040038), propget, helpstring("The track rating kind.")]
    HRESULT ratingKind([out, retval] ITRatingKind* ratingKind);
    [id(0x60040039), propget, helpstring("Returns a collection of playlists that contain the song that this track represents.")]
    HRESULT Playlists([out, retval] IITPlaylistCollection** iPlaylistCollection);
    [id(0x60040000), propput, helpstring("The full path to the file represented by this track.")]
    HRESULT Location([in] BSTR Location);
    [id(0x6004003b), propget, helpstring("The release date of the track.  A value of zero means no release date.")]
    HRESULT ReleaseDate([out, retval] DATE* ReleaseDate);
};

[
  odl,
  uuid(349CBB45-2E5A-4822-8E4A-A75555A186F7),
  helpstring("IITPlaylistWindow Interface"),
  hidden,
  dual,
  oleautomation
]
interface IITPlaylistWindow : IITWindow {
    [id(0x60030000), propget, helpstring("Returns a collection containing the currently selected track or tracks.")]
    HRESULT SelectedTracks([out, retval] IITTrackCollection** iTrackCollection);
    [id(0x60030001), propget, helpstring("The playlist displayed in the window.")]
    HRESULT Playlist([out, retval] IITPlaylist** iPlaylist);
};