Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ブラウザに音声処理をさせるためにやってる色々なこと
Search
木瓜丸(ぼけまる)
February 26, 2024
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ブラウザに音声処理をさせるためにやってる色々なこと
2月26日に実施された、「あけおめ!若手エンジニアふんわりLT Night!」にて発表したスライドです。
木瓜丸(ぼけまる)
February 26, 2024
Featured
See All Featured
Six Lessons from altMBA
skipperchong
29
4.5k
How to train your dragon (web standard)
notwaldorf
96
6.9k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
370
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
Test your architecture with Archunit
thirion
2
2.4k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
850
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.9k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
The browser strikes back
jonoalderson
0
1.8k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
950
Transcript
ブラウザに音声処理をさせるために やってる色々なこと @boke0_jp
自己紹介 Web アプリケーションエンジニア boke0 / 木瓜丸 ボケまる @boke0_jp @boke0 @boke0_jp
こんなものを作ってます ブラウザで音を作って遊べるアプリ アプリ内のシンセで自分好みの音を 作れる 作った音をMIDI的なもので鳴らせる
音声処理むずかしい サンプリングレート44100Hz 音によってはO(7n)の処理が走る さらにその音で5和音とか鳴らすことも考えられる 44100 * 7 * 5 =
1543500回の計算 これをブラウザで、リアルタイムにやる
実験 経験した中で一番重い音を、 128フレームずつ、10回生成し、 console.timeで計測してみる 環境 Arch Linux Node.js v20.10.0
結果 ウォームアップまでは1ms以上かかる サンプリングレートが44100Hzの場合、 128フレームあたり2.9ms 他の処理やクライアントのスペック次第 では、2.9msを上回り、ラグることも ~128 ~256 ~384 ~512
~640 ~768 ~894 ~1024 ~1152 ~1280 0.000 0.200 0.400 0.600 0.800 1.000 1.200 1.400
ラグるとこうなります
ラグとの戦い方 とりあえずWASMを使って、処理速度を上げる インタラクティブに音を鳴らす必要が無い場合は、WebWorkerで事 前にレンダリングしてしまう。 ボタンを押したら音が鳴る機能 →リアルタイムに処理 MIDIみたいなやつに基いて音が鳴る機能 →リアルタイム必須じゃないので、事前レンダリング
設計 メインスレッド WebWorkerのスレッド AudioWorkletのスレッド(リアルタイムに音声処理してるところ) AudioWorklet WebWorker 音声の生成を命令 生成した音声を返却 ユーザーの入力を伝達
WASM⇔JSで可変長データ(数字や配列)を無理矢理やり取りするた めの基盤を自作している。(大変) wasm_bindgenのようなツールにより楽をすることが多いが、 AudioWorkletの仕様上使いにくい AudioWorkletとかWebWorkerとかを使う機会はなかなかない 音を鳴らしたいという情熱だけで大変なことをしている 僕と一緒に情熱だけで大変なことをしよう 個人開発だからできる?
ご清聴ありがとうございました