Giter Club home page Giter Club logo

soland's Introduction

Hello My name is lala ๐Ÿ‘‹

My front-end development's skill is...

  • Javascript, ES6
  • React.js, Vue.js, Ember.js
  • CSS, Html

Top Langs

Hits

If you wanna see more about the project I worked on. Click๐Ÿ˜„

soland's People

Contributors

dial070 avatar sorie avatar

soland's Issues

Audio

Audio

๊ฐœ์š” : Web Audio API๊ฐ€ ์ฒ˜์Œ ๋ธŒ๋ผ์šฐ์ €์— ์†Œ๊ฐœ๋˜์—ˆ์„ ๋•Œ, ์ด๊ฒƒ์€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์˜ค๋””์˜ค๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์˜ค๋””์˜ค ํ”„๋กœ์„ธ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด JavaScript ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

web Audio Workflow

  1. ์˜ค๋””์˜ค ์ปจํ…์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.
  2. ์ปจํ…์ŠคํŠธ์•ˆ์—์„œ ์†Œ์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.(, ์˜ค์‹ค๋ ˆ์ดํ„ฐ, ์ŠคํŠธ๋ฆผ)
  3. ์ดํŒฉํŠธ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ ๋‹ค.(๋ฆฌ๋ฒ„๋ธŒ, ๋ฐ”์ด์ฟผ๋“œํ•„ํ„ฐ, ํŒจ๋„ˆ, ์ปดํ”„๋ ˆ์„œ)
  4. ์ตœ์ข… destination์„ ์„ ํƒํ•œ๋‹ค.(์˜ˆ๋ฅผ๋“ค๋ฉด ์Šคํ”ผ์ปค)
  5. ์†Œ์Šค์™€ ์ดํŒฉํŠธ ๊ฑธ๊ณ  destination์„ ์—ฐ๊ฒฐํ•œ๋‹ค.

image


(์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Basic_concepts_behind_Web_Audio_API)

์ผ๋ฐ˜์ ์ธ ์˜ค๋””์˜ค ๊ทธ๋ž˜ํ”„

์›น์˜ค๋””์˜คAPI์—์„œ ์˜ค๋””์˜ค ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ค ๋•Œ ํ•„์š”ํ•œ ์ผ๋ฐ˜์ ์ธ ์ปจํ…Œ์ด๋„ˆ์™€ ์ •์˜

  • AudioContext :
    AudioContext ์ธํ„ฐํŽ˜์ด์Šค๋Š” AudioNode๋กœ ํ‘œํ˜„๋˜๋Š” ์˜ค๋””์˜ค ๋ชจ๋“ˆ๋“ค์ด ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ๊ตฌ์„ฑ๋œ ์˜ค๋””์˜ค ํ”„๋กœ์„ธ์‹ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ๋œปํ•œ๋‹ค. ์˜ค๋””์˜ค ์ปจํ…์ŠคํŠธ๋Š” ๋ณด์œ ํ•˜๊ณ  ๋…ธ๋“œ๋“ค์˜ ์ƒ์„ฑ๊ณผ ์˜ค๋””์˜ค ์ฒ˜๋ฆฌ์˜ ์‹คํ–‰ ํ˜น์€ ๋””์ฝ”๋”ฉ์„ ์ปจํŠธ๋กคํ•œ๋‹ค. ์ปจํ…์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด ์–ด๋–ค ์ผ์„ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด ๋ฌด์—‡๋ณด๋‹ค ๋จผ์ € AudioContext๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

์˜ค๋””์˜ค ์ดํŒฉํŠธ ํ•„ํ„ฐ

์˜ค๋””์˜ค ์†Œ์Šค์— ์ ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ์ดํŽ™ํŠธ ์ธํ„ฐํŽ˜์ด์Šค

  • BiquadFilterNode :
    ๊ฐ„๋‹จํ•œ ์ €์ˆ˜์ค€์˜ ํ•„ํ„ฐ AudioNode๋กœ ์Œ์ƒ‰์„ ์กฐ์ ˆํ•˜๋Š” ๋””๋ฐ”์ด์Šค๋‚˜ ๊ทธ๋ž˜ํ”ฝ ์ดํ€„๋ผ์ด์ €๊ฐ™์€ ์—ฌ๋Ÿฌ์ข…๋ฅ˜์˜ ํ•„ํ„ฐ๋ฅผ ๋œปํ•œ๋‹ค. BiquadFilterNode๋Š” ์–ธ์ œํ•˜๋‚˜ ํ•œ๊ฐœ์˜ ์ธํ’‹๊ณผ ํ•œ๊ฐœ์˜ ์•„์›ƒํ’‹์„ ๊ฐ€์ง„๋‹ค.

  • ConvolerNode :
    ์ฃผ์–ด์ง„ AudioBuffer์— Linear Convolution์„ ์ˆ˜ํ–‰ํ•˜๋Š” AudioNode์ด๋‹ค ๋ฆฌ๋ฒ„๋ธŒ๋ฅผ ๊ตฌํ˜„ํ• ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค.

  • DelayNode :
    ๋”œ๋ ˆ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” AudioNode๋กœ ์ธํ’‹์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ์— ๋”œ๋ ˆ์ด๋ฅผ ๊ฑธ์–ด ์•„์›ƒํ’‹์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค.

  • DynamicsCompressorNode :
    ์ปดํ”„๋ ˆ์…˜ ์ดํŽ™ํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋‹ค์ˆ˜์˜ ์‚ฌ์šด๋“œํ˜น์€ ์ค‘์ฒฉ๋˜์–ด ํ•œ๋ฒˆ์— ํ”Œ๋ ˆ์ด๋ ๋•Œ ๋ฐœ์ƒ๋˜๋Š” ํด๋ฆฌํ•‘์ด๋‚˜ ์™œ๊ณก์„ ํ”ผํ•˜๊ธฐ์œ„ํ•ด ์‹ ํ˜ธ์˜ ์Œ๋Ÿ‰์˜ ํฐ ํŒŒํŠธ์˜ ์Œ๋Ÿ‰์„ ์ค„์—ฌ ์ฃผ๋Š” ์ดํŒฉํŠธ์ด๋‹ค.

  • GainNode :
    ๋ถˆ๋ฅจ์„ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ฃผ์–ด์ง„ gain์„ ์ธํ’‹ ๋ฐ์ดํ„ฐ์— ์ ์šฉํ•ด ๊ทธ๊ฒฐ๊ณผ๋ฅผ ์•„์›ƒํ’‹์— ์ „๋‹ฌํ•œ๋‹ค.

  • StereoPannerNode :
    ๊ฐ„๋‹จํžˆ ์Šคํ…Œ๋ ˆ์˜ค ํŒจ๋‹์„ ๋‹ค๋ฃฐ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์˜ค๋””์˜ค ์ŠคํŠธ๋ฆผ์„ left ํ˜น์€ right๋กœ ํŒจ๋‹ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

Audio destionations

๋ชจ๋“  ์˜ค๋””์˜ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๊ฐ€ ๋˜๋ฉด audio destination์„ ํ†ตํ•ด ์–ด๋””๋กœ ์†Œ๋ฆฌ๊ฐ€ ๋‚˜๊ฐ€๊ฒŒ ๋ ์ง€๋ฅผ ์ •์˜ํ•˜๊ฒŒ ๋œ๋‹ค.

  • AudioDestinationNode :
    ์ฃผ์–ด์ง„ ์ปจํ…์ŠคํŠธ์•ˆ์˜ ์˜ค๋””์˜ค์†Œ์Šค์˜ ์ตœ์ข… ๋ชฉ์ ์ง€๋ฅผ ๋œปํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณดํ†ต ์Šคํ”ผ์ปค์— ํ•ด๋‹นํ•œ๋‹ค.

  • MediaStreamAudioDestinationNode :
    WebRTC MediaStream๊ณผ ๋‹จ์ผ AudioMediaStreamTrack๋กœ ๊ตฌ์„ฑ๋œ audio destination์„ ๋œปํ•œ๋‹ค. Navigator.getUserMedia๋ฅผ ํ†ตํ•ด ์–ป์–ด์ง€๋Š” MediaStream๊ณผ ๋น„์Šทํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. audio destination์—ญํ• ์„ ํ•˜๋Š” AudioNode์ด๋‹ค.

    ์ฐธ๊ณ  ๋ฌธํ—Œ : https://ui.toast.com/weekly-pick/ko_20160321

์˜ค๋””์˜ค worklet ํ”„๋กœ์„ธ์„œ์˜ ๊ตฌ์กฐ

์˜ค๋””์˜ค worklet ํ”„๋กœ์„ธ์„œ๋Š” ๋‹ค์Œ์„ ํฌํ•จํ•˜๋Š” JavaScript ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค:

  • ์˜ค๋””์˜ค ํ”„๋กœ์„ธ์„œ๋ฅผ ์ •์˜ํ•˜๋Š” JavaScript ํด๋ž˜์Šค. ์ด ํด๋ž˜์Šค๋Š” AudioWorkletProcessor ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค(extends).
  • ์˜ค๋””์˜ค ํ”„๋กœ์„ธ์„œ๋Š” ๋ฐ˜๋“œ์‹œ process() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋ฉ”์„œ๋“œ๋Š” ๋“ค์–ด์˜ค๋Š” ์˜ค๋””์˜ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ณ  ํ”„๋กœ์„ธ์„œ์— ์˜ํ•ด ์กฐ์ž‘๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅ์— ๋„ฃ์Šต๋‹ˆ๋‹ค.
  • ์ด ๋ชจ๋“ˆ์€ registerProcessor()๋ฅผ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ ์ƒˆ๋กœ์šด ์˜ค๋””์˜ค worklet ํ”„๋กœ์„ธ์„œ๋ฅผ ๋“ฑ๋กํ•˜๋Š”๋ฐ, ๋“ฑ๋กํ•  ๋•Œ ์˜ค๋””์˜ค ํ”„๋กœ์„ธ์„œ์˜ ์ด๋ฆ„๊ณผ ํ”„๋กœ์„ธ์„œ๋ฅผ ์ •์˜ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ๋ฌธํ—Œ : https://developer.mozilla.org/ko/docs/Web/API/Web_Audio_API/Using_AudioWorklet

BaseAudioContext.createScriptProcessor()

๋”์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค.

  • createScriptProcessor(bufferSize, numberOfInputChannels, numberOfOutputChannels)
  • bufferSize : ์ƒ˜ํ”Œ ํ”„๋ ˆ์ž„ ๋‹จ์œ„์˜ ๋ฒ„ํผ ํฌ๊ธฐ.

"์ง€์ •๋œ ๊ฒฝ์šฐ bufferSize๋Š” ๋‹ค์Œ ๊ฐ’ ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. 256, 512, 1024, 2048, 4096, 8192, 16384. ์ „๋‹ฌ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ฐ’์ด 0์ด๋ฉด ๊ตฌํ˜„์—์„œ ์ตœ์ ์˜ ๋ฒ„ํผ ํฌ๊ธฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ํ™˜๊ฒฝ์€ ๋…ธ๋“œ์˜ ์ˆ˜๋ช… ๋™์•ˆ 2์˜ ์ผ์ •ํ•œ ๊ฑฐ๋“ญ์ œ๊ณฑ์ด ๋ฉ๋‹ˆ๋‹ค.
์ด ๊ฐ’์€ ์ด๋ฒคํŠธ๊ฐ€ ์ „๋‹ฌ๋˜๋Š” ๋นˆ๋„ audioprocess์™€ ๊ฐ ํ˜ธ์ถœ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ƒ˜ํ”Œ ํ”„๋ ˆ์ž„ ์ˆ˜๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์— ๋Œ€ํ•œ ๊ฐ’ bufferSize์ด ๋‚ฎ์„์ˆ˜๋ก ์ง€์—ฐ ์‹œ๊ฐ„์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค(๋” ๋‚˜์€). ์˜ค๋””์˜ค ๋Š๊น€ ๋ฐ ๊ฒฐํ•จ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ๋” ๋†’์€ ๊ฐ’์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์„ฑ์ž๋Š” ์ด ๋ฒ„ํผ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ๊ตฌํ˜„์—์„œ ๋Œ€๊ธฐ ์‹œ๊ฐ„๊ณผ ์˜ค๋””์˜ค ํ’ˆ์งˆ ๊ฐ„์˜ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ ์ ˆํ•œ ๋ฒ„ํผ ํฌ๊ธฐ๋ฅผ ์„ ํƒํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค."
- https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/createScriptProcessor

ScriptProcessorNode deprecated ๊ฒฝ๊ณ 

๋ฐฐ๊ฒฝ : Javascript์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ์˜ค๋””์˜ค ์ฒ˜๋ฆฌ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด Web Audio API๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ UI์Šค๋ ˆ๋“œ์—์„œ ์‚ฌ์šฉ์ž ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ScriptProcessorNode๊ฐ€ ๋‚˜์™”๋Š”๋ฐ
๋‘๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

  1. ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋™๊ธฐ์‹์ด์–ด์„œ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์œ ๋„ํ•œ๋‹ค
  2. ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰์„ ๋งˆ์น˜๊ธฐ ์ „๊นŒ์ง€ ๋‹ค๋ฅธ ๋ชจ๋“  ๋™์ž‘์„ ๋ง‰๋Š”๋‹ค. ์ฝ”๋“œ ์‹คํ–‰์€ ๊ธฐ๋ณธ ์Šค๋ ˆ๋“œ์—์„œ ๋ฐœ์ƒํ•˜์—ฌ ๋‹ค์–‘ํ•œ UI ๋ฐ DOM ๊ด€๋ จ ์ž‘์—…์œผ๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ํ˜ผ์žกํ•œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์— ์••๋ ฅ์„ ๊ฐ€ํ•˜์—ฌ UI๊ฐ€ ๋ฒ„๋ฒ…๊ฑฐ๋ฆฌ๊ฑฐ๋‚˜ ์˜ค๋””์˜ค๊ฐ€ ๊ธ€๋ฆฌ์น˜๋ฅผ ๋ฐœ์ƒ ์‹œํ‚จ๋‹ค.
    ์ด๋Ÿฐ ๋ฌธ์ œ์‚ฌํ•ญ์œผ๋กœ ScriptProcessorNode๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  AudioWorklet์œผ๋กœ ๋Œ€์ฒด ๋˜์—ˆ๋‹ค.

์ฐธ๊ณ : https://developer.chrome.com/blog/audio-worklet/
https://developer.chrome.com/blog/audio-worklet/#bi-directional-communication-with-messageport

Audio Worklet

์˜ค๋””์˜ค ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์˜ค๋””์˜ค ์ฒ˜๋ฆฌ ์Šค๋ ˆ๋“œ ๋‚ด์—์„œ ์‚ฌ์šฉ์ž ์ œ๊ณต Javascript์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ์ž˜ ์œ ์ง€ ํ•œ๋‹ค.
์ฆ‰, ์‚ฌ์šฉ์ž ์ œ๊ณต ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅธ ๋‚ด์žฅ AudioNode์™€ ํ•จ๊ป˜ ์˜ค๋””์˜ค ๋ Œ๋”๋ง ์Šค๋ ˆ๋“œ(AudioWorkletGlobalScope)์—์„œ ์‹คํ–‰๋˜์–ด ์ถ”๊ฐ€ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ฐ ๋™๊ธฐ ๋ Œ๋”๋ง๋ฅผ ๋ณด์žฅํ•œ๋‹ค.

"์˜ค๋””์˜ค ์ปจํ…์ŠคํŠธ์˜ ์˜ค๋””์˜ค worklet์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ๋–จ์–ด์ ธ ์‹คํ–‰๋˜๋Š” Worklet (en-US)์ธ๋ฐ, ์ด๋Š” ์ปจํ…์ŠคํŠธ์˜ audioWorklet.addModule() (en-US) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ ์ด worklet์— ์ถ”๊ฐ€๋œ ์˜ค๋””์˜ค ํ”„๋กœ์„ธ์‹ฑ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. addModule()์„ ํ˜ธ์ถœํ•˜๋ฉด ๋ช…์‹œ๋œ JavaScript ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋Š”๋ฐ, ์ด ํŒŒ์ผ์€ ์˜ค๋””์˜ค ํ”„๋กœ์„ธ์„œ์˜ ๊ตฌํ˜„์„ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋“ฑ๋ก๋˜์—ˆ๋‹ค๋ฉด ์—ฌ๋Ÿฌ๋ถ„์€ ์ƒˆ๋กœ์šด AudioWorkletNode๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ์ด ๋…ธ๋“œ๊ฐ€ ๋‹ค๋ฅธ ์˜ค๋””์˜ค ๋…ธ๋“œ๋“ค๊ณผ ํ•จ๊ฒŒ ์˜ค๋””์˜ค ๋…ธ๋“œ์˜ ์ฒด์ธ์— ์—ฐ๊ฒฐ๋˜์—ˆ์„ ๋•Œ ์ด ๋…ธ๋“œ๋Š” ํ”„๋กœ์„ธ์„œ์˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์˜ค๋””์˜ค๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค." - https://developer.mozilla.org/ko/docs/Web/API/Web_Audio_API/Using_AudioWorklet

image

  1. AudioWorkletProcessor : Javascript ์ฝ”๋“œ๋กœ ์ž‘์„ฑ๋œ ์‹ค์ œ ์˜ค๋””์˜ค ํ”„๋กœ์„ธ์„œ, AudioWorkletGlobalScope์— ์žˆ๋‹ค.
  2. AudioWorkletNode : AudioWorkletProcessor์˜ ๋Œ€์‘๋ฌผ์ด๋ฉฐ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ๋‹ค๋ฅธ AudioNode์™€์˜ ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ฃผ์š” ์ „์—ญ ๋ฒ”์œ„์— ๋…ธ์ถœ๋˜๊ณ  ์ผ๋ฐ˜ AudioNode์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.
  • Audio Worklet์„ ํฌํ•จํ•œ Worklet API๋Š” ๋ณด์•ˆ ์ปจํ…์ŠคํŠธ ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽ˜์ด์ง€๋Š”
    HTTPS๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋˜์–ด์•ผ ํ•˜์ง€๋งŒ http://localhost ๋กœ์ปฌ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ์•ˆ์ „ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.
  • AudioWorkletNode๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฅ˜ํ•˜์—ฌ worklet์—์„œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์ง€์›ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ๋…ธ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • registerProcessor() AudioWorkletGlobalScope์˜ ๋ฉ”์„œ๋“œ๋Š” ๋“ฑ๋กํ•  ํ”„๋กœ์„ธ์„œ ์ด๋ฆ„๊ณผ ํด๋ž˜์Šค ์ •์˜์— ๋Œ€ํ•œ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ „์—ญ ๋ฒ”์œ„์—์„œ ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ํ‰๊ฐ€๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด AudioWorklet.addModule() ์œผ๋กœ๋ถ€ํ„ฐ ๊ธฐ๋ณธ ์ „์—ญ ๋ฒ”์œ„์—์„œ ํด๋ž˜์Šค ์ •์˜๋ฅผ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Œ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆฐ๋‹ค.
  • AudioNodes์— ๋Œ€ํ•œ ์œ ์šฉํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” AudioParams๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์•ฝ ๊ฐ€๋Šฅํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ž๋™ํ™”์ด๋‹ค.
  • AudioWorkletNodes๋Š” ์˜ค๋””์˜ค ์†๋„์—์„œ ์ž๋™์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๋…ธ์ถœ๋œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ •์˜ AudioParams๋Š” AudioParamDesciptors์„ธํŠธ๋ฅผ ์„ค์ •ํ•˜์—ฌ AudioWorkletProcessorํด๋ž˜์Šค ์ •์˜์—์„œ ์„ ์–ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ธฐ๋ณธ WebAudio ์—”์ง„์€ AudioWorkletNode ์ƒ์„ฑ ์‹œ AudioParam ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ๋…ธ๋“œ์— ์—ฐ๊ฒฐํ•œ๋‹ค.
  • ์‹ค์ œ ์˜ค๋””์˜ค ์ฒ˜๋ฆฌ process()๋Š” AudioWorkletProcessor์˜ ์ฝœ๋ฐฑ ๋ฉ”์„œ๋“œ์—์„œ ๋ฐœ์ƒํ•˜๋ฉฐ ํด๋ž˜์Šค ์ •์˜์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • WebAudio ์—”์ง„์€ process()๋ฅผ ๋™์‹œ์„ฑ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœํ•˜์—ฌ ์ž…๋ ฅ ๋ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ถœ๋ ฅํ•œ๋‹ค.
  • process()๋ฉ”์„œ๋“œ์˜ ๋ณ€ํ™˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์ž‡๋„๋ก AudioWorkletNode์˜ ์ˆ˜๋ช…์„ ์ œ์–ดํ•  ์ˆ˜ ์ž‡๋‹ค.
  • process()๋ฉ”์†Œ๋“œ์—์„œ false๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋น„ํ™œ์„ฑ ์ƒํƒœ๋กœ ํ‘œ์‹œ๋˜๊ณ  WebAudio ์—”์ง„์€ ๋” ์ด์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค.
    ํ”„๋กœ์„ธ์„œ๋ฅผ ํ™œ์„ฑ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋ ค๋ฉด ๋ฉ”์„œ๋“œ๊ฐ€ true๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋…ธ๋“œ/ํ”„๋กœ์„ธ์„œ๋Š” ๊ฒฐ๊ตญ ์‹œ์Šคํ…œ์— ์˜ํ•ด ๊ธฐ๋น„์ง€๋ฅผ ์ˆ˜์ง‘ํ•œ๋‹ค.
  • MessagePort๋Š” AudioWorkletNode ๋ฐ AudioWorkletProcessor์—์„œ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค. ์ด ์ฑ„๋„์„ ํ†ตํ•ด ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋งž์ถค ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • MessagePort๋Š” .port๋…ธ๋“œ์™€ ํ”„๋กœ์„ธ์„œ ๋ชจ๋‘์˜ ์†์„ฑ์„ ํ†ตํ•ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋…ธ๋“œ์˜ port.postMessage() ๋ฐฉ๋ฒ•์€ ๊ด€๋ จ ํ”„๋กœ์„ธ์„œ์˜ port.onmessage ํ•ธ๋“ค๋Ÿฌ์— ๋ฉ”์‹œ์ง€๋ฅผ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • MessagePort๋Š” Transferable์„ ์ง€์›ํ•˜๋ฏ€๋กœ ์Šค๋ ˆ๋“œ ๊ฒฝ๊ณ„๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ๋˜๋Š” WASM๋ชจ๋“ˆ์„ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.

image

  • ์ด๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ•ฉ์นœ๊ฒƒ์ด GainNode์ด๋‹ค.

AudioWorkletProcessor.process

AudioWorkletProcessor์—์„œ ํŒŒ์ƒ๋œ ํด๋ž˜์Šค์˜ process() ๋ฉ”์„œ๋“œ๋Š” ์˜ค๋””์˜ค ํ”„๋กœ์„ธ์„œ worklet์— ๋Œ€ํ•œ ์˜ค๋””์˜ค ํ”„๋กœ์„ธ์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„.

ํ˜„์žฌ Audio Worklet์€ Chrome 66 ์ด์ƒ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋‹ค. Chrome 64 ๋ฐ 65์—์„œ ์ด ๊ธฐ๋Šฅ์€ ์•ˆ์ •ํ™” ๋˜์ง€ ์•Š์•˜๋‹ค.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.