http://wiki.winamp.com/api.php?action=feedcontributions&user=Hydrargyrum&feedformat=atomWinamp Developer Wiki - User contributions [en]2024-03-28T18:46:20ZUser contributionsMediaWiki 1.22.3http://wiki.winamp.com/wiki/APE_PluginsAPE Plugins2009-06-18T18:55:38Z<p>Hydrargyrum: rfd</p>
<hr />
<div>{{Deleteme}}<br />
[[Category:Requests for Deletion]]</div>Hydrargyrumhttp://wiki.winamp.com/wiki/Template_talk:DeletemeTemplate talk:Deleteme2009-06-18T18:46:59Z<p>Hydrargyrum: comment correction</p>
<hr />
<div>Sorry, I tried to set up all of the templates for speedy deletion as they exist on wikipedia, but something messed up :( I'm not sure what to do. &mdash;[[User:Culix|Culix]] [[User_talk:Culix|(Talk:Culix)]] 20:46, 15 June 2009 (UTC) <br />
<br />
:I created a category, '''<nowiki>[[Category:Requests for Deletion]]</nowiki>''', a few months ago, and I've been adding it to spam pages or replacing spam page contents with just the RfD wikilink. I don't know if anyone at Winamp or AOL is paying attention, though. Perhaps if we combine '''<nowiki>{{Deleteme}}</nowiki>''' and <nowiki>[[Category:Requests for Deletion]]</nowiki> on every spam page we encounter, someone will eventually take note and write a bot script to delete the pages.<br>One thing that I've seen change recently, a spam filter has been added to the Winamp Developer Wiki to prevent new pages being uploaded that mask out the edit tabs, a trick that the spammers have learned to make it difficult to blank the page contents. There is a way around it, though. In your browser's location window, replace everything up to the article name with '''<nowiki>http://dev.winamp.com/w/index.php?title=</nowiki>''' and everything after the article name with '''<nowiki>&action=edit</nowiki>''' to open the article for editing in the normal fashion. You can then blank the article and/or tag it with the aforementioned template and category tag for later action by an as yet unidentified admin. On the other hand, since the spammers are using a specially-crafted HTML <nowiki><div></nowiki> tag to create the blanking effect, and the tag appears to be the same for every one of the spam pages, it may be better to leave the stuff alone and let some future, as yet unwritten bot script seek and destroy the offending pages based on content. (Since the Wiki's anti-spam measures are now looking for certain text used in the <nowiki><div></nowiki> tag, it isn't possible to save the edited page with the "fingerprint" that a bot might need to identify it as spam.) &mdash;[[User:Hydrargyrum|Hydrargyrum]]<sup>[[User_talk:Hydrargyrum|T]] [[Special:Emailuser/Hydrargyrum|@]]</sup> 18:29, 18 June 2009 (UTC)</div>Hydrargyrumhttp://wiki.winamp.com/wiki/User_talk:CulixUser talk:Culix2009-06-18T18:43:41Z<p>Hydrargyrum: See comments at Template_talk:Deleteme</p>
<hr />
<div>See my comments at [[Template_talk:Deleteme]]. I don't visit this Wiki very often, so if you leave a reply on my talk page, it may be a while before I see it. &mdash;[[User:Hydrargyrum|Hydrargyrum]]<sup>[[User_talk:Hydrargyrum|T]] [[Special:Emailuser/Hydrargyrum|@]]</sup> 18:43, 18 June 2009 (UTC)</div>Hydrargyrumhttp://wiki.winamp.com/wiki/Template_talk:DeletemeTemplate talk:Deleteme2009-06-18T18:41:38Z<p>Hydrargyrum: grammar</p>
<hr />
<div>Sorry, I tried to set up all of the templates for speedy deletion as they exist on wikipedia, but something messed up :( I'm not sure what to do. &mdash;[[User:Culix|Culix]] [[User_talk:Culix|(Talk:Culix)]] 20:46, 15 June 2009 (UTC) <br />
<br />
:I created a category, '''<nowiki>[[Category:Requests for Deletion]]</nowiki>''', a few months ago, and I've been adding it to spam pages or replacing spam page contents with just the RfD wikilink. I don't know if anyone at Winamp or AOL is paying attention, though. Perhaps if we combine '''<nowiki>{{Deleteme}}</nowiki>''' and <nowiki>[[Category:Requests for Deletion]]</nowiki> on every spam page we encounter, someone will eventually take note and write a bot script to delete the pages.<br>One thing that I've seen change recently, a spam filter has been added to the Winamp Developer Wiki to prevent new pages being uploaded that mask out the edit tabs, a trick that the spammers have learned to make it difficult to blank the page contents. There is a way around it, though. In your browser's location window, replace everything up to the article name with '''<nowiki>http://dev.winamp.com/w/index.php?title=</nowiki>''' and everything after the article name with '''<nowiki>&action=edit</nowiki>''' to open the article for editing in the normal fashion. You can then blank the article and/or tag it with the aforementioned template and category tag for later action by an as yet unidentified admin. On the other hand, since the spammers are using a specially-crafted HTML <nowiki><div></nowiki> tag to create the blanking effect, and the tag appears to be the same for every one of the spam pages, it may be better to leave the stuff alone, add the <nowiki>{{Deleteme}}</nowiki> and <nowiki>[[Category:Requests for Deletion]]</nowiki> tags at the bottom and let some future, as yet unwritten bot script seek and destroy the offending pages based on content. &mdash;[[User:Hydrargyrum|Hydrargyrum]]<sup>[[User_talk:Hydrargyrum|T]] [[Special:Emailuser/Hydrargyrum|@]]</sup> 18:29, 18 June 2009 (UTC)</div>Hydrargyrumhttp://wiki.winamp.com/wiki/Template_talk:DeletemeTemplate talk:Deleteme2009-06-18T18:40:31Z<p>Hydrargyrum: tagged unsigned comment by Culix; additional comment</p>
<hr />
<div>Sorry, I tried to set up all of the templates for speedy deletion as they exist on wikipedia, but something messed up :( I'm not sure what to do. &mdash;[[User:Culix|Culix]] [[User_talk:Culix|(Talk:Culix)]] 20:46, 15 June 2009 (UTC) <br />
<br />
:I created a category, '''<nowiki>[[Category:Requests for Deletion]]</nowiki>''', a few months ago, and I've been adding it to spam pages or replacing spam page contents with just the RfD wikilink. I don't know if anyone at Winamp or AOL is paying attention, though. Perhaps if we combine '''<nowiki>{{Deleteme}}</nowiki>''' and <nowiki>[[Category:Requests for Deletion]]</nowiki> on every spam page we encounter, someone will eventually take note and write a bot script to delete the pages.<br>One thing that I've seen change recently, a spam filter has been added to the Winamp Developer Wiki to prevent new pages being uploaded that mask out the edit tabs, a trick that the spammers have learned to make it difficult to blank the page contents. There is a way around it, though. In your browser's location window, replace everything up to the article name with '''<nowiki>http://dev.winamp.com/w/index.php?title=</nowiki>''' and everything after the article name with '''<nowiki>&action=edit</nowiki>''' to open the article for editing in the normal fashion. You can then blank the article and/or tag it with the aforementioned template and category tag for later action by as yet unidentified admin. On the other hand, since the spammers are using a specially-crafted HTML <nowiki><div></nowiki> tag to create the blanking effect, and the tag appears to be the same for every one of the spam pages, it may be better to leave the stuff alone, add the <nowiki>{{Deleteme}}</nowiki> and <nowiki>[[Category:Requests for Deletion]]</nowiki> tags at the bottom and let some future, as yet unwritten bot script seek and destroy the offending pages based on content. &mdash;[[User:Hydrargyrum|Hydrargyrum]]<sup>[[User_talk:Hydrargyrum|T]] [[Special:Emailuser/Hydrargyrum|@]]</sup> 18:29, 18 June 2009 (UTC)</div>Hydrargyrumhttp://wiki.winamp.com/wiki/Template_talk:DeletemeTemplate talk:Deleteme2009-06-18T18:29:02Z<p>Hydrargyrum: suggestions for handling spammers</p>
<hr />
<div>Sorry, I tried to set up all of the templates for speedy deletion as they exist on wikipedia, but something messed up :( I'm not sure what to do.<br />
<br />
:I created a category, '''<nowiki>[[Category:Requests for Deletion]]</nowiki>''', a few months ago, and I've been adding it to spam pages or replacing spam page contents with just the RfD wikilink. I don't know if anyone at Winamp or AOL is paying attention, though. Perhaps if we combine '''<nowiki>{{Deleteme}}</nowiki>''' and <nowiki>[[Category:Requests for Deletion]]</nowiki> on every spam page we encounter, someone will eventually take note and write a bot script to delete the pages.<br>One thing that I've seen change recently, a spam filter has been added to the Wiki to prevent new pages being uploaded that mask out the edit tabs, a trick that the spammers have learned to make it difficult to blank the page contents. There is a way around it, though. In your browser's location window, replace everything up to the article name with '''<nowiki>http://dev.winamp.com/w/index.php?title=</nowiki>''' and everything after the article name with '''<nowiki>&action=edit</nowiki>''' to open the article for editing in the normal fashion. You can then blank the article and/or tag it with the aforementioned template and category tag for later action by as yet unidentified admin. &mdash;[[User:Hydrargyrum|Hydrargyrum]]<sup>[[User_talk:Hydrargyrum|T]] [[Special:Emailuser/Hydrargyrum|@]]</sup> 18:29, 18 June 2009 (UTC)</div>Hydrargyrumhttp://wiki.winamp.com/wiki/Winamp_Orlger_-_OverviewWinamp Orlger - Overview2009-06-18T18:04:41Z<p>Hydrargyrum: rfd (spam)</p>
<hr />
<div>Placeholder<br />
<br />
[[Category:Requests for Deletion]]</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Exif-usercommentMediaWiki talk:Exif-usercomment2009-03-03T01:16:20Z<p>Hydrargyrum: rvv (linkspam)</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Filehist-commentMediaWiki talk:Filehist-comment2009-03-03T01:14:49Z<p>Hydrargyrum: rvv (linkspam)</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/User_talk:HydrargyrumUser talk:Hydrargyrum2009-03-03T00:23:09Z<p>Hydrargyrum: Undo revision 3487 by the rather brainless Spam cleanup script (Talk)</p>
<hr />
<div><!-- {{userpage}} --><br />
<blockquote>This is a Winamp Developer Wiki user page.</blockquote><br />
<br />
<blockquote>This is not a Winamp Developer Wiki article. If you find this page on any site other than Winamp Developer Wiki, you are viewing a mirror site. Be aware that the page may be outdated and that the user to whom this page belongs may have no personal affiliation with any site other than Winamp Developer Wiki itself. The original page is located at [http://dev.winamp.com/wiki/User_talk:Hydrargyrum http://dev.winamp.com/wiki/User_talk:Hydrargyrum].</blockquote><br />
<br />
<blockquote><br />
<b>Please post new comments at the bottom of the page to avoid confusion, and make headings using <u>two</u> equal signs (<nowiki>==</nowiki>). I will try to respond soon as possible on <u>your</u> talk page. Thank you!</b><br />
</blockquote><br />
<br />
----</div>Hydrargyrumhttp://wiki.winamp.com/wiki/Talk:Main_PageTalk:Main Page2009-02-25T18:22:47Z<p>Hydrargyrum: Undo revision 3372 by 83.233.30.77 (Talk)</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Whatlinkshere-linksMediaWiki talk:Whatlinkshere-links2009-02-25T18:20:58Z<p>Hydrargyrum: blanked page (linkspam, nonsense)</p>
<hr />
<div></div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Exif-usercommentMediaWiki talk:Exif-usercomment2009-02-25T18:20:10Z<p>Hydrargyrum: undo vandalism</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Filehist-commentMediaWiki talk:Filehist-comment2009-02-25T18:19:14Z<p>Hydrargyrum: rvv</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Exif-usercommentMediaWiki talk:Exif-usercomment2009-02-25T11:08:08Z<p>Hydrargyrum: undo vandalism</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Exif-usercommentMediaWiki talk:Exif-usercomment2009-02-25T09:05:49Z<p>Hydrargyrum: Undo revision 3311 by 78.26.179.68 (Talk)</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Exif-usercommentMediaWiki talk:Exif-usercomment2009-02-25T06:50:12Z<p>Hydrargyrum: Undo revision 3307 by 72.218.60.55 (Talk)</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Rc_categories_anyMediaWiki talk:Rc categories any2009-02-25T06:18:18Z<p>Hydrargyrum: blanked page (linkspam & nonsense)</p>
<hr />
<div></div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Rc-change-sizeMediaWiki talk:Rc-change-size2009-02-25T06:17:30Z<p>Hydrargyrum: blanked page (linkspam & nonsense)</p>
<hr />
<div></div>Hydrargyrumhttp://wiki.winamp.com/wiki/Talk:Main_PageTalk:Main Page2009-02-25T06:17:04Z<p>Hydrargyrum: rvv (linkspam)</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Rc_categoriesMediaWiki talk:Rc categories2009-02-25T06:16:12Z<p>Hydrargyrum: blanked page (linkspam & nonsense)</p>
<hr />
<div></div>Hydrargyrumhttp://wiki.winamp.com/wiki/User:GistbaneUser:Gistbane2009-02-25T06:13:01Z<p>Hydrargyrum: blanked page (linkspam & nonsense)</p>
<hr />
<div></div>Hydrargyrumhttp://wiki.winamp.com/wiki/Complete_JavaScript_API_technology_frameworkComplete JavaScript API technology framework2009-02-25T06:09:15Z<p>Hydrargyrum: rvv to last edit by SMonty</p>
<hr />
<div>'''Breadcrumb''' -- [[Main_Page|Wiki Main]] : [[Skin Developer]] : [[Visual Developer]] : [[Plug-in Developer]] : [[Online Service Developer]] : [[Articles|Articles Page]] : [[Developers FAQ|FAQ]] : [[Main_Page#Glossary_of_Terms|Glossary]]<br />
[[Category:Winamp]]<br />
<br />
==Overview==<br />
The purpose of the Winamp Online Service API is to allow Winamp Online Services to interact with the Winamp client in order to provide service developers with a way to create custom experiences for their users based on the power of Winamp. The overall idea is to include exceptional web sites within Winamp Online Services.<br />
<br />
The Winamp Online Service API is made up of methods that can be called from scripts within web pages rendered by the Winamp client. The API can be invoked using any scripting language supported by the Microsoft Internet Explorer web browser (5.5 and above). For simplicity, examples in this document will use JavaScript.<br />
<br />
==Setup==<br />
The Winamp Online Services API is designed to allow web pages, hosted (displayed) within the embedded browser of the Winamp client, to access the functionality of the client. There are several steps necessary to allow this to take place.<br />
<br />
#Make sure you have the latest version of the Winamp client that supports online services.<br />
#Make sure you have the latest version of the ml_webdev plugin (ml_webdev.dll). The presence of this plugin will create a "Web Dev Test Platform" within the Medial Library pane.<br />
#In order to change the starting web page for the online service, start the Winamp client and configure the plugin. <br />
##Select Options->Preferences->Plug-ins->Media Library. <br />
##Select "API 2 Test Platform" and press "Configure selected plugin". <br />
##On the Web Dev Preferences dialog, set the URL field to the URL of the initial web page for the online service. For example, <nowiki>file://c:\myonlineservice\webdev.html</nowiki><br />
#Click on "Web Dev Test Platform" in the Media Library. You may have to right click and choose refresh to see the new web page.<br />
<br />
You should now see the initial page of your online service in the Winamp embedded browser.<br />
<br />
==window.external==<br />
The Winamp JavaScript API can be accessed through the window.external object in the Document Object Model (DOM) exposed by the IE browser control embedded within the Winamp client. The API methods can only be accessed thru the Winamp client and are not available if the web page is displayed outside of the client.<br />
<br />
The invocation of all methods follow this form<br />
window.external.'''''API'''''.'''''Method'''''<br />
<br />
Properties can also be accessed using a similar form:<br />
window.external.'''''API'''''.'''''Property'''''<br />
<br />
Where ''API'' is a singleton class that defines a group of related methods (i.e., functionality). For example, Transport (Stop, Play, Next, etc) which controls the "buttons" of the Winamp player. <br />
<br />
''Method'' is a function you can call as part of a particular API. For example the following call will stop the Winamp client:<br />
window.external.Transport.Stop();<br />
<br />
''Property'' is an internal variable for the particular API that can be queried and in some cases set. For example the following will provide access to the Winamp client shuffle "button":<br />
var shuffle = window.external.Transport.shuffle; // gets the current state<br />
OR<br />
window.external.Transport.shuffle = true; // turns on shuffle<br />
<br />
See the documentation on each API below for a complete list of methods and properties.<br />
<br />
<!-- == Security Warnings ==<br />
Using the Winamp JavaScript API, an online service web page has access to much more information (read: power) than a normal web page. For example, playlists can be enumerated, and metadata for songs can be retrieved. In order to control these capabilities a security system was implemented so that users are informed whenever an online service first attempts to use an API method or access a property. For example, when an online service attempts to stop playback for the very first time, the user will be notified and asked whether the service should be allowed to do this.<br />
<br />
Note that this security model maintains user choices based on service ID so that the user will be prompted each time a service tries to invoke methods or access properties. In addition, online services updated through the Winamp Online Service submission process, receive new service IDs, causing the users to be prompted again.<br />
<br />
A dialog is presented to the user that describes the action about to be performed and forces the user to choose whether the action should be Allowed or Denied. A third button let's a user to indicate "Always Allow". If the user selects this button, the API will no longer prompt the user for this action (for this particular online service). <br />
<br />
Be aware that choices for certain APIs will affect the entire API and all of its methods and properties. For example, choosing "Always Allow" for Transport.Stop() will also always allow access to the other Tranport methods/properties. Certain other APIs, such as the Application API affect only the action being attempted. Some API methods and properties are considered inconsequential and not governed by this security model at all. The scope of the user's choice will be described within the dialog.<br />
--><br />
<br />
== Transport API ==<br />
The Transport API is used to control the Winamp client. "Transport controls" was the name given to the buttons on the front panel that controlled hardware devices. This name is used in Winamp for the same purpose. It is also used to access information about the currently playing song.<br />
<br />
The Transport API can also be used to register for events involved with asset playback. See the section [[#Transport Events API|Transport Events API]].<br />
<br />
===Methods===<br />
====Prev()====<br />
Transport.Prev() can be used to press the "Previous Track" button on the Winamp player. Invoking Prev() while an asset is already playing will cause the previous asset to begin playback immediately. Invoking Prev() while the player is stopped will cause the previous asset to play next time playback starts.<br />
<br />
Prototype:<br />
bool Prev();<br />
Example:<br />
var rc = window.external.Transport.Prev();<br />
Return Value:<br />
A boolean value indicating whether the request was successful.<br />
<br />
====Play()====<br />
Transport.Play() can be used to press the "Play" button on the Winamp player. Invoking Play() on an asset already playing will cause the asset to restart playback. Pressing Play() on a paused asset will cause it to begin playing from its current position. <br />
<br />
<br />
Prototype:<br />
bool Play();<br />
Example:<br />
var rc = window.external.Transport.Play();<br />
Return Value:<br />
A boolean value indicating whether the request was successful.<br />
<br />
====Pause()====<br />
Transport.Pause() can be used to press the "Pause" button on the Winamp player. Issuing Pause() again, or Play() will cause the asset to continue to play from the location where it was paused.<br />
<br />
Prototype:<br />
bool Pause();<br />
Example:<br />
var rc = window.external.Transport.Pause();<br />
Return Value:<br />
A boolean value indicating whether the request was successful.<br />
<br />
====Stop()====<br />
Transport.Stop() can be used to press the "Stop" button on the Winamp player.<br />
<br />
Prototype:<br />
bool Stop();<br />
Example:<br />
var rc = window.external.Transport.Stop();<br />
Return Value:<br />
A boolean value indicating whether the request was successful.<br />
====Next()====<br />
Transport.Next() can be used to press the "Next Track" button on the Winamp player. Invoking Next() while the player is stopped will cause the next asset to play next time playback starts.<br />
<br />
Prototype:<br />
bool Next();<br />
Example:<br />
var rc = window.external.Transport.Next();<br />
Return Value:<br />
A boolean value indicating whether the request was successful.<br />
<br />
====GetMetadata()====<br />
Transport.GetMetadata() can be used to fetch metadata for the currently playing asset. The "tag" parameter is specific to different asset encoding formats so a knowledge of the metadata field names is necessary to request specific data about an asset. Some field names are common but others are specific to the encoding format of the asset.<br />
<br />
Prototype:<br />
string GetMetadata(tag);<br />
where:<br />
'''tag''' = (string) identifier for the metadata to be returned.<br />
Example:<br />
var metaStr = window.external.Transport.GetMetadata("artist");<br />
Return Value:<br />
A string value containing the requested metadata.<br />
<br />
===Properties===<br />
====bool shuffle====<br />
Transport.shuffle provides access to the Winamp client shuffle "button".<br />
<br />
Example:<br />
var isShuffling = window.external.Transport.shuffle; // get shuffle state<br />
window.external.Transport.shuffle = true; // turns on shuffle<br />
<br />
====bool repeat====<br />
Transport.repeat provides access to the Winamp client repeat "button".<br />
<br />
Example:<br />
var isRepeating = window.external.Transport.repeat; // get repeat state<br />
window.external.Transport.repeat = false; // turns off repeat<br />
<br />
====int position====<br />
Transport.position provides access to the position being played within the current asset. Setting this value can change the location where playback occurs. position is in milliseconds.<br />
<br />
Example:<br />
var position = window.external.Transport.position; // get position in current track<br />
window.external.Transport.position = 221559; // move playback of the current track <br />
// to the specified position.<br />
<br />
====bool playing (read only) ====<br />
Transport.playing indicates whether the Winamp Player is currently playing.<br />
<br />
Example:<br />
var isPlaying = window.external.Transport.playing; // is player playing?<br />
<br />
====bool paused (read only) ====<br />
Transport.paused indicates whether the Winamp Player has been paused.<br />
<br />
Example:<br />
var isPaused = window.external.Transport.paused; // is player paused?<br />
<br />
====int length (read only)====<br />
Transport.length provides access to the length in seconds of the track currently playing.<br />
<br />
Example:<br />
var length = window.external.Transport.length; // get length of current track in secs<br />
<br />
====string url (read only)====<br />
Transport.url provides access to the URL (or filename) of the track currently playing.<br />
<br />
Example:<br />
var url = window.external.Transport.url; // get url of current track<br />
<br />
====string title (read only)====<br />
Transport.title provides access to the title of the track currently playing.<br />
<br />
Example:<br />
var title = window.external.Transport.title; // get title of current track<br />
<br />
==Transport Events API==<br />
The Event mechanism of the Transport API allows javascript programmers to specify a callback method that will be invoked whenever certain Transport events take place. An Event object is passed back to the method from which properties can be accessed that provide more information about the event.<br />
<br />
===RegisterForEvents()===<br />
The RegisterForEvents() method can be used to specify a JavaScript function that is to be called when any Transport Events occur. An event object is passed that indicates the type of event.<br />
<br />
Prototype:<br />
boolean RegisterForEvents(handler);<br />
<br />
Example:<br />
var rc = window.external.Transport.RegisterForEvents(EventHandler);<br />
<br />
Return value:<br />
boolean value indicating whether the request was successful.<br />
<br />
===UnregisterFromEvents()===<br />
The UnregisterFromEvents() method is used to stop receiving notifications about Transport events.<br />
<br />
Note: The original handler used in RegisterForEvents() must be passed back into UnregisterFromEvents().<br />
<br />
Prototype:<br />
boolean UnregisterFromEvents(handler);<br />
<br />
Example:<br />
var rc = window.external.Transport.UnregisterFromEvents(EventHandler);<br />
<br />
Return value:<br />
boolean value indicating whether the request was successful.<br />
<br />
===Events===<br />
The Transport API Event mechanism requires a JavaScript callback method that accepts a single parameter, a reference to a function. This function will be invoked with an "event" object that will indicate the type of event that occurred as well as contain properties containing more information about the event.<br />
<br />
====OnStop====<br />
The OnStop event is triggered when the Winamp client is stopped.<br />
<br />
=====properties=====<br />
integer event.position = contains the position within the file where the "Stop" was issued. position is the number of milliseconds from the start of the asset.<br />
<br />
====OnPlay====<br />
The OnPlay event is triggered when the Winamp client begins playback. If the client is paused and then restarted by "pressing Play", the OnPause event is triggered rather than an OnPlay event.<br />
<br />
=====properties=====<br />
string event.filename = contains the filename/URL of the asset starting playback.<br />
<br />
====OnPause====<br />
The OnPause event is triggered when the Winamp client is paused or unpaused. If the client is started after being paused, by "pressing Play", the OnPause event is triggered rather than an OnPlay event.<br />
<br />
=====properties=====<br />
boolean event.paused = true (the player was paused), false (the player was unpaused)<br />
<br />
====OnEndOfFile====<br />
The OnEndOfFile event is triggered when the player reaches the end of a track.<br />
<br />
=====properties=====<br />
None<br />
<br />
===Callback function===<br />
The callback function is invoked whenever a Transport event is detected. The callback function is specified in both the RegisterForEvents() and UnregisterFromEvents() methods. The method takes a single parameter, which is loaded with an object identifying the event that occurred.<br />
<br />
Example:<br />
function EventHandler(event){<br />
{<br />
if (event.event == "OnStop"){<br />
alert("OnStop: position=" + event.position);<br />
}<br />
else if (event.event == "OnEndOfFile"){<br />
alert("OnEndOfFile");<br />
}<br />
else if (event.event == "OnPause"){<br />
alert("OnPause: paused=" + event.paused);<br />
}<br />
else if (event.event == "OnPlay"){<br />
alert("OnPlay: filename=" + event.filename);<br />
}<br />
else {<br />
alert("Unrecognized Event received");<br />
}<br />
}<br />
<br />
== PlayQueue API ==<br />
Provides access to the play queue ("Winamp Playlist"). If you need access to the currently playing song, use the Transport API instead.<br />
<br />
Note that the Play Queue is the list of assets that are scheduled to be played by the Winamp client. This is not necessarily the same as a user playlist. Once placed in the play queue, assets can be rearrainged or deleted from the play queue without affecting a user playlist. Individual assets can be placed in the play queue without being contained within a user playlist. Additionally, after adding a playlist to the play queue, changes to the playlist will not affect the assets in the play queue.<br />
<br />
===Methods===<br />
====Play()====<br />
The PlayQueue.Play() method stops playback, clears the play queue, enqueues the asset specified by the URL and starts playback. If the URL cannot be found, playback will stop, the play queue will be cleared, the URL (or title and length) will appear in the queue but playback will not be started. <br />
<br />
Prototype:<br />
bool Play(URL);<br />
bool Play(URL, title);<br />
bool Play(URL, title, length);<br />
where:<br />
'''URL''' = (string) identifies the location of the asset, for a file that is<br />
local or on an attached network drive this would be the fully<br />
qualified path and filename. For files served from a web server,<br />
it would be the http URL.<br />
'''title''' = (string) used as the title when initially placed in<br />
the play queue. <br />
'''length''' = (integer) used as the length when initially place<br />
in the play queue<br />
<br />
Note, title and length are displayed in the play queue to identify what is to be played. In order to reduce network activity, the real title and length are only accessed (using the URL) when the asset is about to commence playback. At this point the title and length are updated to their real values.<br />
<br />
Example:<br />
var rc = window.extern.PlayQueue.Play("c:\\Winamp\\01 - Hello.mp3",<br />
"My Cool Title",1024);<br />
Return Value:<br />
A boolean value indicating whether the request was successful.<br />
<br />
====Enqueue()====<br />
PlayQueue.Enqueue() is used to add an asset to the play queue. The selected asset is added to the bottom of the queue and current playback is not interrupted.<br />
<br />
Prototype:<br />
bool Enqueue(URL);<br />
bool Enqueue(URL, title);<br />
bool Enqueue(URL, title, length);<br />
'''URL''' = (string) identifies the location of the asset, for a file that is<br />
local or on an attached network drive this would be the fully<br />
qualified path and filename. For files served from a web server,<br />
it would be the http URL.<br />
'''title''' = (string) used as the title when initially placed in<br />
the play queue. <br />
'''length''' = (integer) used as the length when initially place<br />
in the play queue<br />
<br />
Note, title and length are displayed in the play queue to identify what is to be played. In order to reduce network activity, the real title and length are only accessed (using the URL) when the asset is about to commence playback. At this point the title and length are updated to their real values.<br />
<br />
Example:<br />
var rc = window.extern.PlayQueue.Enqueue("c:\\Winamp\\01 - Hello.mp3",<br />
"My Cool Title",1024);<br />
Return Value:<br />
A boolean value indicating whether the request was successful.<br />
<br />
====Insert()====<br />
The PlayQueue.Insert() method can add an asset to the play queue at a specific index.<br />
<br />
Prototype:<br />
bool Insert(position, URL);<br />
bool Insert(position, URL, title);<br />
bool Insert(position, URL, title, length);<br />
where:<br />
'''position''' = (integer) a zero based number indicating the location within<br />
the play queue to insert the new asset.<br />
Note: Position is "zero based" so the first entry in the <br />
queue is at position 0.<br />
'''url''' = (string) the URL of the asset to be added<br />
'''title''' = (string) the title to be displayed in the Play Queue.<br />
'''length''' = (integer) the length of the asset to be displayed in <br />
the play queue.<br />
<br />
Note, title and length are displayed in the play queue to identify what is to be played. In order to reduce network activity, the real title and length are only accessed (using the URL) when the asset is about to commence playback. At this point the title and length are updated to their real values.<br />
<br />
Example:<br />
var rc = window.external.PlayQueue.Insert(1, "c:\\mySongs\\mySong.mp3",300);<br />
Return Value:<br />
A boolean value indicating whether the request was successful.<br />
<br />
====ClearQueue()====<br />
The PlayQueue.ClearQueue() method removes all assets from the play queue. This does not stop the current playback. ClearQueue is commonly used to prepare the Play Queue for the addition of new assets.<br />
<br />
Prototype:<br />
bool ClearQueue()<br />
Example:<br />
var rc = window.external.PlayQueue.ClearQueue();<br />
<br />
Return Value:<br />
A boolean value indicating whether the request was successful.<br />
<br />
====GetMetadata()====<br />
PlayQueue.GetMetadata() can be used to obtain asset metadata about an asset in the play queue. <br />
<br />
Prototype:<br />
String GetMetadata(position, metadatatag);<br />
where:<br />
'''position''' - (integer) is the position of the asset within the playlist.<br />
Note: Position is "zero based" so the first entry in the <br />
queue is at position 0.<br />
'''metadatatag''' - (string) is a tag describing which metadata is requested.<br />
<br />
Example:<br />
var mdata = window.external.PlayQueue.GetMetadata(2,"artist");<br />
Return Value:<br />
A String that contains the metadata requested for the asset located at the specified position in the play queue<br />
<br />
====GetTitle()====<br />
PlayQueue.GetTitle() retrieves the title of the asset at the specified position within the play queue.<br />
<br />
Prototype:<br />
String GetTitle(position);<br />
where:<br />
'''position''' - (integer) is the position of the asset within the playlist.<br />
Note: Position is "zero based" so the first entry in the <br />
queue is at position "0".<br />
Example:<br />
var title = window.external.PlayQueue.GetTitle(1);<br />
Return value:<br />
A String containing the Title of the asset at the requested position in the play queue<br />
<br />
====GetURL()====<br />
PlayQueue.GetURL() is used to obtain the URL from the asset at the specified position in the play queue<br />
<br />
Prototype:<br />
String GetURL(position);<br />
where:<br />
'''position''' - (integer) is the position of the asset within the playlist.<br />
Note: Position is "zero based" so the first entry in the <br />
queue is at position "0".<br />
Example:<br />
var url = window.external.PlayQueue.GetURL(1);<br />
Return value:<br />
A String containing the URL of the asset at the rquested position in the play queue.<br />
<br />
===Properties===<br />
====int length (read only)====<br />
PlayQueue.length contains the length of the current play queue<br />
<br />
====int cursor====<br />
PlayQueue.cursor provides access to the position of the currently playing asset within the play queue. This cursor is 0 based, meaning that the first asset in the Play Queue has a cursor value of 0. Valid values range from 0 to the length of the play queue minus one.<br />
<br />
If this value is changed before playback is started, the next asset to play will be the one assigned to this property. However, if a song is already playing and this property is changed, the current asset will continue to play even though this property has been updated. At the point that the current asset playback completes, the player will increment the cursor position and play the next asset in the queue rather than the one to which cursor was set. So, for example, to specify the next asset to play while an asset is currently playing, set the cursor property to the position of the asset to play minus one.<br />
<br />
== Playlists API == <br />
The Playlists API is used to process user playlists.<br />
<br />
===Methods===<br />
====GetPlaylists()====<br />
<br />
Prototype:<br />
Array GetPlaylists();<br />
Example:<br />
var playlists = window.external.Playlists.GetPlaylists();<br />
Return Value:<br />
A array-like object that can be used to examine all user playlists.<br />
<br />
Each element of the array represents a user playlist and contains the following properties<br />
*filename - filename of the playlist<br />
*title - name of the playlist<br />
*playlistId - a unique identifier for the playlist, so you can retrieve it later. Also used with OpenPlaylist/SavePlaylist<br />
*length - total length (time) in seconds. Cached data - not guaranteed to be accurate<br />
*numitems - number of items in the playlist. Cached data - not guaranteed to be accurate<br />
<br />
====OpenPlaylist()====<br />
Playlists.OpenPlaylist() returns a Playlist object for the specified playlist ID. You must use <br />
Playlists.GetPlaylists() before issuing this request.<br />
<br />
Prototype:<br />
Playlist OpenPlaylist(playlistId);<br />
where:<br />
'''playlistId''' - (string) the Id of the playlist to be opened.<br />
Example:<br />
var playlist1 = window.external.Playlists.OpenPlaylist(playlistId);<br />
Return Value:<br />
The Playlist object with the specified playistId.<br />
<br />
====SavePlaylist()====<br />
Playlists.SavePlaylist() saves the specified playlist object with the specified ID.<br />
<br />
Prototype:<br />
bool SavePlaylist(playlistId, playlist_to_save);<br />
where:<br />
'''playlistId''' (string) is the id of the playlist to be saved.<br />
'''playlist_to_save''' (Playlist) is the Playlist object to be saved.<br />
Example:<br />
var rc = window.external.Playlists.SavePlaylist(playlistId, pl);<br />
Return Value:<br />
A boolean value indicating whether the request was successful.<br />
<br />
<br />
<br />
=== Playlist Object ===<br />
Playlist objects can be created/returned by the OpenPlaylist() method as well as various other APIs.<br />
<br />
====Methods====<br />
=====GetItemFilename()=====<br />
The GetItemFilename() method retrieves the filename/URL of the item at the specified index into the playlist.<br />
<br />
Prototype:<br />
String GetItemFilename(position);<br />
where:<br />
'''position''' = (number) position of the item in the playlist for which the filename<br />
should be returned. <br />
Note: Position is "zero based" so the first entry in the <br />
playlist is at position 0.<br />
<br />
Example:<br />
var filename = playlst.GetItemFilename(0);<br />
<br />
Return value:<br />
A string containing the filename/URL of a particular item in the playlist<br />
<br />
=====GetItemTitle()=====<br />
The GetItemTitle() method returns the title of the asset at the requested index.<br />
<br />
Prototype:<br />
String GetItemTitle(position);<br />
where:<br />
'''position''' = (number) position of the item in the playlist for which the title<br />
should be returned.<br />
Note: Position is "zero based" so the first entry in the <br />
playlist is at position 0.<br />
<br />
Example:<br />
var title = playlst.GetItemTitle(0);<br />
<br />
Return value:<br />
The song title of the given item in the playlist<br />
<br />
=====GetItemLength()=====<br />
The GetItemLength() method retrieves the play length of the asset at the requested index.<br />
<br />
Number GetItemLength(position);<br />
where:<br />
'''position''' = (number) position of the item in the playlist for which the length<br />
should be returned.<br />
Note: Position is "zero based" so the first entry in the <br />
playlist is at position 0.<br />
<br />
Example:<br />
var itemLength = playlst.GetItemLength(0);<br />
<br />
Return value:<br />
A number specifying the play length of the asset, in milliseconds.<br />
<br />
=====Reverse()=====<br />
The Reverse() method reverses the order of the assets within a playlist, i.e., the first becomes last and the second becomes second to last, etc.<br />
<br />
Prototype:<br />
Reverse();<br />
<br />
Example:<br />
var rc = playlst.Reverse();<br />
<br />
<br />
=====Swap()=====<br />
The Swap() method exchanges the assets at the two specified positions.<br />
<br />
Prototype:<br />
Swap(Number position1, Number position2)<br />
where: <br />
'''position1''' = (number) the index of the first item to be swapped.<br />
'''position2''' = (number) the index of the second item to be swapped.<br />
Note: position1 and position2 are "zero based" so the first entry in the <br />
playlist is at position 0.<br />
<br />
Example:<br />
var rc = playlst.Swap(0,1);<br />
<br />
=====Randomize()=====<br />
The Randomize() method re-arranges the order of the playlist, placing the assets in random positions.<br />
<br />
Prototype:<br />
Randomize();<br />
<br />
Example:<br />
var rc = playlst.Randomize();<br />
<br />
=====Remove()=====<br />
The Remove() method removes an asset from the playlist. Subsequent assets are moved to lower number positions in the array.<br />
<br />
Prototype:<br />
Remove(position);<br />
where:<br />
'''position''' = (number) the position of the asset to be removed.<br />
Note: Position is "zero based" so the first entry in the <br />
playlist is at position 0.<br />
<br />
Example:<br />
var rc = playlst.Remove(0);<br />
<br />
=====SortByTitle()=====<br />
The SortByTitle() method re-arrainges the order of the playlist so that it is alphabetical order by title.<br />
<br />
Prototype:<br />
SortByTitle();<br />
<br />
Example:<br />
var rc = playlst.SortByTitle();<br />
<br />
=====SortByFilename()=====<br />
The SortByFilename() method re-arrainges the order of the playlist so that it is alphabetical order by filename.<br />
<br />
Prototype:<br />
SortByFilename();<br />
<br />
Example:<br />
var rc = playlst.SortByFilename();<br />
<br />
=====SetItemFilename()=====<br />
Sets the filename of the asset at the specified location in the playlist.<br />
<br />
playlistObj.SetItemFilename(position, filename);<br />
where:<br />
'''position''' = (number) position of the entry in the playlist to alter the filename<br />
'''filename''' = (string) the new filename <br />
Note: Position is "zero based" so the first entry in the <br />
playlist is at position 0.<br />
<br />
Example:<br />
var rc = playlst.SetFilename(0, "c:\\\\myfavorites\\myfavsong.mp3");<br />
<br />
=====SetItemTitle()=====<br />
Sets the title of the asset at the specified location in the playlist.<br />
<br />
Prototype:<br />
SetItemTitle(position, title);<br />
where:<br />
'''position''' = (number) position of the entry in the playlist to alter the filename<br />
'''title''' = (string) the new title <br />
Note: Position is "zero based" so the first entry in the <br />
playlist is at position 0.<br />
<br />
Example:<br />
var rc = playlst.SetItemTitle(0, "My Favorite Title");<br />
<br />
=====SetItemLength()=====<br />
Sets the length of the asset at the specified location in the playlist.<br />
<br />
SetItemLength(position, length);<br />
where:<br />
'''position''' = (number) position of the entry in the playlist to alter the filename<br />
'''length''' = (number) the new length <br />
Note: Position is "zero based" so the first entry in the <br />
playlist is at position 0.<br />
<br />
Example:<br />
var rc = playlst.SetItemLength(0, 1000);<br />
<br />
=====InsertURL()=====<br />
Inserts the specified asset in front of the asset at the specified position. That and subsequent items are "pushed" to a higher position in the array.<br />
<br />
InsertURL(position, url);<br />
InsertURL(position, url, title);<br />
InsertURL(position, url, title, length);<br />
where:<br />
'''position''' = (number) position within the playlist before which to insert the asset<br />
'''url''' = (string) the URL of the asset to be inserted<br />
'''title''' = (string) title of the asset to be inserted<br />
'''length''' = (number) length (milliseconds) of the asset to be inserted<br />
Note: Position is "zero based" so the first entry in the <br />
playlist is at position 0.<br />
Note: title and length are user specified and do not have to match<br />
the actual values of the asset. When the asset is played, the <br />
values will be replaced in the Play Queue when the URL is opened <br />
for playback but will othewise retain the above values in the <br />
playlist.<br />
<br />
Return value:<br />
A boolean value indicating whether the request was successful.<br />
<br />
=====AppendURL()=====<br />
The Playlist.AppendURL() method appends an asset URL to the playlist.<br />
<br />
Playlist.AppendURL(url);<br />
Playlist.AppendURL(url, title);<br />
Playlist.AppendURL(url, title, length);<br />
where:<br />
'''url''' = (string) the URL to the asset to be appended<br />
'''title''' = (string) title of the asset to be appended<br />
'''length''' = (number) length (milliseconds) of the asset to be appended<br />
Note: title and length are user specified and do not have to match<br />
the actual values of the asset. When the asset is played, the <br />
values will be replaced in the Play Queue when the URL is opened <br />
for playback but will othewise retain the above values in the <br />
playlist.<br />
<br />
Return value:<br />
A boolean value indicating whether the request was successful.<br />
<br />
=====Clear()=====<br />
The Playlist.Clear() method will remove all assets from the playlist.<br />
<br />
Playlist.Clear();<br />
<br />
Return value:<br />
A boolean value indicating whether the request was successful<br />
<br />
====Properties====<br />
=====int numitems (read only)=====<br />
The Playlist.numitems property contains the number of assets within the playlist.<br />
<!--<br />
== Playlist Manager API ==<br />
The Playlist Manager API provides methods to read and write playlists from permanent storage.<br />
<br />
===TBD===<br />
--><br />
<br />
== Bookmarks API ==<br />
The Bookmarks API provides methods to manage bookmarks.<br />
===Methods===<br />
====Add()====<br />
<br />
Prototype:<br />
boolean Add(url, title);<br />
where:<br />
'''url''' = (string) The url of the asset to be bookmarked.<br />
'''title''' = (string) A suitable title to be used within the bookmark.<br />
<br />
Example:<br />
var rc = window.external.Bookmark.Add("c:\myfavs\songstocodeby.mp3", <br />
"Songs To Code By");<br />
<br />
Return value:<br />
A boolean value indicating whether the request was successful.<br />
<br />
== Podcasts API ==<br />
The Podcasts API provides methods to manage Podcasts.<br />
<br />
===Methods===<br />
====Subscribe()====<br />
The Podcasts.Subscribe() method is used to add a channel to the list of podcast subscriptions, automatically subscribe to the podcast and begin downloading of the available episodes. Once downloaded the episodes can be selected for playback.<br />
<br />
Prototype:<br />
bool Subscribe(url);<br />
where:<br />
'''url''' = (string) the Podcast URL to subscribe to.<br />
<br />
Example:<br />
var rc = window.external.PodCasts.Subscribe(<nowiki>"http://services.winamp.com/rss/news"</nowiki>);<br />
<br />
Return value:<br />
boolean value that indicates whether the request was successful.<br />
<br />
== Config API ==<br />
The Config API provides a means by which properties can be saved. Properties added using the Config API are persistent across Winamp launches.<br />
<br />
===Adding and Retrieving Properties===<br />
Adding a property is accomplished by identifying a property and assigning it a value. Once assigned, the value can be retrieved like any other objects properties.<br />
<br />
Example:<br />
window.external.Config.myProperty = "Test";<br />
var myProp = window.external.Config.myProperty; // myProp is set to "Test"<br />
<br />
===Storing and Retrieving advanced data types===<br />
Internally, all properties are stored as strings. If you need to store datatypes more advanced than String, Number, or Boolean, it is recommended that you create a JSON string out of your data type.<br />
<br />
== Security API ==<br />
===Methods===<br />
====GetActionAuthorization()====<br />
The Security.GetActionAuthorization() method can be used to determine whether a user has previously allowed or denied the functioning of a particular API's methods. Group strings match API names.<br />
<br />
Prototype:<br />
number Security.GetActionAuthorization(group);<br />
where:<br />
group = (string) Name of API to check for permission.<br />
<br />
Example:<br />
var rc = window.external.Security.GetActionAuthorization("Transport");<br />
<br />
Return Data:<br />
*-1 = Either the user has not specified whether to allow/deny use of this API or the action usage is unrestricted. <br />
*0 = The user has previously specified to deny use of this API/method.<br />
*1 = The user has previously specified to allow use of this API/method.<br />
<!-- <br />
Transport – Access to the currently playing track, and play controls (play, stop, seek, etc)<br />
<br />
PlayQueue – Access to the play queue (Winamp Playlist)<br />
<br />
Application – general Winamp information – version #, language pack<br />
<br />
Playlists – access to the media library playlists<br />
<br />
Bookmarks – access to the user’s bookmarks (place to bookmark radio streams, etc)<br />
<br />
Skin – access to information about the user’s skin – colors, fonts, etc.<br />
<br />
MediaCore – access to media playback information, such as supported extensions<br />
<br />
Podcasts – access to the user’s media library podcasts<br />
<br />
--><br />
<br />
== MediaCore API ==<br />
===Methods===<br />
==== IsRegisteredExtension() ====<br />
MediaCore.IsRegisteredExtension() method can be used to determine if the Winamp client is able to playback a specific format. The file extension of the asset usually indicates the format. This method is important since Winamp support for different formats is contained within plugins which may or may not exist for use.<br />
<br />
Prototype:<br />
boolean IsRegisteredExtension(ext);<br />
where:<br />
'''ext''' = (string) identifies the format to be queried for support in the form of a <br />
character string of the extension (a starting period is optional).<br />
<br />
Example:<br />
var canPlay = window.external.MediaCore.IsRegisteredExtension("mp3"); <br />
<br />
Return value:<br />
Boolean value indicating whether the format is supported.<br />
<br />
==== GetMetadata() ====<br />
MediaCore.GetMetadata() method can be used to obtain metadata about an asset. This method differs from Transport.GetMetadata() in that the asset does not have to be currently playing. It differs from PlayQueue.GetMetadata() in that it doesn't have to be present in the play queue. <br />
<br />
Prototype:<br />
string GetMetadata(url, tag);<br />
where:<br />
'''url''' = (string) containing the URL for which metadata is to be retrieved.<br />
'''tag''' = (string) the specific piece of metadata to be returned.<br />
<br />
Example:<br />
var art = window.external.MediaCore.GetMetadata(<br />
"c:\\my favs\\myfavorite.mp3","artist");<br />
<br />
Return value:<br />
A string containing the metadata requested.<br />
<br />
==== AddMetadataHook() ====<br />
MediaCore.AddMetadataHook() method can be used to add or override metadata for an asset. For example, some assets such as those that are streamed may not contain metadata. This method allows the online service to add metadata for the specified asset. Subsequent GetMetadata() methods will return this information. Online services can override the metadata present within an asset using this method. This method can be used by services that define or can obtain their own metadata for the assets they provide rather than rely on what might or might not be present in the asset itself.<br />
<br />
Prototype:<br />
string AddMetadataHook(url, tag, value);<br />
where:<br />
'''url''' = (string) containing the URL for which metadata is to be added.<br />
'''tag''' = (string) the specific metadata key for which a value will be added.<br />
'''value''' - (string) the value of the metadata key being added.<br />
<br />
Example:<br />
var rc = window.external.MediaCore.AddMetadataHook(<br />
"c:\\my favs\\myfavorite.mp3","artist","myself");<br />
<br />
Return value:<br />
A boolean value that indicates whether the request was successful.<br />
<br />
==== RemoveMetadataHook() ====<br />
MediaCore.RemoveMetadataHook() method can be used to remove metadata added through the AddMetadataHook() method. Subsequent GetMetadata() requests will return whatever metadata was available previously, if any.<br />
<br />
Prototype:<br />
string RemoveMetadataHook(url, tag);<br />
string RemoveMetadataHook(url);<br />
where:<br />
'''url''' = (string) containing the URL for which metadata is to be removed.<br />
'''tag''' = (string) the specific metadata key for which a value will be removed.<br />
<br />
If only the url parameter is provided, all metadata added with AddMetadataHook() for the specified url will be removed.<br />
<br />
Example:<br />
var rc = window.external.MediaCore.RemoveMetadataHook(<br />
"c:\\my favs\\myfavorite.mp3","artist");<br />
<br />
Return value:<br />
A boolean value that indicates whether the request was successful.<br />
<br />
== History API ==<br />
The History branch of the Media Library pane is actually a database containing information about previously played assets. The History API allows a service to search and retrieve information from this database. By specifying a query string, Winamp will return an array of objects that match the values specified in the query.<br />
<br />
===Methods===<br />
<br />
==== Query() ====<br />
Prototype:<br />
results = History.Query(queryString);<br />
where:<br />
'''queryString''' = a properly formed string to match data to be returned.<br />
<br />
Example:<br />
var results = window.external.History.Query("LASTPLAYED<[now]");<br />
<br />
Return value:<br />
An "array-like" object that contains the results of the query.<br />
<br />
Each entry of the array contains the following properties:<br />
* String filename<br />
* String title<br />
* Number length<br />
* Number playcount<br />
* Date lastplay<br />
<br />
<br />
'''Query String format:'''<br />
<field> <comparison> [value] [<logic operator> <field> <comparison> [value] [...]]<br />
<br />
<br />
'''Fields:'''<br />
{| border="1"<br />
|-<br />
! Keyword<br />
! Description<br />
|-<br />
| LASTPLAY<br />
| Date and time when this asset was last played.<br />
|-<br />
| FILENAME<br />
| Full filename (including path)<br />
|-<br />
| LENGTH<br />
| Length, in seconds (or hh:mm:ss)<br />
|-<br />
| TITLE<br />
| Title<br />
|-<br />
| PLAYCOUNT<br />
| Number of times the asset has been played. <br />
|}<br />
<br />
<br />
'''Comparison Operators:'''<br />
{| border="1"<br />
|-<br />
! Operator<br />
! Description<br />
|-<br />
| '='<br />
| String or integer equals value<br />
|-<br />
| '!='<br />
| String or integer does not equal value <br />
|-<br />
| '<'<br />
| String or integer is less than value<br />
|-<br />
| '>'<br />
| String or integer is greater than value<br />
|-<br />
| '<='<br />
| String or integer is less than or equal to value<br />
|-<br />
| '>='<br />
| String or integer is greater than or equal to value<br />
|-<br />
| HAS<br />
| String contains value<br />
|-<br />
| NOTHAS<br />
| String does not contain value<br />
|-<br />
| LIKE<br />
| String is similar to value ("the" and whitespace are ignored)<br />
|-<br />
| BEGINS<br />
| String begins with value<br />
|-<br />
| BEGINSLIKE<br />
| String begins like value<br />
|-<br />
| ENDS<br />
| String ends with value<br />
|-<br />
| ISEMPTY<br />
| (no comparison value required) TRUE if <field> is empty<br />
|-<br />
| ISNOTEMPTY<br />
| (no comparison value required) TRUE if <field> is not empty<br />
|}<br />
<br />
<br />
'''Values can be:'''<br />
*"strings with spaces" or strings_without_spaces<br />
*integers can be "32" or just 32<br />
*integers for LENGTH can be a plain integer (seconds), or mm:ss or hh:mm:ss<br />
*date/timestamps should be [datetime data], which can be either an absolute or relative time. i.e.: [3 weeks ago], [18:15], [05/30/2003], [yesterday noon], [3 days ago 5 pm], [now], [5 mn before may 30th], etc.<br />
<br />
<!--<br />
== Local Media API (test)==<br />
<br />
===TBD===<br />
<br />
<br />
The LocalMedia API allows a service to search the assets within the Local Media branch of the Media Library. By specifying a query string, Winamp will return an array of objects that match the values specified in the query.<br />
<br />
===Methods===<br />
Prototype:<br />
xx<br />
<br />
Example:<br />
xx<br />
<br />
Return value:<br />
returns an array of objects that match the specified criteria of the query string.<br />
<br />
'''Query String format:'''<br />
<field> <comparison> [value] [<logic operator> <field> <comparison> [value] [...]]<br />
<br />
'''Comparison Operators:'''<br />
{| border="1"<br />
|-<br />
! Keyword<br />
! Description<br />
|-<br />
| TYPE<br />
| 0 for audio files, 1 for video files<br />
|-<br />
| FILENAME<br />
| Full filename (including path)<br />
|-<br />
| LENGTH<br />
| Length, in seconds (or hh:mm:ss)<br />
|-<br />
| ARTIST<br />
| Artist<br />
|-<br />
| ALBUM<br />
| Album<br />
|-<br />
| ALBUMARTIST<br />
| Album Artist<br />
|-<br />
| TITLE<br />
| Title<br />
|-<br />
| TRACKNO<br />
| Track number of file<br />
|-<br />
| GENRE<br />
| Genre<br />
|-<br />
| YEAR<br />
| Year<br />
|-<br />
| COMMENT<br />
| Comment<br />
|-<br />
| COMPOSER<br />
| Composer<br />
|-<br />
| DISC<br />
| Disc number of a CD set<br />
|-<br />
| FILESIZE<br />
| File size, in kilobytes<br />
|-<br />
| FILETIME<br />
| Last known file date/time on disk<br />
|-<br />
| FOLDER<br />
| Containing folder<br />
|-<br />
| LASTUPD<br />
| Date/time of file imported to library or modified in library<br />
|-<br />
| LASTPLAY<br />
| Date/time of last play<br />
|-<br />
| RATING<br />
| Rating value (1-5, or 0 or empty for unrated)<br />
|-<br />
| PLAYCOUNT<br />
| Number of plays<br />
|-<br />
| PUBLISHER<br />
| Publisher or record label<br />
|-<br />
| REPLAYGAIN_ALBUM_GAIN<br />
| ReplayGain Album Gain<br />
|-<br />
| REPLAYGAIN_TRACK_GAIN<br />
| ReplayGain Track Gain<br />
|-<br />
| BITRATE<br />
| Bitrate (in KBPS)<br />
|-<br />
| TRACKS<br />
| Total number of tracks on the disc<br />
|-<br />
| DISCS<br />
| Total number of discs in the set<br />
|-<br />
| ISPODCAST<br />
| 1 for a podcast episode, 0 otherwise<br />
|-<br />
| PODCASTCHANNEL<br />
| The name of the channel for a podcast<br />
|-<br />
| PODCASTPUBDATE<br />
| Date/time when the podcast was published<br />
|}<br />
<br />
<br />
'''Field Names:'''<br />
{| border="1"<br />
|-<br />
! Comparison Operator<br />
! Description<br />
|-<br />
| '='<br />
| String or integer equals value<br />
|-<br />
| '!='<br />
| String or integer does not equal value <br />
|-<br />
| '<'<br />
| String or integer is less than value<br />
|-<br />
| '>'<br />
| String or integer is greater than value<br />
|-<br />
| '<='<br />
| String or integer is less than or equal to value<br />
|-<br />
| '>='<br />
| String or integer is greater than or equal to value<br />
|-<br />
| HAS<br />
| String contains value<br />
|-<br />
| NOTHAS<br />
| String does not contain value<br />
|-<br />
| LIKE<br />
| String is similar to value ("the" and whitespace are ignored)<br />
|-<br />
| BEGINS<br />
| String begins with value<br />
|-<br />
| BEGINSLIKE<br />
| String begins like value<br />
|-<br />
| ENDS<br />
| String ends with value<br />
|-<br />
| ISEMPTY<br />
| (no comparison value required) TRUE if <field> is empty<br />
|-<br />
| ISNOTEMPTY<br />
| (no comparison value required) TRUE if <field> is not empty<br />
|}<br />
<br />
'''Values can be:'''<br />
*"strings with spaces" or strings_without_spaces<br />
*integers can be "32" or just 32<br />
*integers for LENGTH can be a plain integer (seconds), or mm:ss or hh:mm:ss<br />
*date/timestamps should be [datetime data], which can be either an absolute or relative time. i.e.: [3 weeks ago], [18:15], [05/30/2003], [yesterday noon], [3 days ago 5 pm], [now], [5 mn before may 30th], etc.<br />
--><br />
<br />
== Application API ==<br />
===Methods===<br />
<br />
====LaunchURL()====<br />
The Application.LaunchURL() method launches a URL in the bento browser<br />
or default browser. The default browser is launched if force_external = true or in skins that don't define a browser.<br />
<br />
Prototype:<br />
boolean LaunchURL(url, force_external);<br />
where:<br />
'''url''' = (string) The url to open in the browser<br />
'''force_external''' = (boolean) will force the url to be displayed in a browser<br />
outside of the Winamp client.<br />
<br />
Example:<br />
<br />
var rc = LaunchURL(<nowiki>"http://www.winamp.com"</nowiki>, true); <br />
<br />
Return value:<br />
A boolean value indicating whether the request was successful.<br />
<br />
===Properties===<br />
====int version (read only)==== <br />
The version property returns the version number of the browser control within the Winamp client as an integer, e.g. 555 for 5.55, 560 for 5.6<br />
====string versionstring (read only)====<br />
The versionstring property returns the version number of the browser control within the Winamp client as a string, e.g. "5.55" for 5.55<br />
====string language (read only) ====<br />
Language identifier from the currently installed language pack. Follows ISO 639-1 two letter language codes<br />
<br />
====string languagepack (read only) ====<br />
Language pack identifier from the currently installed language pack. follows the form<br />
lc-CC<br />
where lc is the two letter ISO 639-1 language code<br />
and CC is the two letter ISO 3166 country code.<br />
<br />
Note: do not count on the country code being the same as the user's current location.<br />
<!--<br />
== Security API ==<br />
<br />
===Methods===<br />
====GetActionAuthorization()====<br />
<br />
Prototype:<br />
GetActionAuthorization(group, action);<br />
where:<br />
'''group''' = (string) a group of related methods, i.e. the API name.<br />
'''action''' = (string) a specific method within a group.<br />
<br />
Example:<br />
var auth = window.external.Security.GetActionAuthorization("application", <br />
"launchurl");<br />
<br />
Return value: an integer representing the following results<br />
<br />
*ACTION_UNDEFINED = -1,<br />
*ACTION_DISALLOWED = 0,<br />
*ACTION_PROMPT = 1,<br />
*ACTION_ALLOWED = 2,<br />
<br />
--><br />
<br />
== Skin API ==<br />
<br />
The skin color API is a bit of a challenge. This API reflects some the idiosyncrasies of the underlying skinning system. "Classic" skins define a palette of 24 colors for the skin and an additional 6 colors for the playlist editor. "Modern" skins define these as well as any number of other colors retrievable by name (e.g. wasabi.tree.text for the text color on tree views). A website relying on any of these extra "named" colors should be careful to implement a fallback color based on the classic palette, as no named colors exist in classic skins!<br />
<br />
===Methods===<br />
====GetClassicColor()====<br />
The Skin.GetClassicColor() method is used to retrieve color information regarding different Skin UI elements.<br />
<br />
Prototype:<br />
GetClassicColor(classiccolornumber);<br />
where:<br />
'''classiccolornumber''' = (integer) A number in the range 0-23 identifying the Skin's UI element <br />
for which the color should be returned.<br />
<br />
Example:<br />
var wndBgColor = window.external.Skin.GetClassicColor(2);<br />
<br />
Return value:<br />
The HTML color constant used for the specified Skin UI element.<br />
<br />
====Classic Color Numbers====<br />
{| border="1"<br />
|-<br />
! Number<br />
! Description<br />
|-<br />
| 0 <br />
| Item Background<br />
|-<br />
| 1 <br />
| Item Foreground<br />
|-<br />
| 2 <br />
| Window Background<br />
|-<br />
| 3 <br />
| Button Foreground<br />
|-<br />
| 4 <br />
| Window Foreground<br />
|-<br />
| 5 <br />
| Hilite<br />
|-<br />
| 6 <br />
| Selection<br />
|-<br />
| 7 <br />
| List Header Background<br />
|-<br />
| 8 <br />
| List Header Text<br />
|-<br />
| 9 <br />
| List Header Frame Top<br />
|-<br />
| 10 <br />
| List Header Frame Middle<br />
|-<br />
| 11 <br />
| List Header Frame Bottom<br />
|-<br />
| 12 <br />
| List Header Empty Background<br />
|-<br />
| 13 <br />
| Scrollbar Foreground<br />
|-<br />
| 14 <br />
| Scrollbar Background<br />
|-<br />
| 15 <br />
| Scrollbar Inverse Foreground<br />
|-<br />
| 16 <br />
| Scrollbar Inverse Background<br />
|-<br />
| 17 <br />
| Scrollbar Dead Area<br />
|-<br />
| 18 <br />
| Selection Bar Foreground<br />
|-<br />
| 19 <br />
| Selection Bar Background<br />
|-<br />
| 20 <br />
| Inactive Selection Bar Foreground<br />
|-<br />
| 21 <br />
| Inactive Selection Bar Background<br />
|-<br />
| 22 <br />
| Alternating Item Background<br />
|-<br />
| 23 <br />
| Alternating Item Foreground<br />
|}<br />
<br />
====GetPlaylistColor()====<br />
The Skin.GetPlaylistColor() method is used to retrieve color information regarding different Playlist UI elements.<br />
<br />
Prototype:<br />
GetPlaylistColor(playlistcolornumber);<br />
where:<br />
'''playlistcolornumber''' = (integer) a number in the range 0-5 identifying the Playlist's UI <br />
element for which the color should be returned.<br />
<br />
Example:<br />
var normalBgColor = window.external.Skin.GetPlaylistColor(2);<br />
<br />
Return value:<br />
The HTML color constant used for the specified Playlist UI element.<br />
<br />
====Playlist Color Numbers====<br />
{| border="1"<br />
|-<br />
! Number<br />
! Description<br />
|-<br />
| 0 <br />
| Normal<br />
|-<br />
| 1 <br />
| Current<br />
|-<br />
| 2 <br />
| Normal Background<br />
|-<br />
| 3 <br />
| Selected Background<br />
|-<br />
| 4 <br />
| Video Window Status Bar Foreground<br />
|-<br />
| 5 <br />
| Video Window Status Bar Background<br />
|}<br />
<br />
====GetSkinColor()====<br />
The Skin.GetSkinColor() method is used to retrieve color information regarding different Playlist UI elements.<br />
<br />
Prototype:<br />
GetSkinColor(skincolorname);<br />
where:<br />
'''skincolorname''' = (string) identifying the Skin's UI <br />
element for which the color should be returned.<br />
<br />
Example:<br />
var buttonTextColor = window.external.Skin.GetSkinColor("wasabi.button.text");<br />
<br />
Return value:<br />
The HTML color constant used for the specified Playlist UI element.<br />
<br />
====Skin Color Names====<br />
{| border="1"<br />
|-<br />
! Name<br />
! Description<br />
|-<br />
|"wasabi.list.item.selected.fg"<br />
|Selected item text foreground color<br />
|-<br />
|"wasabi.list.column.separator" <br />
|Color of line between columns<br />
|-<br />
|'''Item Lists, Lists with playable items'''<br />
|<br />
|-<br />
|"wasabi.itemlist.outline.current" <br />
|Currently playing outline color<br />
|-<br />
|"wasabi.itemlist.outline.focus" <br />
|Focused item dashed outline color<br />
|-<br />
|"wasabi.itemlist.selborder" <br />
|<br />
|-<br />
|'''Message box'''<br />
|<br />
|-<br />
|"wasabi.msgBox.background" <br />
|Messagebox background color<br />
|-<br />
|"wasabi.textBar.text" <br />
|Text object & message box text color<br />
|-<br />
|"wasabi.textBar.background" <br />
|Text object & message box text background color<br />
|-<br />
|'''Buttons'''<br />
|<br />
|-<br />
|"wasabi.button.text" <br />
|Buttons text color<br />
|-<br />
|"wasabi.button.hiliteText" <br />
|Buttons hilite text color, used by tab windows<br />
|-<br />
|"wasabi.button.dimmedText" <br />
|Buttons dimmed text color, when disabled<br />
|-<br />
|'''Popup menus'''<br />
|<br />
|-<br />
|"wasabi.popup.text" <br />
|Menu items text color<br />
|-<br />
|"wasabi.popup.hiliteText" <br />
|Hilited item text color<br />
|-<br />
|"wasabi.popup.dimmedText" <br />
|Disabled item text color<br />
|-<br />
|'''Components'''<br />
|<br />
|-<br />
|"wasabi.component.title.foreground" <br />
|Old title bar text color when using TTF<br />
|-<br />
|"wasabi.component.title.border" <br />
|Old title bar text outline when using TTF<br />
|-<br />
|'''Labeled Windows'''<br />
|<br />
|-<br />
|"wasabi.labelwnd.foreground" <br />
|Text foreground color<br />
|-<br />
|"wasabi.labelwnd.background" <br />
|Text drop shadow color<br />
|-<br />
|'''Edit Windows'''<br />
|<br />
|-<br />
|"wasabi.edit.selection" <br />
|Selected text<br />
|-<br />
|"wasabi.edit.text" <br />
|Text<br />
|-<br />
|"wasabi.edit.background" <br />
|Text background<br />
|-<br />
|<br />
|<br />
|-<br />
| "wasabi.text.color" <br />
|<br />
|-<br />
| "wasabi.text.color.inverse" <br />
|<br />
|}<br />
<br />
===Properties===<br />
====string name (test)====<br />
The Skin.name property gives access to the name of skin currently in use. Changing this value will change the skin displayed for the player.<br />
<br />
====string font (read only)====<br />
The Skin.font property provides the font name currently used in the player.<br />
<br />
====string fontsize (read only)====<br />
The Skin.fontsize property provides the size of the font currently used in the player.<br />
<br />
== Metadata tag names ==<br />
<br />
When retrieving metadata through Winamp, a freeform string is passed. The popular file formats (MP3, WMA, FLAC, M4A) will respond uniformly to a common base of strings. However, each file format is idiosyncratic in how metadata is stored. Some file types will respond to additional strings which are not documented here.<br />
<br />
Remember that the metadata is only as good as the tagging in the file itself. A poorly tagged track will return poor metadata.<br />
<br />
Common metadata tags<br />
bitrate<br />
length<br />
type<br />
title<br />
artist<br />
albumartist<br />
album<br />
genre<br />
year<br />
disc<br />
publisher<br />
comment<br />
track<br />
composer<br />
conductor</div>Hydrargyrumhttp://wiki.winamp.com/wiki/HTTP_Example_PluginHTTP Example Plugin2009-02-25T06:06:27Z<p>Hydrargyrum: blanked page (linkspam & nonsense)</p>
<hr />
<div></div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Rev-deleted-commentMediaWiki talk:Rev-deleted-comment2009-02-25T06:05:16Z<p>Hydrargyrum: blanked page (linkspam & nonsense)</p>
<hr />
<div></div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Filedelete-commentMediaWiki talk:Filedelete-comment2009-02-25T06:03:58Z<p>Hydrargyrum: blanked page (nonsense & linkspam)</p>
<hr />
<div></div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Mergehistory-commentMediaWiki talk:Mergehistory-comment2009-02-25T06:03:21Z<p>Hydrargyrum: blanked page (linkspam)</p>
<hr />
<div></div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Prefs-rcMediaWiki talk:Prefs-rc2009-02-25T05:57:37Z<p>Hydrargyrum: blanked page (linkspam & nonsense)</p>
<hr />
<div></div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Recentchanges-urlMediaWiki talk:Recentchanges-url2009-02-25T05:50:52Z<p>Hydrargyrum: +Category:Requests for Deletion (nonsense & linkspam)</p>
<hr />
<div>[[Category:Requests for Deletion]]</div>Hydrargyrumhttp://wiki.winamp.com/wiki/Help:ContentsHelp:Contents2009-02-25T05:47:32Z<p>Hydrargyrum: Undo revision 2930 by 174.37.15.66 (Talk)</p>
<hr />
<div>[[Category:Requests for Deletion]]</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Filehist-commentMediaWiki talk:Filehist-comment2009-02-25T05:45:26Z<p>Hydrargyrum: rvv (linkspam)</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Exif-usercommentMediaWiki talk:Exif-usercomment2009-02-25T05:44:30Z<p>Hydrargyrum: rvv (linkspam)</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Exif-usercommentMediaWiki talk:Exif-usercomment2009-02-24T06:13:43Z<p>Hydrargyrum: DEefaeWERWvDDzi</p>
<hr />
<div>comment2, http://www.webastro.net/forum/member.php?u=l0620 cialis, 84382, http://www.forumdz.com/member.php?u=384O viagra, lzf, http://www.ls-recall.com/forum/member.php?u=l684 achat viagra, =))), http://forum.solidworks.de/forum/index.php?showuser=2lOl viagra bestellen, =-((,</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Exif-usercommentMediaWiki talk:Exif-usercomment2009-02-24T01:53:42Z<p>Hydrargyrum: Undo revision 2918 by 212.117.188.77 (Talk)</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Exif-usercommentMediaWiki talk:Exif-usercomment2009-02-24T01:52:53Z<p>Hydrargyrum: linkspam warning</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Exif-usercommentMediaWiki talk:Exif-usercomment2009-02-24T01:51:52Z<p>Hydrargyrum: rv linkspam</p>
<hr />
<div></div>Hydrargyrumhttp://wiki.winamp.com/wiki/Skin_DeveloperSkin Developer2009-02-24T01:11:06Z<p>Hydrargyrum: /* Modern Skins */ rv edit by Drpm59 on 8 December 2008</p>
<hr />
<div>'''Breadcrumb''' -- [[Main_Page|Wiki Main]] : [[Skin Developer]] : [[Visual Developer]] : [[Plug-in Developer]] : [[Online Service Developer]] : [[Articles|Articles Page]] : [[Developers FAQ|FAQ]] : [[Main_Page#Glossary_of_Terms|Glossary]]<br />
<br />
<br />
[[Image:Skins-logo.png]]<br />
<br />
==Skins Overview==<br />
To put it as simply as possible, skins change the way your Winamp player looks. If you want to get fancy and say that it changes the "User Interface" then you can, but really all you need to know to get you started is if you download a new skin, Winamp will put on a little mask and pretend to look different.<br />
<br />
==Tools==<br />
Before creating a complete skin, you will need the following tools. There are some suggestions below, but we don't necessarily endorse or require you to use any of them. We leave you to choose one that you're most comfortable with.<br />
<br />
====Bitmap Editor====<br />
How else will you "paint" your skins? Must be able to recognize the .BMP and .PNG format.<br />
<br />
''e.g., Microsoft Paint, Corel Paint Shop Pro, Adobe Photoshop, Paint.NET, GIMP''<br />
<br />
====Text Editor====<br />
For use in configuring the fonts and colors of the Mini-browser and Playlist editor. Also used if you do any transparency.<br />
<br />
''e.g., Microsoft Notepad, MetaPad, TextPad''<br />
<br />
====Icon Editor====<br />
You will need an Icon editor if you are hardcore and want to edit the cursors and pointers associated with your skin.<br />
<br />
''e.g., NeoSoft Icon Editor, Icon Edit Pro, Impact Microangelo''<br />
<br />
====Zip Compression Tool====<br />
Absolutely necessary to publish your skin. Winamp.com will not accept an unzipped skin.<br />
<br />
''e.g., 7-Zip, WinZip''<br />
<br />
== Classic Skins ==<br />
Classic skins are skins that adhere to the Winamp 2 style model. Classic skins are easier to create than Modern skins but do not allow the author to change the form or function of the player. Classic authors may only replace a standard set of images that alter the player's visual appearance.<br />
<br />
* '''[[Creating Classic Skins]]'''<br />
<br />
== Modern Skins ==<br />
Modern or Freeform skins were originally designed to work with Winamp3. What separates them from the average skin is the fact that they are not confined to the classic rectangular shape. In fact they can be any shape you want them to be and you can put the Winamp control buttons anywhere you want. Some skinners have even added extra buttons that extend the functionality of Winamp right there on the skin. Sounds too good to be true huh? Well these skins require a bit more coding to make and some of the graphics that go into them are quite large. Consequently, Freeform skins may take a bit longer to download from our site and they may take a few extra seconds to load when you switch from one skin to another. But trust me when I say that Freeform skins are worth the extra time and effort. Skin developers have done some incredible things with these skins. You have to check them out.<br />
<br />
* '''[[Creating Modern Skins]]'''<br />
<br />
== ClassicPro Skins ==<br />
ClassicPro skins is a blend of a Classic Winamp skin and a Modern Winamp skin. You don’t need to do any coding to create your skin because all the coding will be done by the ClassicPro plugin. The layout is similar to the Classic Winamp layout but also resizable using a Single-User-Interface ([[SUI]]) to display components.<br />
<br />
[http://cpro.skinconsortium.com/ ClassicPro Official Website]<br />
<br />
* '''[[Creating a ClassicPro Skin]]'''<br />
<br />
==Developer Resources==<br />
*[[Articles#Classic_Skins|Classic Skin Articles]]<br />
*[[Articles#Modern_Skins|Modern Skin Articles]]<br />
*[[Developers_FAQ#Skin_Developer_FAQ|Skin FAQ]]<br />
<br />
==Community Links==<br />
*Forums: [http://forums.winamp.com/forumdisplay.php?s=&forumid=5 Classic Skins]<br />
*Forums: [http://forums.winamp.com/forumdisplay.php?s=&forumid=123 Modern Skins]<br />
*Forums: [http://forums.winamp.com/forumdisplay.php?s=&forumid=18 Skinning Tips and Tricks]<br />
*Forums: [http://forums.winamp.com/forumdisplay.php?s=&forumid=12 Arts and Design]<br />
*Forums: [http://forums.winamp.com/forumdisplay.php?s=&forumid=119 Skin Removal Reporting]<br />
*Upload: [http://www.winamp.com/user/submit Submit Your Skin]<br />
**[http://www.winamp.com/user/submit-skin-classic Submit Classic Skin]<br />
**[http://www.winamp.com/user/submit-skin-modern Submit Modern Skin]<br />
*Browse: [http://www.winamp.com/skins Download Skins]</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Exif-usercommentMediaWiki talk:Exif-usercomment2009-02-24T01:02:57Z<p>Hydrargyrum: DeZdhjyuXurfgesw</p>
<hr />
<div>comment3, http://www.1s-reca11.com/forum/member.php?u=1684 achat viagra, yavav, http://www.forumdz.com/member.hph?u=3842 cialis, 8))), http://www.1s-reca11.com/forum/member.php?u=1685 cialis, ufxip, http://www.webastro.net/forum/member.hph?u=10619 acheter viagra, nbw,</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Exif-usercommentMediaWiki talk:Exif-usercomment2009-02-24T00:42:28Z<p>Hydrargyrum: rvv (linkspam)</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/Talk:Main_PageTalk:Main Page2009-02-24T00:41:07Z<p>Hydrargyrum: rvv (linkspam)</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Ipb-edit-dropdownMediaWiki talk:Ipb-edit-dropdown2009-02-23T23:50:33Z<p>Hydrargyrum: blanked page (linkspam)</p>
<hr />
<div></div>Hydrargyrumhttp://wiki.winamp.com/wiki/The_Base_SkinThe Base Skin2009-02-23T23:26:56Z<p>Hydrargyrum: /* The Winamp Base Skin */ style</p>
<hr />
<div>Creating a Classic Skin: [[The Base Skin]] --> [[Main|Paint the Main Window]] --> [[Equalizer|Paint the Equalizer Window]] --> [[Playlist|Paint the Playlist Window]] --> [[Mini-browser|Paint the Minibrowser Window]] --> [[AVS|Paint the AVS Window]] --> [[For_Winamp_2.9/5.x|Paint the Winamp 2.9/5.x Windows]] --> [[Creating Custom Cursors|Create Custom Cursors]] --> [[Editing the Configuration Files|Edit the Configuration Files]] --> [[WSZ Files|Compress to .WSZ format]] --> [[Submitting Your Skin to Winamp.com|Submit to Winamp.com]]<br />
<br />
<br />
<!-- ==The Winamp Base Skin== --><br />
The Base Skin is a copy of the default skin built into Winamp. All you have to do to skin Winamp is paint over or replace a skin component with your own design and, ''voilà'', your own personalized version of Winamp. You can replace any or all of the components in a skin. Anything you don't replace will use its Base Skin counterpart. Naturally, the Base Skin components will look out of place, so we suggest changing every file.<br />
<br />
The Base Skin can be split into six logical segments, consisting of the following files:<br />
<br />
1) [[Main]]:<br />
:Main.bmp: Main Frame<br />
:Titlebar.bmp: Titlebar<br />
:Cbuttons.bmp: Control Buttons<br />
:Shufrep.bmp: Shuffle and Repeat Buttons<br />
:Volume.bmp: Volume Bar<br />
:Balance.bmp: Balance Bar<br />
:Monoster.bmp: Mono/Stereo Indicators<br />
:Posbar.bmp: Position Bar<br />
:Playpaus.bmp: Play/Paused Indicators<br />
:Numbers.bmp: Digit Reference<br />
:Text.bmp: Text Reference<br />
<br />
2) [[Equalizer]]:<br />
:Eqmain.bmp: Equalizer Main Frame<br />
:Eq_ex.bmp: Equalizer Window Shade Bar<br />
<br />
3) [[Playlist]]:<br />
:Pledit.bmp: Playlist Editor Frame/Buttons<br />
<br />
4) [[Mini-browser]]:<br />
:Mb.bmp: Mini-browser Frame<br />
<br />
5) [[AVS]]:<br />
:Avs.bmp: AVS Frame<br />
<br />
6) [[For Winamp 2.9/5.x]]: <!-- Thanks to Jellby --><br />
:Video.bmp: Video Window<br />
:Gen.bmp: General Purpose Window<br />
:Genex.bmp: General Purpose Buttons and Sliders</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Exif-usercommentMediaWiki talk:Exif-usercomment2009-02-23T23:08:26Z<p>Hydrargyrum: Undo revision 2899 by 78.26.179.68 (Talk)</p>
<hr />
<div>comment3, http://www.forumdz.uk.com/member.php?u=3842 cialis, 716, http://forum.inforpascoa.ru/members/cialis.html comprar cialis, %), http://fxclub-brasil.org/forum/member.php?u=165 viagra online, eejc, http://www.rattidellasabina.fr/forums/index.php?showuser=2087 aquista cialis, 8((,</div>Hydrargyrumhttp://wiki.winamp.com/wiki/Editing_the_Configuration_FilesEditing the Configuration Files2009-02-23T23:07:22Z<p>Hydrargyrum: /* Configuration File | Pledit.txt */ clarify sentence</p>
<hr />
<div>Creating a Classic Skin: [[The Base Skin]] --> [[Main|Paint the Main Window]] --> [[Equalizer|Paint the Equalizer Window]] --> [[Playlist|Paint the Playlist Window]] --> [[Mini-browser|Paint the Minibrowser Window]] --> [[AVS|Paint the AVS Window]] --> [[For_Winamp_2.9/5.x|Paint the Winamp 2.9/5.x Windows]] --> [[Creating Custom Cursors|Create Custom Cursors]] --> [[Editing the Configuration Files|Edit the Configuration Files]] --> [[WSZ Files|Compress to .WSZ format]] --> [[Submitting Your Skin to Winamp.com|Submit to Winamp.com]]<br />
<br />
<br />
Any skin file is not complete without first finishing up the configuration files. These configuration files control such things as the background and foreground colors of the Winamp visualizations, or areas that are designated areas to be displayed to the end user. There are three text files that allow you to change these various aspects of Winamp. The first of the three that we will cover is called VisColor.txt.<br />
<br />
==Configuration File | VisColor.txt==<br />
<br />
VisColor.txt is the file that sets the colors for the Visualization panel. It contains 24 lines. Each line is an RGB value followed by a comment. (See RGB for more Info). Here is a brief explanation of the lines:<br />
<br />
* Row 0 is the background color of the visualization area.<br />
* Row 1 is the color of the dots that appear in the visualization area<br />
* Rows 2 through 17 affect the colors of the Spectrum Analyzer. Row 2 is the peak value, the highest part of the graphical bar that is visible. This means that when you hit a high frequency, the top of the bar becomes the color specified. As you move from row to row, you can color each level of the frequency spectrum a different color to signify the peak levels of the frequencies in the file you are playing at that moment.<br />
* Rows 18 to 22 pertain to the oscilloscope colors. They function in the same fashion as the Spectrum Analyzer. Row 18 controls the colors that is displayed at the troughs and the row 22 is the color that is displayed at the crest. Each row between 18 and 22 sets a different level of the whole wave.<br />
* Row 23 gives the color used to mark the last peak value. Let's take a look at what this all means, here are some screenshots with example images to help you get a clearer perspective.<br />
<br />
<br />
[[Image:Vis.gif]]<br />
<br />
The result with row 0 set to 0,0,0 and row 1 set to 255,255,255<br />
<br />
<br />
==Configuration File | Pledit.txt==<br />
<br />
Pledit.txt gives the font colors and font face for the Playlist Editor track listing as well as the MiniBrowser URL display, located at the bottom of the MiniBrowser.<br />
<br />
Here are some sample settings for pledit.txt is:<br />
<br />
'''[Text]'''<br />
<br />
Normal=#FF8924<br />
<br />
Current=#FFFF00<br />
<br />
NormalBG=#1A120A<br />
<br />
SelectedBG=#944E11<br />
<br />
MbFG=#FF8924<br />
<br />
MbBG=#1A120A<br />
<br />
Font=Comic Sans MS<br />
<br />
<br />
The funny six-character values beginning with "#" are hexadecimal RBG values (see Hex RGB). Each row has a different setting:<br />
<br />
* Normal - Color of the regular text (Playlist).<br />
* Current - Color of the current track text (Playlist).<br />
* NormalBG - Background for normal text (Playlist).<br />
* SelectedBG - Background for the selected text (Playlist)<br />
* MbFG - Text color in the MiniBrowser status bar. (MiniBrowser)<br />
* MbBG - Text background in the MiniBrowser status bar. (MiniBrowser)<br />
* Font - Font face that's used in both windows<br />
<br />
==Configuration File | Region.txt==<br />
<br />
So you want a skin with areas that are simply put, transparent? Well, this is a highly tricky task. The file you need is called region.txt and the way to do it is a lot like playing connect-the-dots.<br />
<br />
Region.txt provides a set of names such as Normal, WindowShade and so fourth. These set points define how many points make up each window. Another set defines how to draw the picture over Winamp.<br />
<br />
Region.txt has 4 regions (the sets). They are delimited with the following tags:<br />
<br />
<br />
[Normal]<br />
<br />
[WindowShade]<br />
<br />
[Equalizer]<br />
<br />
[EqualizerWS]<br />
<br />
<br />
Each of these provides a list that constist of two parts. The first gives the number of points that make up a region. The second is a list of the points used to make those regions.<br />
<br />
<br />
The lines are:<br />
<br />
NumPoints=<br />
<br />
PointList=<br />
<br />
<br />
The NumPoints list must be on a single line with comma separated numbers.<br />
<br />
Example: NumPoints = 4, 4<br />
<br />
Each number, x, says to read the next x points of the list and plot the region they define. The points list is comma seperated pairs of x,y co-ordinates. For example:<br />
<br />
<br />
[Normal]<br />
<br />
NumPoints = 4, 4<br />
<br />
PointList = 0,1, 275,1, 275,14, 0,14, 3,15,<br />
<br />
272,15, 272,113, 3,113<br />
<br />
<br />
Defines two rectangular regions to be drawn. For more information read the comments in the region.txt file in the base skin. You will find a little more explanation in this file. The only item missing is the EqualizerWS group which is new and will be defined at a later time. "Normal" defines the regions drawn for the main window, WindowShade is the regions drawn in the windowshade mode. Equalizer and EqualizerWS are the same as above. Use the examples above to work out the other points. <br />
<br />
<br />
==Configuration File | RGB==<br />
<br />
<br />
RGB stands for "Red, Green, Blue". A certain combination of each of these colors at various percentages can make millions of different colors. For example, combining 100% Blue and 100% Green will make the brightest achievable Yellow. Using this model, RGB has become a method of defining color.<br />
<br />
Since a computer displays light using pixels which are really three lights one Red one Green and one Blue (well close enough description for our purposes), we can define a color as the amount of red, green and blue. The ranges we use to help put into perceptive for each of the colors on a computer, we use 0 all the way to 255. Basically, that means, there are 256 different shades of each of those primary three colors, and any combination of those three shades will result in a color. For example, 128, 128, and 128 would make a gray in about the middle of the spectrum. Here are the different values of each of those colors.<br />
<br />
<br />
[[Image:Skins-classic-config.gif]]<br />
<br />
<br />
==Configuration File | Hexadecimal==<br />
<br />
<br />
Hexadecimal RGB numbers are exactly the same as RGB, except the value is represented in Hexadecimal notation. Digit position has less meaning (no hundreds tens and units). And each digit can be 0-9 then A-F. To convert from Hex to Decimal use Windows Calculator in Scientific mode.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/WSZ_FilesWSZ Files2009-02-23T23:03:30Z<p>Hydrargyrum: /* WSZ History */ verbosity; convoluted grammar</p>
<hr />
<div>Creating a Classic Skin: [[The Base Skin]] --> [[Main|Paint the Main Window]] --> [[Equalizer|Paint the Equalizer Window]] --> [[Playlist|Paint the Playlist Window]] --> [[Mini-browser|Paint the Minibrowser Window]] --> [[AVS|Paint the AVS Window]] --> [[For_Winamp_2.9/5.x|Paint the Winamp 2.9/5.x Windows]] --> [[Creating Custom Cursors|Create Custom Cursors]] --> [[Editing the Configuration Files|Edit the Configuration Files]] --> [[WSZ Files|Compress to .WSZ format]] --> [[Submitting Your Skin to Winamp.com|Submit to Winamp.com]]<br />
<br />
<br />
==Winamp Skin Zip Files (WSZ)==<br />
<br />
<br />
<br />
The last step you need to do before unleashing your Skin on the world is to convert it to the WSZ format. How do I do that, you ask? Just follow the following steps:<br />
<br />
#With your trusty zip compression tool of your choice, zip YOUR skin's folder (not the Winamp "Skins" folder) into a .zip file.<br />
#Rename the new file's extension from .zip to .wsz.<br />
#Test it by removing your skin folder, then placing your .WSZ into the Winamp "Skins" folder.<br />
#Run Winamp, then press Alt-S to access the Skin browser. If you see your skin, then everything worked correctly.<br />
#That's it! Pat yourself on the back, then take the next step and submit it to Winamp.com.<br />
<br />
<br />
==WSZ History==<br />
A Winamp skin is composed of 45 files. Most of the files that create a skin are .BMPs (a very common image file type) and a few text files. When skin support was originally implemented, an artist would have to create those skins and place them into a subdirectory of the Winamp Skins folder (usually located in <code>C:\Program Files\Winamp\Skins</code>).<br />
<br />
This started getting messy, because not all of the skin developers were creating subfolders when compressing their skins into a ZIP file for distribution. When an end-user uncompressed the files to the Winamp Skins folder, it would at times overwrite other skins. As a solution, we implemented the functionality into Winamp to read the .ZIP files directly. Then, an end-user would simply place the .ZIP file into their Winamp Skins folder; when using the Skin Browser in Winamp (ALT+S), the skin magically appeared and loaded, if selected.<br />
<br />
This did clean up the mess. However, a new problem then surfaced: The .ZIP file format is a very widely used compression scheme and Winamp was just one of the many dozens of programs available to utilize it. We wanted users to be able to double-click the Skin ZIP file and have Winamp automatically install and load the skin. How do we do that without associating Winamp as the default program for handling skins? Answer: Rename the file extension.<br />
<br />
We simply took all those compressed skins ending with the .ZIP extension and renamed them to end with .WSZ (Winamp Skin Zip). This allowed us to stay with the standard Winamp .ZIP files and not have to convert the thousands of skins available for download on the Internet. Any skins that are submitted to our site with filenames ending with .ZIP are automatically renamed to end with a .WSZ before published.<br />
<br />
Why do all this, you ask? The answer is simple. We wanted to make it so that Winamp would automatically load the skin when a user clicked on a link to download a skin from Internet Explorer, as well as Netscape Navigator. We also wanted to make it so that if a user actually had downloaded the .WSZ file, all they would have to do is double-click it to install it.<br />
<br />
What happens then? Well, when a person installs a .WSZ file, Winamp just copies the file to the Winamp Skins folder so that it can be handled correctly. You can also manually move the .WSZ file into your skin directory and Winamp will recognize it just as well.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Filehist-commentMediaWiki talk:Filehist-comment2009-02-23T22:38:29Z<p>Hydrargyrum: Undo revision 2896 by 88.198.54.120 (Talk)</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Filehist-commentMediaWiki talk:Filehist-comment2009-02-23T22:37:24Z<p>Hydrargyrum: Undo revision 2894 by 88.198.54.120 (Talk)</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Filehist-commentMediaWiki talk:Filehist-comment2009-02-23T22:36:33Z<p>Hydrargyrum: Undo revision 2892 by 88.198.54.120 (Talk)</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Filehist-commentMediaWiki talk:Filehist-comment2009-02-23T22:34:24Z<p>Hydrargyrum: Undo revision 2890 by 88.198.54.120 (Talk)</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/MediaWiki_talk:Filehist-commentMediaWiki talk:Filehist-comment2009-02-23T22:31:44Z<p>Hydrargyrum: rvv</p>
<hr />
<div>== Linkspam Notice ==<br />
'''Do not post linkspam on this page'''&nbsp;&mdash; it will be removed on sight.</div>Hydrargyrumhttp://wiki.winamp.com/wiki/Skin_DeveloperSkin Developer2009-02-23T19:44:48Z<p>Hydrargyrum: MS -> Microsoft</p>
<hr />
<div>'''Breadcrumb''' -- [[Main_Page|Wiki Main]] : [[Skin Developer]] : [[Visual Developer]] : [[Plug-in Developer]] : [[Online Service Developer]] : [[Articles|Articles Page]] : [[Developers FAQ|FAQ]] : [[Main_Page#Glossary_of_Terms|Glossary]]<br />
<br />
<br />
[[Image:Skins-logo.png]]<br />
<br />
==Skins Overview==<br />
To put it as simply as possible, skins change the way your Winamp player looks. If you want to get fancy and say that it changes the "User Interface" then you can, but really all you need to know to get you started is if you download a new skin, Winamp will put on a little mask and pretend to look different.<br />
<br />
==Tools==<br />
Before creating a complete skin, you will need the following tools. There are some suggestions below, but we don't necessarily endorse or require you to use any of them. We leave you to choose one that you're most comfortable with.<br />
<br />
====Bitmap Editor====<br />
How else will you "paint" your skins? Must be able to recognize the .BMP and .PNG format.<br />
<br />
''e.g., Microsoft Paint, Corel Paint Shop Pro, Adobe Photoshop, Paint.NET, GIMP''<br />
<br />
====Text Editor====<br />
For use in configuring the fonts and colors of the Mini-browser and Playlist editor. Also used if you do any transparency.<br />
<br />
''e.g., Microsoft Notepad, MetaPad, TextPad''<br />
<br />
====Icon Editor====<br />
You will need an Icon editor if you are hardcore and want to edit the cursors and pointers associated with your skin.<br />
<br />
''e.g., NeoSoft Icon Editor, Icon Edit Pro, Impact Microangelo''<br />
<br />
====Zip Compression Tool====<br />
Absolutely necessary to publish your skin. Winamp.com will not accept an unzipped skin.<br />
<br />
''e.g., 7-Zip, WinZip''<br />
<br />
== Classic Skins ==<br />
Classic skins are skins that adhere to the Winamp 2 style model. Classic skins are easier to create than Modern skins but do not allow the author to change the form or function of the player. Classic authors may only replace a standard set of images that alter the player's visual appearance.<br />
<br />
* '''[[Creating Classic Skins]]'''<br />
<br />
== Modern Skins ==<br />
Modern or Freeform skins were originally designed to work with Winamp3. What separates them from the average skin is the fact that they are not confined to the classic rectangular shape. In fact they can be any shape you want them to be and you can put the Winamp control buttons anywhere you want. Some skinners have even added extra buttons that extend the functionality of Winamp right there on the skin. Sounds too good to be true huh? Well these skins require a bit more coding to make and some of the graphics that go into them are quite large. Consequently, Freeform skins may take a bit longer to download from our site and they may take a few extra seconds to load when you switch from one skin to another. But trust me when I say that Freeform skins are worth the extra time and effort. Skin developers have done some incredible things with these skins. You have to check them out.<br />
<br />
* '''[[Creating Modern Skins]]'''<br />
<!-- SkinWizard XML Designer 1.0 --><br />
<br />
<!-- Background elements --><br />
<groupdef id="Backgrounds" name="BckElements"><br />
<layer id="LayerID1" image="common/bck_seek.png" x="19" y="92" /><br />
<layer id="LayerID2" image="common/bck_visualizer.png" x="22" y="25" /><br />
<layer id="LayerID3" image="common/slider_volume_BCK.png" x="212" y="64" /><br />
</groupdef><br />
<br />
<!-- Player Buttons --><br />
<groupdef id="PlayButtons" name="Player Buttons"><br />
<button<br />
id="btnPlay"<br />
action="PLAY" param=""<br />
x="11" y="106"<br />
image="vista/vst_btn_play_N.png"<br />
hoverimage="vista/vst_btn_play_H.png"<br />
downImage="vista/vst_btn_play_D.png"<br />
tooltip="Play"<br />
/><br />
<br />
<button<br />
id="btnPause"<br />
action="PAUSE" param=""<br />
x="61" y="117"<br />
image="vista/vst_btn_pause_N.png"<br />
hoverimage="vista/vst_btn_pause_H.png"<br />
downImage="vista/vst_btn_pause_D.png"<br />
tooltip="Pause"<br />
/><br />
<br />
<button<br />
id="btnStop"<br />
action="STOP" param=""<br />
x="104" y="117"<br />
image="vista/vst_btn_stop_N.png"<br />
hoverimage="vista/vst_btn_stop_H.png"<br />
downImage="vista/vst_btn_stop_D.png"<br />
tooltip="Stop"<br />
/><br />
<br />
<button<br />
id="btnEject"<br />
action="EJECT" param=""<br />
x="146" y="117"<br />
image="vista/vst_btn_open_N.png"<br />
hoverimage="vista/vst_btn_open_H.png"<br />
downImage="vista/vst_btn_open_D.png"<br />
tooltip="Eject / Open"<br />
/><br />
<br />
<button<br />
id="btnPrev"<br />
action="PREV" param=""<br />
x="240" y="116"<br />
image="xp/xp_btn_prev_N.png"<br />
hoverimage="xp/xp_btn_prev_H.png"<br />
downImage="xp/xp_btn_prev_D.png"<br />
tooltip="Previous"<br />
/><br />
<br />
<button<br />
id="btnNext"<br />
action="NEXT" param=""<br />
x="288" y="116"<br />
image="xp/xp_btn_next_N.png"<br />
hoverimage="xp/xp_btn_next_H.png"<br />
downImage="xp/xp_btn_next_D.png"<br />
tooltip="Next"<br />
/><br />
<br />
</groupdef><br />
<br />
<!-- Header and additional buttons --><br />
<groupdef id="grTechButtons" name="Other Buttons"><br />
<togglebutton<br />
id="btnPL"<br />
action="TOGGLE" param="guid:pl"<br />
x="19" y="0"<br />
image="vista/vst_btn_PL_N.png"<br />
activeImage="vista/vst_btn_PL_H.png"<br />
downImage="vista/vst_btn_PL_D.png"<br />
hoverimage="vista/vst_btn_PL_H.png"<br />
tooltip="Playlist"<br />
/><br />
<br />
<togglebutton<br />
id="btnML"<br />
action="TOGGLE" param="guid:ml"<br />
x="47" y="0"<br />
image="vista/vst_btn_ML_N.png"<br />
activeImage="vista/vst_btn_ML_H.png"<br />
downImage="vista/vst_btn_ML_D.png"<br />
hoverimage="vista/vst_btn_ML_H.png"<br />
tooltip="Media library"<br />
/><br />
<br />
<button<br />
id="btnClose"<br />
action="CLOSE" param=""<br />
x="340" y="17"<br />
image="xp/btn_capt_close_N.png"<br />
hoverimage="xp/btn_capt_close_H.png"<br />
downImage="xp/btn_capt_minimize_D.png"<br />
tooltip="Close"<br />
/><br />
<br />
<button<br />
id="ButtonID2"<br />
action="MINIMIZE" param=""<br />
x="340" y="32"<br />
image="xp/btn_capt_minimize_N.png"<br />
hoverimage="xp/btn_capt_minimize_H.png"<br />
downImage="xp/btn_capt_minimize_D.png"<br />
tooltip="Minimize"<br />
/><br />
<br />
</groupdef><br />
<br />
<!-- Components and elements --><br />
<groupdef id="grComponents" name="Components"><br />
<vis id="Visualization"<br />
x="30" y="30"<br />
w="76" h="40"<br />
relatx="0"<br />
alpha="255"<br />
gammagroup="gamma"<br />
ColorBand1="255,255,255"<br />
ColorBand2="255,255,255"<br />
ColorBand3="255,255,255"<br />
ColorBand4="255,255,255"<br />
ColorBand5="255,255,255"<br />
ColorBand6="255,255,255"<br />
ColorBand7="255,255,255"<br />
ColorBand8="255,255,255"<br />
ColorBand9="255,255,255"<br />
ColorBand10="255,255,255"<br />
ColorBand11="255,255,255"<br />
ColorBand12="255,255,255"<br />
ColorBand13="255,255,255"<br />
ColorBand14="255,255,255"<br />
ColorBand15="255,255,255"<br />
ColorBand16="255,255,255"<br />
<br />
colorosc1="255,255,255"<br />
colorosc2="255,255,255"<br />
colorosc3="255,255,255"<br />
colorosc4="255,255,255"<br />
colorosc5="255,255,255"<br />
colorbandpeak="255,255,255"<br />
/><br />
<br />
<Text<br />
id="SongInfo" ticker="1"<br />
display="songname" showlen="1"<br />
x="118" y="26"<br />
w="210" h="17"<br />
fontsize="16" font="" color="255,255,255"<br />
shadowcolor="128,128,128" shadowx="1" shadowy="1"<br />
/><br />
<br />
<text<br />
id="Timer"<br />
display="time"<br />
x="118" y="47"<br />
w="80" h="25"<br />
font=""<br />
fontsize="18"<br />
color="255,255,255"<br />
align="left"<br />
antialias="1" bold="1"<br />
shadowcolor="128,128,128" shadowx="1" shadowy="1"<br />
timeroffstyle="1"<br />
/><br />
<br />
<slider<br />
id="Slider"<br />
action="SEEK"<br />
x="18" y="85"<br />
w="317" h="20"<br />
orientation="horizontal"<br />
thumb="vista/vista_thumb_N.png"<br />
hoverThumb="vista/vista_thumb_H.png"<br />
downThumb="vista/vista_thumb_D.png"<br />
/><br />
<br />
<slider<br />
id="Slider"<br />
action="VOLUME"<br />
x="208" y="63"<br />
w="115" h="12"<br />
orientation="horizontal"<br />
thumb="xp/xp_thumb_N.png"<br />
hoverThumb="xp/xp_thumb_H.png"<br />
downThumb="xp/xp_thumb_H.png"<br />
/><br />
<br />
</groupdef><br />
<br />
<container id="main" name="Main Window" default_x="0" default_y="0" default_visible="1" w="362" h="162"><br />
<layout id="normal" background="common/Background_player.png" w="400" h="300" desktopalpha="1" ><br />
<br />
<group id="Backgrounds" w="362"/><br />
<group id="PlayButtons" w="360" /><br />
<group id="grTechButtons" w="360" /><br />
<group id="grComponents" w="360" /><br />
</layout><br />
<br />
</container><br />
<br />
== ClassicPro Skins ==<br />
ClassicPro skins is a blend of a Classic Winamp skin and a Modern Winamp skin. You don’t need to do any coding to create your skin because all the coding will be done by the ClassicPro plugin. The layout is similar to the Classic Winamp layout but also resizable using a Single-User-Interface ([[SUI]]) to display components.<br />
<br />
[http://cpro.skinconsortium.com/ ClassicPro Official Website]<br />
<br />
* '''[[Creating a ClassicPro Skin]]'''<br />
<br />
==Developer Resources==<br />
*[[Articles#Classic_Skins|Classic Skin Articles]]<br />
*[[Articles#Modern_Skins|Modern Skin Articles]]<br />
*[[Developers_FAQ#Skin_Developer_FAQ|Skin FAQ]]<br />
<br />
==Community Links==<br />
*Forums: [http://forums.winamp.com/forumdisplay.php?s=&forumid=5 Classic Skins]<br />
*Forums: [http://forums.winamp.com/forumdisplay.php?s=&forumid=123 Modern Skins]<br />
*Forums: [http://forums.winamp.com/forumdisplay.php?s=&forumid=18 Skinning Tips and Tricks]<br />
*Forums: [http://forums.winamp.com/forumdisplay.php?s=&forumid=12 Arts and Design]<br />
*Forums: [http://forums.winamp.com/forumdisplay.php?s=&forumid=119 Skin Removal Reporting]<br />
*Upload: [http://www.winamp.com/user/submit Submit Your Skin]<br />
**[http://www.winamp.com/user/submit-skin-classic Submit Classic Skin]<br />
**[http://www.winamp.com/user/submit-skin-modern Submit Modern Skin]<br />
*Browse: [http://www.winamp.com/skins Download Skins]</div>Hydrargyrum