<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Century;
        panose-1:2 4 6 4 5 5 5 2 3 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri",sans-serif;}
span.EmailStyle26
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:251857693;
        mso-list-type:hybrid;
        mso-list-template-ids:854870204 67698713 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:.75in;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:1.25in;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:1.75in;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:2.25in;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:2.75in;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:3.25in;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:3.75in;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:4.25in;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:4.75in;
        text-indent:-9.0pt;}
@list l1
        {mso-list-id:553079115;
        mso-list-type:hybrid;
        mso-list-template-ids:2100214894 -1838132160 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l1:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:22.5pt;
        text-indent:-.25in;}
@list l1:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:58.5pt;
        text-indent:-.25in;}
@list l1:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:94.5pt;
        text-indent:-9.0pt;}
@list l1:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:130.5pt;
        text-indent:-.25in;}
@list l1:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:166.5pt;
        text-indent:-.25in;}
@list l1:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:202.5pt;
        text-indent:-9.0pt;}
@list l1:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:238.5pt;
        text-indent:-.25in;}
@list l1:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:274.5pt;
        text-indent:-.25in;}
@list l1:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:310.5pt;
        text-indent:-9.0pt;}
@list l2
        {mso-list-id:1403869727;
        mso-list-type:hybrid;
        mso-list-template-ids:486066396 -222130382 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l2:level1
        {mso-level-start-at:4;
        mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;
        mso-fareast-font-family:Calibri;
        mso-bidi-font-family:"Times New Roman";}
@list l2:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l2:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l2:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l2:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l2:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l2:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l2:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l2:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#0563C1" vlink="#954F72" style='word-wrap:break-word'><div class=WordSection1><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From:</b> Brutzman, Donald (Don) (CIV) <brutzman@nps.edu> <br><b>Sent:</b> Friday, March 3, 2023 8:47 AM<br><b>To:</b> X3D Public Mailing List (x3d-public@web3d.org) <x3d-public@web3d.org>; Doug Sanden <gpugroup@gmail.com><br><b>Cc:</b> Athanasios Malamos <athanasios.malamos@gmail.com>; Efi Lakka <efilakka@gmail.com>; Brutzman, Donald (Don) (CIV) <brutzman@nps.edu><br><b>Subject:</b> X3D agenda 3 MAR 2023: X3D4 Sound Component and W3C Audio API review<o:p></o:p></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The X3D Working Group meets weekly on Fridays 09-1000 Pacific on Web3D Consortium zoom channel.  Telcon information:<o:p></o:p></p><ul style='margin-top:0in' type=disc><li class=MsoPlainText style='mso-list:l2 level1 lfo1'>https://us02web.zoom.us/j/81634670698?pwd=a1VPeU5tN01rc21Oa3hScUlHK0Rxdz09 <o:p></o:p></li><li class=MsoPlainText style='mso-list:l2 level1 lfo1'>https://zoom.us/j/148206572  Password 483805 <o:p></o:p></li><li class=MsoPlainText style='mso-list:l2 level1 lfo1'>https://www.web3d.org/member/teleconference-information <o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><ol style='margin-top:0in' start=1 type=1><li class=MsoListParagraph style='margin-left:-13.5pt;mso-list:l1 level1 lfo2'><b>X3D 2023 goals.  </b>Our primary activities for X3D Working Group in 2023 are focused on broad and correct deployment.<o:p></o:p></li></ol><p class=MsoNormal><o:p> </o:p></p><ol style='margin-top:0in' start=1 type=a><li class=MsoListParagraph style='margin-left:.25in;mso-list:l0 level1 lfo3'>Encourage consistent rendering, interaction and usage for the many tremendous capabilities in X3D4.<o:p></o:p></li><li class=MsoListParagraph style='margin-left:.25in;mso-list:l0 level1 lfo3'>Update ISO specifications and implementations for multiple programming languages and file encodings to match X3D4.<o:p></o:p></li></ol><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><ol style='margin-top:0in' start=2 type=1><li class=MsoListParagraph style='margin-left:-13.5pt;mso-list:l1 level1 lfo2'><b>Web3D 2023 Conference<o:p></o:p></b></li></ol><p class=MsoNormal><b><o:p> </o:p></b></p><p class=MsoNormal>Vicomtech has followed up on their initial creation of the spinning conference logo a decade ago… it is back!!!<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>Web3D 2023, 9-11 October 2023, Vicomtech<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>San Sebastian Spain, In-person and Online<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>https://web3d.siggraph.org<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>It will be really interested if we can start collecting and disseminating all 3d models for the conference…<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><ol style='margin-top:0in' start=3 type=1><li class=MsoListParagraph style='margin-left:-13.5pt;mso-list:l1 level1 lfo2'><b>Focus: review of X3D4 Sound Component and W3C Audio API.</b><o:p></o:p></li></ol><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Our current goal is to identify and remedy and errors or gaps in the X3D4 Architecture with respect to W3C Audio API.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Design goals are attempting to align existing patterns and semantics wherever possible. We are not inventing, we are checking and fixing.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>X3D 4.0 Architecture Draft International Specification (DIS) Clause 4, Sound component<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-DIS/Part01/components/sound.html<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>Web Audio API, W3C Recommendation<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>https://www.w3.org/TR/webaudio<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>As part of implementation efforts for FreeWrl, Doug Sanden has posted a series of public emails identifying possible mismatches or omission.<o:p></o:p></p><div style='border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal>TimeDependentNode<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>http://web3d.org/pipermail/x3d-public_web3d.org/2023-January/018420.html<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>notes apparent mismatch between X3D timing and W3C Audio timing representations for audio-source nodes.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-DIS/Part01/components/time.html#X3DTimeDependentNode<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><pre style='margin-left:.25in'>X3DTimeDependentNode : X3DChildNode {<o:p></o:p></pre><pre style='margin-left:.25in'>  SFString [in,out] description  ""<o:p></o:p></pre><pre style='margin-left:.25in'>  SFBool   [in,out] enabled      FALSE<o:p></o:p></pre><pre style='margin-left:.25in'>  SFBool   [in,out] loop         FALSE<o:p></o:p></pre><pre style='margin-left:.25in'>  SFNode   [in,out] metadata     NULL  [X3DMetadataObject]<o:p></o:p></pre><pre style='margin-left:.25in'>  SFTime   [in,out] pauseTime    0     (-∞,∞)<o:p></o:p></pre><pre style='margin-left:.25in'>  SFTime   [in,out] resumeTime   0     (-∞,∞)<o:p></o:p></pre><pre style='margin-left:.25in'>  SFTime   [in,out] startTime    0     (-∞,∞)<o:p></o:p></pre><pre style='margin-left:.25in'>  SFTime   [in,out] stopTime     0     (-∞,∞)<o:p></o:p></pre><pre style='margin-left:.25in'>  SFTime   [out]    elapsedTime<o:p></o:p></pre><pre style='margin-left:.25in'>  SFBool   [out]    isActive<o:p></o:p></pre><pre style='margin-left:.25in'>  SFBool   [out]    isPaused<o:p></o:p></pre><pre style='margin-left:.25in'>}<o:p></o:p></pre><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>https://www.w3.org/TR/webaudio/#AudioScheduledSourceNode<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal style='margin-left:.25in'><span style='font-family:"Courier New"'>interface AudioScheduledSourceNode : AudioNode {<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.25in'><span style='font-family:"Courier New"'>  attribute EventHandler onended;<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.25in'><span style='font-family:"Courier New"'>  undefined start(optional double when = 0);<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.25in'><span style='font-family:"Courier New"'>  undefined stop(optional double when = 0);<o:p></o:p></span></p><p class=MsoNormal style='margin-left:.25in'><span style='font-family:"Courier New"'>};<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Matching for sources makes sense as a direct correspondence.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Note that “If <i>enabled</i> field is FALSE, the audio signal passes through unmodified and is not blocked.”<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Matching for X3DSoundDestinationNode and X3DSoundProcessingNode was included to provide X3D authors with fine-grained control of nodes including animation options in addition to enabled/disabled.  For larger audio graphs impacting multiple outputs from a large diverse scene, such additional flexibility of control seemed to add value.  Not considered heavyweight since it is an existing (and commonly needed) interface.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Note that we are not re-designing at this point, rather we are checking for flaws or omissions.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Seems like this is implementable… let’s review carefully please.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Doug believes it is a bad design, but acknowledges that it may be implementable (at this stage of his implementation at least).<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Nicholas points out if it is not an exact match with Web Audio API, added functionality might be considered a problem.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Does anyone think that removing X3DTimeDependentNode from X3DSoundProcessingNode blocks any audio-graph authoring in X3D?  We found no cases… and Doug has implemented all of them without including it.   It also seems to be most conservative approach.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanos and Efi, comment please.<o:p></o:p></p><div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'><p class=MsoNormal style='border:none;padding:0in'><o:p> </o:p></p></div><p class=MsoNormal>Gain<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Gain field: we added gain to many nodes for simplification of audio graph construction.  It is equivalent to inserting a gain node in between two other nodes.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This issue is similar to the preceding issue in that is strays from precise alignment with Web Audio API, motivated by facilitating X3D authoring.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Resolution should match preceding issue.<o:p></o:p></p><div style='border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal>Analyser Outputs<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>http://web3d.org/pipermail/x3d-public_web3d.org/2023-February/018423.html<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>https://medialab.hmu.gr/minipages/x3domAudio/SpatialSoundFilter.xhtml<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Audio graph drawing produced by Efi Lakka.<o:p></o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>http://web3d.org/pipermail/x3d-public_web3d.org/2023-February/018423.html<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-DIS/Part01/components/sound.html#Analyser<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>https://www.w3.org/TR/webaudio/#AnalyserNode<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>“It is a mystery to me how we would use it to visualize without access to the data.”<o:p></o:p></p><div style='border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>First, a node implementation can provide analytic output, i.e. browser-dependent outputs.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Second, the Web Audio API does include output fields.<o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>  undefined getFloatFrequencyData (Float32Array array);<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>  undefined getByteFrequencyData (Uint8Array array);<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>  undefined getFloatTimeDomainData (Float32Array array);<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'>  undefined getByteTimeDomainData (Uint8Array array);<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal>So point well taken that we should provide corresponding outputs.  How should we define corresponding fields in X3D?  Doug’s subsequent suggestion:<span style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p></div><pre><o:p> </o:p></pre><pre style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo1'><![if !supportLists]><span style='font-family:Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>        </span></span></span><![endif]><span style='font-family:"Calibri",sans-serif'>http://web3d.org/pipermail/x3d-public_web3d.org/2023-February/018430.html<o:p></o:p></span></pre><pre><span style='font-family:"Calibri",sans-serif'><o:p> </o:p></span></pre><pre style='margin-left:.25in'>frequencyData MFFloat outputOnly<o:p></o:p></pre><pre style='margin-left:.25in'>timeDomainData MFFloat outputOnly<o:p></o:p></pre><pre><span style='font-family:"Calibri",sans-serif'><o:p> </o:p></span></pre><pre><span style='font-family:"Calibri",sans-serif'>with cool example outputs demonstrated<o:p></o:p></span></pre><pre><span style='font-family:"Calibri",sans-serif'><o:p> </o:p></span></pre><pre style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo1'><![if !supportLists]><span style='font-family:Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>        </span></span></span><![endif]><span style='font-family:"Calibri",sans-serif'>https://drive.google.com/file/d/1h_ECxw7IwGVvYNblBw9thIEsqMnnZ6a9/view<o:p></o:p></span></pre><pre style='margin-left:.5in;text-indent:-.25in;mso-list:l2 level1 lfo1'><![if !supportLists]><span style='font-family:Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>        </span></span></span><![endif]><span style='font-family:"Calibri",sans-serif'>https://drive.google.com/file/d/1OWtDr-cvCnwhEDeORUfusiyAaEBL_vuj/view<o:p></o:p></span></pre><div style='border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Resolution? Accept.  TODO add prose for X3D specification.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p></div><pre><o:p> </o:p></pre><div style='border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'><p class=MsoNormal>Sound v4 suggestions<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>* http://web3d.org/pipermail/x3d-public_web3d.org/2023-February/018456.html<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>DynamicsCompressor: make field type for attack and release the same (both in seconds)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>*  https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-DIS/Part01/components/sound.html#DynamicsCompressor<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>DynamicsCompressor : X3DSoundProcessingNode {<o:p></o:p></p><p class=MsoNormal>  SFFloat   [in,out] attack                0.003      [0,∞)<o:p></o:p></p><p class=MsoNormal>  SFTime   [in,out] release               0.25       [0,∞)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>* https://www.w3.org/TR/webaudio/#DynamicsCompressorNode<o:p></o:p></p><p class=MsoNormal>  readonly attribute AudioParam attack;<o:p></o:p></p><p class=MsoNormal>  readonly attribute AudioParam release;<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Wikipedia: Perceptual attack time<o:p></o:p></p><p class=MsoNormal>* https://en.wikipedia.org/wiki/Perceptual_attack_time<o:p></o:p></p><p class=MsoNormal>* “Perceptual Attack Time (often abbreviated "PAT") is a subjective measure of the time instant at which a musical sound's rhythmic emphasis is heard.”<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Agreed with that change, makes sense that both X3D fields should have type SFTime.<o:p></o:p></p><p class=MsoNormal>____<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>ChannelMerger<o:p></o:p></p><p class=MsoNormal>* https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-DIS/Part01/components/sound.html#ChannelMerger<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>*  The ChannelMergerNode Interface<o:p></o:p></p><p class=MsoNormal>* https://www.w3.org/TR/webaudio/#ChannelMergerNode<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Channel count often not found in Web Audio API, seems to be implicit.  Adding lots of variations to match W3C Audio API details would turn X3D interfaces into a programming interface that required Script support.  Thus ChannelMerger and ChannelSplitter simply merge all or split all.  ChannelSelector provided to pick just one.  Hopefully this provides authoring paths to handle any case.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Suggest we continue if that is workable.  Further refinements or extensions are likely best deferred for a possible future X3D 4.1 version once better X3D practice and understanding is established.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Reluctant to change a basic solution to something more involved without further discussion and evidence.<o:p></o:p></p><div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'><p class=MsoNormal style='border:none;padding:0in'><o:p> </o:p></p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Convolution: allow url loading of buffer field<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>* https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-DIS/Part01/components/sound.html#Convolver<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-family:"Courier New"'>Convolver : X3DSoundProcessingNode {<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>  MFFloat  [in,out] buffer                []         [−1,1]<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>  The buffer field represents a memory-resident audio asset (for one-shot sounds and other short audio clips). Its format is non-interleaved 32-bit linear floating-point PCM values with a normal range of [−1,1], but values are not limited to this range. It can contain one or more channels. Typically, it would be expected that the length of the PCM data would be fairly short (usually somewhat less than a minute). For longer sounds, such as music soundtracks, streaming should be used with the <audio> HTML element and AudioClip.<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The buffer field is intended to match the floats found in the AudioBuffer data structure in Web Audio API.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>* https://www.w3.org/TR/webaudio/#convolvernode<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-family:"Courier New"'>interface ConvolverNode : AudioNode {<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>  constructor (BaseAudioContext context, optional ConvolverOptions options = {});<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>  attribute AudioBuffer? buffer;<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>  attribute boolean normalize;<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>};<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Seems reasonable to permit a url alternative for buffer – but what formats should be allowed?  Should be well defined.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Mozilla Developer Network example shows loading of a WAV file.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>https://developer.mozilla.org/en-US/docs/Web/API/ConvolverNode<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>One possible resolution: add url field and prose.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>[in out] MFString url [] [WAV]<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Alternatively: allow Convolver to load an AudioClip node, limited to WAV format and perhaps restricting/ignoring irrelevant fields.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>[in out] SFNode children [] [AudioClip]<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Deserves further consideration.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal>ListenerPointSource<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>http://web3d.org/pipermail/x3d-public_web3d.org/2023-March/018570.html<o:p></o:p></li><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4-DIS/Part01/components/sound.html#ListenerPointSource<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Spec: “If the <i>dopplerEnabled</i> field is TRUE, ListenerPointSource <i>children</i> sources which are moving spatially in the transformation hierarchy, relative to the location of the ListenerPointSource node, shall apply velocity-induced frequency shifts corresponding to Doppler effect.”<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>ListenerPointSource can be considered as a “virtual microphone” listening (directionally) somewhere else in the world.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The word “children” and phrase “relative to the location of the ListenerPointSource node,“ should be omitted since there are no children.  TODO improve that sentence.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>What else should we say in the node definition?  Hopefully that will be sufficient to remove any remaining ambiguity.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>http://web3d.org/pipermail/x3d-public_web3d.org/2023-March/018572.html<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>ListenerPointSource creates (is a source of) audio streams, based on its location and orientation in the scene.  No input field is needed.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoListParagraph style='margin-left:0in;mso-list:l2 level1 lfo1'>http://web3d.org/pipermail/x3d-public_web3d.org/2023-March/018573.html<o:p></o:p></li></ul><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>“Q6. while paused or stopped, should SAD stream be buffered/queued or lost? If buffered, should there be a buffer size limit?”<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Defer to Web Audio API, we are not adding further constraints or limitations.<o:p></o:p></p><div style='border:none;border-bottom:solid windowtext 1.5pt;padding:0in 0in 1.0pt 0in'><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>We will resume this technical comparison next week.  Dick will also review how any changes deemed essential are best communicated to ISO.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks for impressive efforts.  Ringing loud and clear: “Have Fun With X3D!”  8)<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-family:"Century",serif'>all the best, Don<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Century",serif'>-- <o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Century",serif'>Don Brutzman  Naval Postgraduate School, Code USW/Br       <a href="mailto:brutzman@nps.edu">brutzman@nps.edu</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Century",serif'>Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA  +1.831.656.2149<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Century",serif'>X3D graphics, virtual worlds, navy robotics, data  http://faculty.nps.edu/brutzman<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>