๐ด Web Audio API
์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ค๋์ค ์์ค์ ๋ณํ๋ฅผ ์ค ์ ์๋ ์์คํ ์ด๋ค.
๊ธฐ๋ณธ์ ์ธ ์์ ๋ก๋ฉ, ์ฌ์, ์ ๋ฆฌ ๋ฟ๋ง ์๋๋ผ ํจ๋, ๋์คํ ์ , ๋๋ ์ด ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ์ํฅ ํจ๊ณผ๋ฅผ ์ถ๊ฐํ ์ ์๊ณ , ํํ ๋ง๋๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฑ ์์ ๋ฐ์ดํฐ์ ์๊ฐํ๋ ์์ฝ๊ฒ ๊ฐ๋ฅํ๋ค.
๐ ๋์ ๊ณผ์
Web Audio API์ ๋ชจ๋ ๊ธฐ๋ฅ์ AudioContext ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด์ ์์๋๋ค. AudioContext ๊ฐ์ฒด๋ ๋ด๋ถ์ ์ฌ๋ฌ ๊ฐ์ Audio Node๋ค์ ๊ฐ์ง ์ ์๋ค. ์ฌ๊ธฐ์ Audio Node๋ค์ ๊ฐ๊ฐ ํ๋์ ์ญํ ์ ์ํํ๋ ๋ชจ๋๋ค์ด๋ค.
์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ ๋ ธ๋๋ค์ด ์๋ค๊ณ ํ์.
- GainNode : ์์์ ๋ณผ๋ฅจ ํฌ๊ธฐ๋ฅผ ์กฐ์
- PannerNode : ์์์ ํจ๋ ํจ๊ณผ๋ฅผ ์ ์ฉํ๊ณ ์กฐ์
- AnalyserNode : ์์์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถ
ํ๋์ AudioContext ์์ ์๋ ๋ ธ๋๋ค์ ์๋ก ์ฐ๊ฒฐ๋์ด ํ๋์ ์ฐ๊ฒฐ๋ ๊ทธ๋ํ๋ฅผ ํ์ฑํ๊ฒ ๋๋ค.
๊ธฐ๋ณธ์ ์ธ Web Audio API์ ํ๋ฆ์ ์๋์ ๊ฐ๋ค.
1๏ธโฃ AudioContext ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
2๏ธโฃ AudioContext ๋ด๋ถ์ ์ค๋์ค Source(Audio Input)๋ฅผ ์์ฑํ๋ค. ์ค๋์ค ์์ค๋ <audio> ํ๊ทธ, Oscillator(๋ฐ์ง๊ธฐ), Raw PCM ๋ฐ์ดํฐ, ์ค์๊ฐ Stream ๋ฑ์ด ๋ ์ ์๋ค.
3๏ธโฃ Gain, Panner ๋ฑ ์ฌ๋ฌ ๊ฐ์ง Effector Node๋ค์ ์์ฑํ๋ค.
4๏ธโฃ ์ค๋์ค๊ฐ ์ถ๋ ฅ๋๋ ์ต์ข ๋ชฉ์ ์ง๋ฅผ ์ ํ๋ค. ex) ๋ ธํธ๋ถ ์คํผ์ปค
5๏ธโฃ Source โก๏ธ Effector โก๏ธ Destination ์์๋๋ก ์ฐ๊ฒฐ์ํจ๋ค.
๐ก AudioContext ์์ฑํ๊ธฐ
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
๐ข ์ค๋์ค Source ๋ถ๋ฌ์ค๊ธฐ
๐ท๏ธ createMediaElementSource : <audio /> ํ๊ทธ๋ก๋ถํฐ mp3, wav ๋ฑ์ ์ค๋์ค ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
๐ท๏ธ createBufferSource : Raw PCM ๋ฐ์ดํฐ๋ก๋ถํฐ ์์ ๋ถ๋ฌ์ค๊ธฐ.
๐ท๏ธ createMediaStreamSource : ์ค์น๋ ๋ง์ดํฌ ๋ฑ์ผ๋ก๋ถํฐ ์ค์๊ฐ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ๋ฐฉ๋ฒ์ด๋ค.
๐ท๏ธ createOscillator : ์ฃผํ์, ๋ณผ๋ฅจ, ํํ์ ๊ณ์ฐํด ๋ง๋ค์ด๋ด๋ ์๋ฆฌ๋ฅผ ๋ถ๋ฌ์จ๋ค.
๐ต ์คํธ๋ฆผ๊ณผ ๋ฒํผ๋?
์คํธ๋ฆผ์ด๋, ๋ง์ดํฌ์ ๊ฐ์ ์ ๋ ฅ ์ฅ์น๋ ์๋ฒ๋ก๋ถํฐ ๋ค์ด์ค๋ ์ผ๋ จ์ ๋ฐ์ดํฐ ํ๋ฆ์ ์ฝ์ด ๋ค์ด๋ฉด์, ์คํผ์ปค์ ๊ฐ์ ์ถ๋ ฅ ์ฅ์น๋ ๋์์ ํ๋ ์ด์ด๋ก ๋ฐ์ดํฐ์ ํ๋ฆ์ ๋ด๋ณด๋ด๋ ์ญํ ์ ํ๋ ๊ฐ์ฒด์ด๋ค.
์คํธ๋ฆผ์ด ์๊ธฐ ์ ๊น์ง๋ ๋ฐ์ดํฐ ์ ์ฒด๊ฐ ๋ค์ด๋ก๋ ๋์ด์ผ๋ง ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ์ผ๋, ์คํธ๋ฆผ์ด ๊ฐ๋ฅํด์ง๋ฉด์ ๋์์ ์คํธ๋ฆฌ๋ฐ, ์ค๋์ค ์คํธ๋ฆฌ๋ฐ ๋ฑ์ ์๋น์ค๊ฐ ๊ฐ๋ฅํด์ง ๊ฒ์ด๋ค.
๋ฒํผ๋, ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ์กฐ๊ธ์ฉ ์ฝ๊ณ , ์ ์ฅํ๊ณ , ์ฒ๋ฆฌํ๊ณ , ๋น์ฐ๊ธฐ๋ฅผ ๋ฐ๋ณตํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก RAM ๋ฉ๋ชจ๋ฆฌ์ ์ผ๋ถ ๊ณต๊ฐ์ด ๋ฒํผ๋ฅผ ์ํด ์ฌ์ฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฒํผ๋, ํน์ ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด๋๋ ๊ฐ์ฒด์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์์์ ํ๋ณดํ๊ณ ํด์ ํ๋ ๋ฑ์ ๊ด๋ฆฌ๋ฅผ ์ํํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ์ ๊ด์ฌํ ์ ์์๋ค.
ํ์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฉ๋๊ฐ ๋ค์ํด์ง๋ฉด์ ์ค๋์ค, ๋น๋์ค ๋ฐ ์น์์ผ ํต์ ์์ ์ฌ์ฉํ๋ Raw Binary Data๋ฅผ ์ง์ ๋ค๋ฃฐ ํ์๊ฐ ์๊ฒผ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ง์ ์ค์ ํ ์ ์๋ ๋ฒํผ๊ฐ ์๊ธฐ๊ฒ ๋์๋ค๊ณ ํ๋ค.
โช ArrayBuffer
๊ฐ๋ฐ์๊ฐ ์ง์ ํ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋งํผ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด์ด๋ค.
๋จ, ArrayBuffer๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํด ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ 0์ผ๋ก ์ ์ฅํด๋๋ ์ญํ ๋ง ํ๋ฉฐ, ์ค์ ๋ฐ์ดํฐ ์ ๊ทผ์ ๋ณ๋๋ก ์ ๊ณต๋๋ ArrayBufferView๋ฅผ ํตํด์๋ง ๊ฐ๋ฅํ๋ค.
- ArrayBufferView๋ TypedArray, DataView๋ฅผ ํต์นญํ๋ ๋ง์ด๋ฉฐ, ๊ฐ์ฒด๊ฐ ์๋๋ค.
- ๋ง์ฐฌ๊ฐ์ง๋ก, TypedArray๋ Uint8Array, Float32Array ๋ฑ์ ํต์นญํ๋ ๋ง์ด๋ฉฐ, ๊ฐ์ฒด๊ฐ ์๋๋ค.
๐ฃ
๐ค
'Voice' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ Voice ] PCM (0) | 2022.03.02 |
---|