diff options
author | Florian Merz <me@fiji-flo.de> | 2021-02-11 14:51:05 +0100 |
---|---|---|
committer | Florian Merz <me@fiji-flo.de> | 2021-02-11 14:51:05 +0100 |
commit | c058fa0fb22dc40ef0225b21a97578cddd0aaffa (patch) | |
tree | df20f8b4c724b61cb9c34cdb450a7ac77d690bd0 /files/ru/web/api/baseaudiocontext/createpanner | |
parent | 8260a606c143e6b55a467edf017a56bdcd6cba7e (diff) | |
download | translated-content-c058fa0fb22dc40ef0225b21a97578cddd0aaffa.tar.gz translated-content-c058fa0fb22dc40ef0225b21a97578cddd0aaffa.tar.bz2 translated-content-c058fa0fb22dc40ef0225b21a97578cddd0aaffa.zip |
unslug ru: move
Diffstat (limited to 'files/ru/web/api/baseaudiocontext/createpanner')
-rw-r--r-- | files/ru/web/api/baseaudiocontext/createpanner/index.html | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/files/ru/web/api/baseaudiocontext/createpanner/index.html b/files/ru/web/api/baseaudiocontext/createpanner/index.html new file mode 100644 index 0000000000..0a4d5db32b --- /dev/null +++ b/files/ru/web/api/baseaudiocontext/createpanner/index.html @@ -0,0 +1,211 @@ +--- +title: AudioContext.createPanner() +slug: Web/API/AudioContext/createPanner +translation_of: Web/API/BaseAudioContext/createPanner +--- +<p>{{ APIRef("Web Audio API") }}</p> + +<div> +<p>Метод <code>createPanner()</code> интерфейса {{ domxref("AudioContext") }} применяется для создания нового {{domxref("PannerNode")}}, который используется для размещения аудиопотока в виртуальном 3D пространстве.</p> +</div> + +<p>The panner node is spatialized in relation to the AudioContext's {{domxref("AudioListener") }} (defined by the {{domxref("AudioContext.listener") }} attribute), which represents the position and orientation of the person listening to the audio.</p> + +<h2 id="Синтаксис">Синтаксис</h2> + +<pre class="brush: js">var audioCtx = new AudioContext(); +var panner = audioCtx.createPanner();</pre> + +<h3 id="Возврат">Возврат</h3> + +<p>A {{domxref("PannerNode")}}.</p> + +<h2 id="Пример">Пример</h2> + +<div class="note_trans"> +<div>Ниже можно увидеть пример использования {{domxref("AudioListener")}}, {{domxref("PannerNode")}} и метода <code>createPanner()</code> для управления пространством объемного звука. Обычно определяется положение в трехмерном пространстве, изначально занимаемое слушателем (listener) и источником звука (panner), а затем, при использовании приложения, обновляется позиция одного из них или обоих. Например, вы можете перемещать персонажа внутри игрового мира, и желательно чтобы передача звука изменялась реалистично, по мере приближения или отдаления персонажа относительно источника звука, вроде стереопроигрывателя. В этом примере можно видеть, что все это управляется функциями <code>moveRight()</code>, <code>moveLeft()</code>, и т.п., которые устанавливают новые значения для положения паннера через функцию <code>PositionPanner()</code>.</div> + +<div> </div> + +<div> +<div class="note_trans"> +<div>Чтобы увидеть полную реализацию ознакомьтесь с нашим <a href="https://mdn.github.io/webaudio-examples/panner-node/">примером panner-node</a> (<a href="https://mdn.github.io/webaudio-examples/">просмотрите весь список примеров</a>) — эта демонстрация перенесет вас в 2.5D "Room of metal" (2,5-мерную "металлическую комнату"), где можно проиграть трек на <a class="popupspot">бумбоксе</a> и затем походить вокруг него и посмотреть как изменяется звук!</div> + +<div> </div> +</div> +</div> +</div> + +<p>Note how we have used some feature detection to either give the browser the newer property values (like {{domxref("AudioListener.forwardX")}}) for setting position, etc. if it supports those, or older methods (like {{domxref("AudioListener.setOrientation()")}}) if it still supports those but not the new properties.</p> + +<pre class="brush: js">// set up listener and panner position information +// установка сведений о слушателе (listener) и положении panner'а +var WIDTH = window.innerWidth; +var HEIGHT = window.innerHeight; + +var xPos = Math.floor(WIDTH/2); +var yPos = Math.floor(HEIGHT/2); +var zPos = 295; + +// define other variables (определяем другие переменные) + +var AudioContext = window.AudioContext || window.webkitAudioContext; +var audioCtx = new AudioContext(); + +var panner = audioCtx.createPanner(); +panner.panningModel = 'HRTF'; +panner.distanceModel = 'inverse'; +panner.refDistance = 1; +panner.maxDistance = 10000; +panner.rolloffFactor = 1; +panner.coneInnerAngle = 360; +panner.coneOuterAngle = 0; +panner.coneOuterGain = 0; + +if(panner.orientationX) { + panner.orientationX.value = 1; + panner.orientationY.value = 0; + panner.orientationZ.value = 0; +} else { + panner.setOrientation(1,0,0); +} + +var listener = audioCtx.listener; + +if(listener.forwardX) { + listener.forwardX.value = 0; + listener.forwardY.value = 0; + listener.forwardZ.value = -1; + listener.upX.value = 0; + listener.upY.value = 1; + listener.upZ.value = 0; +} else { + listener.setOrientation(0,0,-1,0,1,0); +} + +var source; + +var play = document.querySelector('.play'); +var stop = document.querySelector('.stop'); + +var boomBox = document.querySelector('.boom-box'); + +var listenerData = document.querySelector('.listener-data'); +var pannerData = document.querySelector('.panner-data'); + +leftBound = (-xPos) + 50; +rightBound = xPos - 50; + +xIterator = WIDTH/150; + +// listener will always be in the same place for this demo +// в этом демо слушатель всегда находится на одном и том же месте + +if(listener.positionX) { + listener.positionX.value = xPos; + listener.positionY.value = yPos; + listener.positionZ.value = 300; +} else { + listener.setPosition(xPos,yPos,300); +} + +listenerData.innerHTML = 'Listener data: X ' + xPos + ' Y ' + yPos + ' Z ' + 300; + +// panner will move as the boombox graphic moves around on the screen +// паннер будет перемещаться по экрану за перемещением бумбокса +function positionPanner() { + if(panner.positionX) { + panner.positionX.value = xPos; + panner.positionY.value = yPos; + panner.positionZ.value = zPos; + } else { + panner.setPosition(xPos,yPos,zPos); + } + pannerData.innerHTML = 'Panner data: X ' + xPos + ' Y ' + yPos + ' Z ' + zPos; +}</pre> + +<div class="note"> +<p>In terms of working out what position values to apply to the listener and panner, to make the sound appropriate to what the visuals are doing on screen, there is quite a bit of fiddly math involved, but you will soon get used to it with a bit of experimentation.</p> +</div> + +<h2 id="Specifications">Specifications</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Specification</th> + <th scope="col">Status</th> + <th scope="col">Comment</th> + </tr> + <tr> + <td>{{SpecName('Web Audio API', '#widl-AudioContext-createPanner-PannerNode', 'createPanner()')}}</td> + <td>{{Spec2('Web Audio API')}}</td> + <td> </td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility">Browser compatibility</h2> + +<div>{{CompatibilityTable}}</div> + +<div id="compat-desktop"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Chrome</th> + <th>Edge</th> + <th>Firefox (Gecko)</th> + <th>Internet Explorer</th> + <th>Opera</th> + <th>Safari (WebKit)</th> + </tr> + <tr> + <td>Basic support</td> + <td>{{CompatChrome(10.0)}}{{property_prefix("webkit")}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>{{CompatGeckoDesktop(25.0)}} </td> + <td>{{CompatNo}}</td> + <td>15.0{{property_prefix("webkit")}}<br> + 22 (unprefixed)</td> + <td>6.0{{property_prefix("webkit")}}</td> + </tr> + </tbody> +</table> +</div> + +<div id="compat-mobile"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Android</th> + <th>Edge</th> + <th>Firefox Mobile (Gecko)</th> + <th>Firefox OS</th> + <th>IE Mobile</th> + <th>Opera Mobile</th> + <th>Safari Mobile</th> + <th>Chrome for Android</th> + </tr> + <tr> + <td>Basic support</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatVersionUnknown}}</td> + <td>26.0</td> + <td>1.2</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + <td>33.0</td> + </tr> + </tbody> +</table> +</div> + +<h2 id="See_also">See also</h2> + +<ul> + <li><a href="/en-US/docs/Web_Audio_API/Using_Web_Audio_API">Using the Web Audio API</a></li> +</ul> |