<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>http://wiki.amiga.org/index.php?action=history&amp;feed=atom&amp;title=Sound_Datatype</id>
	<title>Sound Datatype - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.amiga.org/index.php?action=history&amp;feed=atom&amp;title=Sound_Datatype"/>
	<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=Sound_Datatype&amp;action=history"/>
	<updated>2026-04-19T17:34:24Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.9</generator>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=Sound_Datatype&amp;diff=620&amp;oldid=prev</id>
		<title>Admin at 22:17, 30 August 2016</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=Sound_Datatype&amp;diff=620&amp;oldid=prev"/>
		<updated>2016-08-30T22:17:59Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:17, 30 August 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Sound Datatype&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Sound Datatype&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;    &lt;/del&gt;NAME&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/ins&gt;NAME&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	sound.datatype -- root data type for sounds.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	sound.datatype -- root data type for sounds.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;    &lt;/del&gt;FUNCTION&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/ins&gt;FUNCTION&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	The sound.datatype is the super-class for any sound related&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	The sound.datatype is the super-class for any sound related&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l12&quot; &gt;Line 12:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 12:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;    &lt;/del&gt;METHODS&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/ins&gt;METHODS&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;=&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	OM_NEW -- Create a new sound object.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	OM_NEW -- Create a new sound object.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://wiki.amiga.org/index.php?title=Sound_Datatype&amp;diff=617&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;Sound Datatype      NAME  	sound.datatype -- root data type for sounds.       FUNCTION  	The sound.datatype is the super-class for any sound related 	classes.       METHODS  	...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.amiga.org/index.php?title=Sound_Datatype&amp;diff=617&amp;oldid=prev"/>
		<updated>2016-08-30T22:11:12Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Sound Datatype      NAME  	sound.datatype -- root data type for sounds.       FUNCTION  	The sound.datatype is the super-class for any sound related 	classes.       METHODS  	...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Sound Datatype&lt;br /&gt;
&lt;br /&gt;
    NAME&lt;br /&gt;
&lt;br /&gt;
	sound.datatype -- root data type for sounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    FUNCTION&lt;br /&gt;
&lt;br /&gt;
	The sound.datatype is the super-class for any sound related&lt;br /&gt;
	classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    METHODS&lt;br /&gt;
&lt;br /&gt;
	OM_NEW -- Create a new sound object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	OM_GET -- Obtain the value of an attribute.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	OM_SET -- Set the values of multiple attributes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	OM_UPDATE -- Update the values of multiple attributes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	OM_DISPOSE -- Dispose of a sound object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	GM_LAYOUT -- Layout the object and notify the application of the title and size.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	GM_HITTEST -- Determine if the object has been hit with the mouse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	GM_GOACTIVE -- Tell the object to go active.  On SELECTDOWN, the sound will start playing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	GM_HANDLEINPUT -- Handle input.  Currently input (other than SELECTDOWN) doesn't affect the sound.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	GM_RENDER -- Cause the graphic to render.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	DTM_TRIGGER -- Cause an event to occur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
       Possible events are:&lt;br /&gt;
&lt;br /&gt;
	        STM_PLAY   -- Causes the sound to start playing.&lt;br /&gt;
&lt;br /&gt;
	        STM_STOP   -- Causes the currently playing sound to stop and reset.&lt;br /&gt;
&lt;br /&gt;
	        STM_PAUSE  -- Causes the currently playing sound to stop.&lt;br /&gt;
&lt;br /&gt;
	        STM_RESUME -- Causes the currently paused sound to resume.&lt;br /&gt;
&lt;br /&gt;
	        STM_LOCATE -- Causes the current sound to seek to position.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: Subclasses which support streaming data access may support more than just these events.&lt;br /&gt;
&lt;br /&gt;
	    NOTE: For V53.23, STM_PLAY and STM_LOCATE take a parameter of type&lt;br /&gt;
	          ULONG which represents the offset in milliseconds to seek&lt;br /&gt;
	          to.  The default STM_LOCATE implementation will process all &lt;br /&gt;
	          samples up til the seek time and update the SDTA_Position value.&lt;br /&gt;
	          Subclasses may override this behavious but should OM_NOTIFY&lt;br /&gt;
	          the SDTA_Position value when complete.  The standard methods&lt;br /&gt;
	          controlling playback are best called from a Process as these&lt;br /&gt;
	          may invoke DOS calls for file-based streams; unfortunately&lt;br /&gt;
	          button clicks are made on an Intuition task which means they&lt;br /&gt;
	          are often invoked from a Task.  Provision must be made for&lt;br /&gt;
	          this scenario.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	DTM_COPY -- Copy the entire sound to the clipboard as 8SVX.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: Up to and including V40 sound.datatype never stored a valid VoiceHeader with the file. This was fixed in V44.&lt;br /&gt;
&lt;br /&gt;
	          Subclasses which support streaming data access may not support this method.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	DTM_WRITE -- Write the entire sound to a file as 8SVX.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: Up to and including V40 sound.datatype never stored a valid VoiceHeader with the file. This was fixed in V44.&lt;br /&gt;
&lt;br /&gt;
	          Subclasses which support streaming data access may not support this method.&lt;br /&gt;
&lt;br /&gt;
	    NOTE: Beware using DTM_WRITE with a large continuous stream.&lt;br /&gt;
	          The entire sample is processed in memory in order to write&lt;br /&gt;
	          discrete channels efficiently in the 8SVX format.  If&lt;br /&gt;
	          no replay period is available, the stream will not be&lt;br /&gt;
	          written and the operation will fail.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTM_FETCH -- Read the next n bytes of PCM data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: New for V53.23, reads the next block of data into a buffer&lt;br /&gt;
	          supplied by the caller using the sdtFetch structure.&lt;br /&gt;
	          Typically only used by the playback loop but client&lt;br /&gt;
	          applications may use this on non-playing sounds to obtain&lt;br /&gt;
	          the decoded sample data; the default format may be overridden&lt;br /&gt;
	          by supplying required format arguments in the sdtf_AttrList&lt;br /&gt;
	          field.  Flags include an option to retrieve a set number of&lt;br /&gt;
	          samples instead of bytes, using SDTFF_SAMPLES.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    TAGS&lt;br /&gt;
&lt;br /&gt;
	SDTA_VoiceHeader (struct VoiceHeader *)              *OBSOLETE*&lt;br /&gt;
&lt;br /&gt;
	    Set and get the base information for the sound.&lt;br /&gt;
	    VoiceHeader is defined in &amp;lt;datatypes/soundclass.h&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: Up to and including V40 sound.datatype never returned&lt;br /&gt;
	          a valid VoiceHeader for OM_GET and the VoiceHeader data&lt;br /&gt;
	          was ignored in the OM_NEW/OM_SET cases. This was fixed&lt;br /&gt;
	          in V44.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: Starting with V53.23 the VoiceHeader structure is considered&lt;br /&gt;
	          obsolete and should be avoided - it remains purely for&lt;br /&gt;
	          compatibility purposes.  One issue affecting modern sound&lt;br /&gt;
	          formats is the limited sample rate stored using a UWORD&lt;br /&gt;
	          (up to 65535Hz) - which excludes working with, say,&lt;br /&gt;
	          96kHz audio.  Use the SDTA_SamplesPerSec tag for full&lt;br /&gt;
	          exposure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_SoundFormat (struct SoundFormat *) (V53.23)&lt;br /&gt;
	    Set and get the format of the PCM data for the sound class using&lt;br /&gt;
	    a structure rather than individual tags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: When issuing OM_GET for this attribute, ti_Data MUST&lt;br /&gt;
	          contain a valid pointer to a structure pointer. That is:&lt;br /&gt;
	             (struct SoundFormat **). &lt;br /&gt;
	          The structure pointer itself may be NULL, in which case the&lt;br /&gt;
	          structure will be allocated and MUST be released by the caller &lt;br /&gt;
	          using FreeVec()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_Sample (APTR)&lt;br /&gt;
&lt;br /&gt;
	    Set and get the sound data. Starting with V40 the sample data&lt;br /&gt;
	    does not need to be in CHIP memory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Starting with V44 the sample data does not need to start&lt;br /&gt;
	    on a WORD-aligned address. Setting SDTA_Sample to NULL&lt;br /&gt;
	    will stop sound replay if sound.datatype was started&lt;br /&gt;
	    playing with a non-NULL SDTA_Sample parameter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    The SDTA_Sample parameter selects mono playback on any&lt;br /&gt;
	    sound channel that is currently available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: For streaming sound playback, SDTA_LeftSample,&lt;br /&gt;
	          SDTA_RightSample, and SDTA_Sample will all be NULL (V44).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: Starting with V53.23 the semantic data type of this value&lt;br /&gt;
	          is APTR instead of int8*.  Syntactically, it makes no&lt;br /&gt;
	          particular difference as it still points to a byte array, &lt;br /&gt;
	          but the samples therein might not be 8-bit.  Internally,&lt;br /&gt;
	          no assumptions are made as to the contents of the buffer&lt;br /&gt;
	          until necessary and will be determined by the other&lt;br /&gt;
	          formatting tags.  As such, the sound data provided via&lt;br /&gt;
	          this tag is only MONO if the channel settings are not&lt;br /&gt;
	          modified from their default values; where more channels&lt;br /&gt;
	          are specified, the buffer will contain the whole sample&lt;br /&gt;
	          (either interleaved or discrete).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_SampleLength (uint32)&lt;br /&gt;
	    Length of the sound data in bytes. Starting with V44 the&lt;br /&gt;
	    sample data does not need to be an even number of bytes.&lt;br /&gt;
	    Setting SDTA_SampleLength to 0 will stop sound replay.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		The amount of sound data in bytes is calculated with the&lt;br /&gt;
	    simple formula: &amp;lt;number of samples&amp;gt; * &amp;lt;bytes per sample&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Note: Even for stereo samples where you specify both&lt;br /&gt;
	          SDTA_LeftSample and SDTA_RightSample, the SampleLength&lt;br /&gt;
	          still only describes the number of bytes for *one*&lt;br /&gt;
	          sample, as left and right sample must be of even size&lt;br /&gt;
	          anyway.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_Period (uint16)                                 *OBSOLETE*&lt;br /&gt;
	    Set and get the period of the sound (in timing intervals&lt;br /&gt;
	    per sample). This attribute can be used to affect a playing&lt;br /&gt;
	    sound.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Please note that the Classic Amiga audio hardware does not&lt;br /&gt;
	    reliably support playback periods shorter than 124;&lt;br /&gt;
	    sound.datatype will limit the period to valid intervals (V44).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default for this tag is 394.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: Starting with V53.23, the period setting is obsolete.&lt;br /&gt;
	          The period controlled the timing of Paula and can&lt;br /&gt;
	          be supported on newer systems through calculations&lt;br /&gt;
	          involving the sample rate.  Supported as convenience&lt;br /&gt;
	          only - poorly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_Volume (uint16)&lt;br /&gt;
&lt;br /&gt;
	    Set and get the volume of the sound. This attribute can be&lt;br /&gt;
	    used to affect a playing sound.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Valid range is from 0 to 64.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default for this tag is 64.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_Cycles (uint16)&lt;br /&gt;
&lt;br /&gt;
	    Set and get the number of cycles the sound will be played.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default for this tag is 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_SignalTask (struct Task *) (V40)&lt;br /&gt;
&lt;br /&gt;
	    Task to signal when playback has completed, or if&lt;br /&gt;
	    SDTA_Continuous is TRUE, when the next buffer is needed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default for this tag is NULL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_SignalBit (uint32) (V40)                        *OBSOLETE*&lt;br /&gt;
&lt;br /&gt;
	    Signal mask to use with SDTA_SignalTask or 0 to disable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: Due to a bug in sound.datatype V40 SDTA_SignalBit was&lt;br /&gt;
	          actually implemented as a signal mask as opposed to a&lt;br /&gt;
	          bit number. The documentation now reflects this and&lt;br /&gt;
	          recommends the use of SDTA_SignalBitMask instead. If you&lt;br /&gt;
	          intend to use a signal bit number instead of the mask,&lt;br /&gt;
	          use the new V44 tag SDTA_SignalBitNumber below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default for this tag is 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_Continuous (BOOL) (V40)&lt;br /&gt;
&lt;br /&gt;
	    Used to indicate that the sound datatype will be fed a&lt;br /&gt;
	    continuous stream of data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default for this tag is FALSE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_SignalBitMask (uint32) (V44)&lt;br /&gt;
&lt;br /&gt;
	    Signal mask to use with SDTA_SignalTask or 0 to disable.&lt;br /&gt;
	    This tag is an alias for SDTA_SignalBit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default for this tag is 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_SignalBitNumber (int8) (V44)&lt;br /&gt;
&lt;br /&gt;
	    Signal bit to use with SDTA_SignalTask or -1 to disable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default for this tag is -1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_SamplesPerSec (uint32) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    Set and get the replay frequency of a sound (in Hz). This&lt;br /&gt;
	    attribute can be used to affect a playing sound. Unlike the&lt;br /&gt;
	    SDTA_Period tag, which serves the same purpose, this tag&lt;br /&gt;
	    automatically takes the system clock value into account.&lt;br /&gt;
	    Please note that classic Amiga audio hardware does not reliably&lt;br /&gt;
	    support playback rates beyond 28,000 samples per second;&lt;br /&gt;
	    sound.datatype will limit the replay frequency to valid&lt;br /&gt;
	    intervals.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: Prior to V53.23, this value is treated as uint16 and&lt;br /&gt;
	          fails to support sample rates higher than 65kHz.&lt;br /&gt;
	          Starting with V53.23, the value is a full 32-bit number&lt;br /&gt;
	          unless accessed via the VoiceHeader by legacy dtypes.&lt;br /&gt;
&lt;br /&gt;
	          &lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_ReplayPeriod (struct TimeVal *) (V44)&lt;br /&gt;
&lt;br /&gt;
	    Get the replay period, i.e. the time it takes for the&lt;br /&gt;
	    complete sound to be played.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    If the sample size has not been set yet, the Seconds&lt;br /&gt;
	    and Microseconds members will be set to 0.  If the sample&lt;br /&gt;
	    is to be played continuously, both TimeVal members will&lt;br /&gt;
	    be set to 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    New for V53.23, if SDTA_Continuous is TRUE, the subclass is expected&lt;br /&gt;
	    to override the getter of the attribute and supply a valid&lt;br /&gt;
	    number of Seconds and Microseconds, else the default of 0xFFFFFFFF&lt;br /&gt;
	    will be returned in each field.  Failure to set a replay period&lt;br /&gt;
	    prevents the use of DTM_WRITE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: The value returned by SDTA_ReplayPeriod may not match the&lt;br /&gt;
	          maximum value reached in SDTA_Position due to average bytes&lt;br /&gt;
	          per second calculations and block alignments.  Expect&lt;br /&gt;
	          some drift or jitter in the playback clock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_Pan (int8) (V44)&lt;br /&gt;
&lt;br /&gt;
	    Set the stereo panning; this must be set to&lt;br /&gt;
	    a number in the range of -64..64. A value of -64 will&lt;br /&gt;
	    pan the sound to the left channel, silencing the right&lt;br /&gt;
	    channel; a value of 64 will pan the sound to the right&lt;br /&gt;
	    channel and silence the left channel. To centre playback,&lt;br /&gt;
	    use a panning value of 0. The panning value only takes&lt;br /&gt;
	    effect if a stereo sound is being played.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default for this tag is 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_FreeSampleData (BOOL) (V44)&lt;br /&gt;
	    This tag controls whether sound.datatype will call FreeVec()&lt;br /&gt;
	    on the sample data attached to an object. If the&lt;br /&gt;
	    SDTA_Continuous attribute was set to TRUE, sound.datatype will&lt;br /&gt;
	    never free any data attached to an object. It is safe to&lt;br /&gt;
	    attach the same sample to more than one channel as&lt;br /&gt;
	    sound.datatype will make sure that no sample data is&lt;br /&gt;
	    freed twice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default for this tag is TRUE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_LeftSample (int8 *) (V44)                       *OBSOLETE*&lt;br /&gt;
&lt;br /&gt;
	    Set and get the left channel sound data. The sample data does&lt;br /&gt;
	    not need to be in CHIP memory and does not need to start on a&lt;br /&gt;
	    WORD-aligned address.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Setting SDTA_LeftSample to NULL will stop sound replay if&lt;br /&gt;
	    sound.datatype was started playing with a non-NULL&lt;br /&gt;
	    SDTA_LeftSample parameter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    The SDTA_LeftSample parameter alone selects mono playback on&lt;br /&gt;
	    any left sound channel that is currently available. Used together&lt;br /&gt;
	    with the SDTA_RightSample parameter, stereo playback on any&lt;br /&gt;
	    available stereo channels is selected.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    The SDTA_LeftSample parameter takes precedence over the&lt;br /&gt;
	    the SDTA_Sample parameter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: For streaming sound playback, SDTA_LeftSample,&lt;br /&gt;
	          SDTA_RightSample, and SDTA_Sample will all be&lt;br /&gt;
	          NULL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: Starting with V53.23, the explicit reliance on either mono&lt;br /&gt;
	          or stereo samples is removed to permit more channels.&lt;br /&gt;
	          Left and right sample tags are supported but should be&lt;br /&gt;
	          avoided and considered obsolete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_RightSample (int8 *) (V44)                      *OBSOLETE*&lt;br /&gt;
&lt;br /&gt;
	    Set and get the right channel sound data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    The sample data does not need to be in CHIP memory and does&lt;br /&gt;
	    not need to start on a WORD-aligned address. Setting&lt;br /&gt;
	    SDTA_RightSample to NULL will stop sound replay if sound.datatype&lt;br /&gt;
	    was started playing with a non-NULL SDTA_RightSample parameter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    The SDTA_RightSample parameter alone selects mono playback on&lt;br /&gt;
	    any right sound channel that is currently available. Used&lt;br /&gt;
	    together with the SDTA_LeftSample parameter, stereo playback&lt;br /&gt;
	    on any available stereo channels is selected.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    The SDTA_RightSample parameter takes precedence over the&lt;br /&gt;
	    the SDTA_Sample parameter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: For streaming sound playback, SDTA_LeftSample,&lt;br /&gt;
	          SDTA_RightSample, and SDTA_Sample will all be&lt;br /&gt;
	          NULL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: Starting with V53.23, the explicit reliance on either mono&lt;br /&gt;
	          or stereo samples is removed to permit more channels.&lt;br /&gt;
	          Left and right sample tags are supported but should be&lt;br /&gt;
	          avoided and considered obsolete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_SyncSampleChange (BOOL) (V44)&lt;br /&gt;
&lt;br /&gt;
	    If SDTA_Continuous was set to TRUE, sound.datatype will expect&lt;br /&gt;
	    a continuous stream of data to be played. By specifying&lt;br /&gt;
	    &amp;quot;SDTA_SyncSampleChange,TRUE&amp;quot; you request that new sound data&lt;br /&gt;
	    will be played only if the old data has been played completely&lt;br /&gt;
	    (otherwise, playback would restart immediately with the new sound).&lt;br /&gt;
	    If playback is currently in progress, the Task to change the&lt;br /&gt;
	    sample data will be made to wait until playback of the old sound&lt;br /&gt;
	    has finished.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default for this tag is FALSE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	DTA_Immediate (BOOL) (V44)&lt;br /&gt;
&lt;br /&gt;
	    Select and query whether playback should start immediately&lt;br /&gt;
	    after the object has passed the layout process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default for this tag is FALSE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	DTA_Repeat (BOOL) (V44)&lt;br /&gt;
&lt;br /&gt;
	    Select and query whether playback should loop indefinitely,&lt;br /&gt;
	    regardless of the current SDTA_Cycles settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default for this tag is FALSE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_BitsPerSample (uint8) (V53.2)&lt;br /&gt;
&lt;br /&gt;
	    Set and get the actual bitrate of the sample which can be 8,&lt;br /&gt;
	    16 or 32 bits.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    With this tag sound.datatype finally supports handling of&lt;br /&gt;
	    samples &amp;gt;8bit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    If AHI isn't available this tag MUST be set for 16 or 32bit&lt;br /&gt;
	    sound data to get them (poorly) converted to 8bit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default for this tag is 8.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: Starting with V53.23, 24-bit samples are also supported.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_FrameLength (uint32) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    Gets the size in bytes of a single sample frame.  A single frame&lt;br /&gt;
	    contains one sample for each channel in a contiguous series of&lt;br /&gt;
	    bytes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default is number of channels x bytes per sample.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_BlockAlign (uint32) (V53.23)&lt;br /&gt;
	    Sets the number of bytes in an elementary block of sound data.&lt;br /&gt;
	    The block length is the total number of bytes required to&lt;br /&gt;
	    store n-sample frames (n samples per channel) and will typically&lt;br /&gt;
	    fall on a natural boundary calculated as&lt;br /&gt;
	        channels x bytes per sample x samples per block&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Default as shown above.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
	SDTA_SamplesPerBlock (uint32) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    Specifies the number of sample frames within a block of data.&lt;br /&gt;
	    Typically this is one (1) to form a natural block alignment&lt;br /&gt;
	    for linear PCM streams but can be arbitrary.  The number of&lt;br /&gt;
	    samples should not exceed the block alignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to one (1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_AverageBytesPerSec (uint32) (V53.23)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Calculate the average number of bytes per second that is processed&lt;br /&gt;
	    when playing the current sound format.  This value is considered&lt;br /&gt;
	    valid only for uncompressed PCM data streams.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to SDTA_FrameLength x SDTA_SamplesPerSec.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_GET).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_ValidBitsPerSample (uint8) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    Indicates the number of valid bits within the sample.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to SDTA_BitsPerSample.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_HighAligned (BOOL) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    TRUE if the sample value is contained within the most high bits&lt;br /&gt;
	    of the sample value, otherwise FALSE.  Partners with the tag&lt;br /&gt;
	    SDTA_ValidBitsPerSample to indicate how the value should be&lt;br /&gt;
	    interpreted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to TRUE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_LittleEndian (BOOL) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    TRUE if the sample data is in little-endian (Intel) order.&lt;br /&gt;
	    Classic Amiga and OS4.x is big-endian so the data must be&lt;br /&gt;
	    reordered before use.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to FALSE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_FloatingPoint (BOOL) (V53.23)&lt;br /&gt;
&lt;br /&gt;
		TRUE if the samples are stored in floating point format.  For&lt;br /&gt;
	    this to be valid, the SDTA_BitsPerSample value MUST be either&lt;br /&gt;
	    32 or 64 to indicate single or double precision respectively.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to FALSE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_Channels (uint8) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    Specifies the number of channels present within the sound data.&lt;br /&gt;
	    Prior to V53.23, the number of channels was either one (MONO) or&lt;br /&gt;
	    two (stereo) - which was intrinsically determined by the tags&lt;br /&gt;
	    supplying SDTA_Sample, SDTA_LeftSample and SDTA_RightSample.&lt;br /&gt;
	    Starting with V53.23, the number of channels has exploded to&lt;br /&gt;
	    ridiculous proportions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to one (1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_ChannelLayout (uint32) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    Presents the intrinsic layout of the sound in relation to its&lt;br /&gt;
	    channels and intended purpose.  The intention of the layout&lt;br /&gt;
	    is to accomodate as many existing formats and encodings as is&lt;br /&gt;
	    possible.  When set to SOUNDMAP_USE_MASK, the value in the&lt;br /&gt;
	    SDTA_ChannelMask is used to determine the channels and their&lt;br /&gt;
	    position in the sound.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to SOUNDMAP_USE_MASK.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    NOTE: For V53.23 (initial release) use the nominally supported&lt;br /&gt;
	          value of SOUNDMAP_USE_MASK only.  Future releases will&lt;br /&gt;
	          hopefully provide better support for channel mapping.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_ChannelMask (uint32) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    Related to the SDTA_ChannelLayout tag, the value presented&lt;br /&gt;
	    here is only considered when the channel layout is set to&lt;br /&gt;
	    SOUNDMAP_USE_MASK.  The bit mask presented identifies each&lt;br /&gt;
	    channel present in the sound data with the explicit reliance&lt;br /&gt;
	    on the channels also appearing in the order they occur in&lt;br /&gt;
	    the bitmask.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to SPEAKERF_MONO (1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_DiscreteChannels (BOOL) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    TRUE when the channel data is separated into distinct blocks&lt;br /&gt;
	    and is not interleaved.  For example, the 8SVX format stores&lt;br /&gt;
	    its sample data in disparate left and right channels, each&lt;br /&gt;
	    of length N; thus the data is presented as two independent&lt;br /&gt;
	    channels contained in one contiguous block:&lt;br /&gt;
	        L0, L1, L2, ..., LN-1      R0, R1, R2, ..., RN-1&lt;br /&gt;
	    In contrast, when FALSE, the sample data is interleaved into&lt;br /&gt;
	    a single block with each channel alternating as appropriate:&lt;br /&gt;
	        L0, R0, L1, R2, L2, R2, ..., LN-1, RN-1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to TRUE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_Unsigned (BOOL) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    TRUE to indicate that the sample data is unsigned numbers with&lt;br /&gt;
	    a range of [0..2^BitsPerSample].  When FALSE, the range changes&lt;br /&gt;
	    to [-2^BitsPerSample..2^BitsPerSample-1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to FALSE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_Position (struct TimeVal *) (V53.23)&lt;br /&gt;
	    Determines the elapsed time of playback.&lt;br /&gt;
&lt;br /&gt;
		Defaults to zero (0)&lt;br /&gt;
&lt;br /&gt;
		Applicability is (OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_DefaultIconName (STRPTR) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    Specifies the name of the default icon used by default to &lt;br /&gt;
	    render the datatype gadget.  Useful for subclasses to show&lt;br /&gt;
	    appropriate file type information (e.g. &amp;quot;wav&amp;quot;, &amp;quot;aiff&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to &amp;quot;sound&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	GA_Image (struct Image *) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    Specifies a custom image used to render the datatype gadget&lt;br /&gt;
	    imagery.  Overrides SDTA_DefaultIconName when present. Useful&lt;br /&gt;
	    for app developers who may wish to show album art or other&lt;br /&gt;
	    graphical representation of the sound.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to NULL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_Compression (UBYTE) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    To provide a small amount of tag compatbility with the original&lt;br /&gt;
	    voice header, the SDTA_Compression tag maps its value to the &lt;br /&gt;
	    8SVX header.  Compression algorithms currently supported is limited&lt;br /&gt;
	    to CMP_NONE, CMP_FIBDELTA, CMP_MSFT_ADPCM, CMP_CCIT_ULAW,&lt;br /&gt;
	    CMP_CCIT_ALAW and CMP_IMA_ADPCM.  Be aware that the sound class will&lt;br /&gt;
	    honour the value provided in this tag or the voice header and attempt&lt;br /&gt;
	    to decode the audio supplied using SDTA_Sample only when SDTA_Compressed&lt;br /&gt;
	    is TRUE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to CMP_NONE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_Compressed (BOOL) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    Convenience tag used to indicate that the sound data is&lt;br /&gt;
	    actually compressed despite appearances otherwise.  Essentially&lt;br /&gt;
	    enables the decompression as indicated in SDTA_Compression.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to FALSE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_DownmixQuality (uint32) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    Starting with V53.23, the quality of downmixing of multichannel&lt;br /&gt;
	    sound to stereo is possible.  Use SDTMIX_None for direct channel&lt;br /&gt;
	    output without mixing (excess channels are &amp;quot;lost&amp;quot;) or use &lt;br /&gt;
	    SDTMIX_StereoSurround for mixing the front and surround left/right&lt;br /&gt;
	    channels to the front left and right speakers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to SDTMIX_None.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_UpmixQuality (uint32) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    Starting with V53.23, the quality of upmixing of multichannel&lt;br /&gt;
	    sound to stereo is possible.  Use SDTMIX_None for direct channel&lt;br /&gt;
	    output without mixing or SDTMIX_StereoSurround for directing the&lt;br /&gt;
	    front left and right channels through the left and right surround&lt;br /&gt;
	    channels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to SDTMIX_None.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_SignalHook (struct Hook *) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    Starting with V53.23, a new streaming mechanism is provided in the&lt;br /&gt;
	    form of a callback hook.  A subclass or client providing a hook&lt;br /&gt;
	    in combination with SDTA_Continuous will receive regular requests&lt;br /&gt;
	    for data using the hook specified.  The function signature is:&lt;br /&gt;
	        int32   func( struct Hook *, Object *, struct sdtFetch * )&lt;br /&gt;
	    where the the object is the sound class instance causing the request&lt;br /&gt;
	    and buffer is empty with sdtb_Data as NULL.  The subclass or client &lt;br /&gt;
	    will receive an allocated buffer and appropriate length as indicated&lt;br /&gt;
	    by SDTA_MinimumFetch and should return a positive value for success&lt;br /&gt;
	    indicating the number of data bytes in the buffer, zero for failure or &lt;br /&gt;
	    end of stream and negative numbers for error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Supercedes SDTA_SignalTask and SDTA_SignalBit* where a combination&lt;br /&gt;
	    is specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Defaults to NULL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	SDTA_MinimumFetch (ULONG) (V53.23)&lt;br /&gt;
&lt;br /&gt;
	    Starting with V53.23 for use with the STDA_SignalHook callback,&lt;br /&gt;
	    defines the minimum number of samples required to satisfy an&lt;br /&gt;
	    individual SDTM_FETCH call.  This attribute is intended for class&lt;br /&gt;
	    implementors and not for general application use - it does not&lt;br /&gt;
	    guarantee that this number of samples will be returned, only that&lt;br /&gt;
	    the internal buffers should allow for it.&lt;br /&gt;
&lt;br /&gt;
	    &lt;br /&gt;
	    Defaults to 2048.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	    Applicability is (OM_NEW, OM_SET, OM_GET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    NOTES&lt;br /&gt;
	You cannot switch between mono and stereo playback on the fly while&lt;br /&gt;
	the sound is still playing. First, stop the sound, then change the&lt;br /&gt;
	SDTA_Sample/SDTA_LeftSample/SDTA_LeftSample attributes.  Starting&lt;br /&gt;
	with V53.23 the same applies for any number of channels, not just mono&lt;br /&gt;
	and stereo playback (although one would assume you understood this&lt;br /&gt;
	was the case anyway!)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	The sound.datatype implementation has been cleaned up for V44 to&lt;br /&gt;
	allow for streaming subclasses to be written. Such subclasses will&lt;br /&gt;
	always return NULL when their SDTA_LeftSample, SDTA_RightSample and&lt;br /&gt;
	SDTA_Sample attributes are queried. However, they will never return&lt;br /&gt;
	0 for the SDTA_SampleLength and SDTA_SamplesPerSec attributes since&lt;br /&gt;
	these can be used to calculate the length of the entire sample.&lt;br /&gt;
	Streaming subclasses will respond to the DTM_TRIGGER method, to&lt;br /&gt;
	start, stop playback, etc. but may not support any other methods&lt;br /&gt;
	which rely upon the entire sample to reside in memory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	The sound.datatype implementation has been completely rewritten for&lt;br /&gt;
	V53.23 to allow better support for streaming and multichannel sounds.&lt;br /&gt;
	Most other restrictions still apply from earlier versions unless&lt;br /&gt;
	otherwise documented.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    BUGS&lt;br /&gt;
&lt;br /&gt;
	The V44 autodocs stated that the default for the &amp;quot;SDTA_FreeSampleData&amp;quot;&lt;br /&gt;
	tag was FALSE. This has never been the case. In fact, it always defaults&lt;br /&gt;
	to TRUE.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>