Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
WebAudioと音の話
Search
kalibora
July 28, 2015
Programming
450
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WebAudioと音の話
WebAudioの初歩の初歩
kalibora
July 28, 2015
More Decks by kalibora
See All by kalibora
QA環境で誰でも自由自在に現在時刻を操って検証できるようにした話
kalibora
0
530
PHPのアノテーション(アトリビュート)からOpenAPIのドキュメントを出力し、レスポンスもそれを元にシリアライズすることで仕様と実装を乖離させず、色々楽できたよって話
kalibora
0
260
Swagger (OpenAPI) と PHPStan で REST API でも型安全っぽく使う
kalibora
0
3.5k
Symfony2 の Functional Test のメモリ使用量と実行時間を削減した話
kalibora
0
22
Other Decks in Programming
See All in Programming
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
570
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
150
1年で人数1.5倍、PR数5.5倍増。 品質とアウトカムはどうなったか、 何が効いたか
ike002jp
0
130
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.4k
【やさしく解説 設計編 #1】「ドメイン駆動」と「実装駆動」ってなに? 〜設計の考え方を、たとえ話で学ぼう〜
panda728
PRO
1
120
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
190
AIエージェントで 変わるAndroid開発環境
takahirom
2
650
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
170
광주소프트웨어마이스터고등학교 DevFest 특강 - 바이브 코딩 시대에서 주니어 개발자로 살아남는 방법
utilforever
1
130
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
250
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
3
450
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
432
67k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
470
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
How to train your dragon (web standard)
notwaldorf
97
6.7k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
300
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Building AI with AI
inesmontani
PRO
1
1.1k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
220
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Between Models and Reality
mayunak
4
370
Transcript
8FC"VEJPͱԻͷ
8FC"VEJPͬͯ ͬͯ·͔͢ʁ
8FC"VEJPͱʁ w 8FC"VEJP"1*8$ʹΑͬͯ։ൃ͞Ε͍ͯ ΔɺΣϒΞϓϦέʔγϣϯ༻ͷԻॲཧͱԻ ߹ͷͨΊͷߴϨϕϧ+BWB4DSJQU"1* w ओཁͳઃܭύϥμΠϜɺ"VEJP/PEFΦϒδΣ ΫτΛͭͳ͗ɺԻϧʔτάϥϑΛ࡞Δܗɻ࣮ ࡍͷॲཧɺओʹΣϒϒϥβͷ࣮Ͱߦ ΘΕΔ͕ɺ+BWB4DSJQUͰॲཧͯ͠߹͢Δ
͜ͱՄೳ
None
+BWB4DSJQUͰʂ ϒϥβ্Ͱʂ Ի͕ग़ͤΔʂ
Ͱ୯७ʹ XBWͱ͔NQͱ͔Λ ࠶ੜ͢ΔΘ͚͡Όͳ͍Α
ԻΛ߹ͨ͠Γͯ͠ ͲΜͳԻͰग़ͤΔΑ ʢཧ্ʣ
·ͣԻΛग़ͯ͠ΈΑ͏ var ctx = new AudioContext(); var osc =
ctx.createOscillator(); osc.connect(ctx.destination); osc.start(0); osc.stop(ctx.currentTime + 0.5); IUUQTHJTUHJUIVCDPNLBMJCPSBDGCEBFCB
Ͳ͏Ͱ͔͢ʁʂ Ի͕Ͱ·͔ͨ͠ʁ
DUY"VEJP$POUFYU ίʔυΛղઆ PTD var ctx = new AudioContext(); var
osc = ctx.createOscillator(); osc.connect(ctx.destination); osc.start(0); osc.stop(ctx.currentTime + 0.5); EFTUJOBUJPO DPOOFDU TUBSU TUPQ ԻΛग़͢ ஔ εϐʔΧʔ ͷΑ͏ͳ ͷ
ͱ͜ΖͰɺԻۭͬͯؾ தΛΘΔͰ͢ΑͶʁ
͖ͬ͞ग़ͨ͠Իͬͯ ͲΜͳͷܗʢܗʣ Λ͍ͯ͠Δͱࢥ͍·͔͢ʁ
͜ΜͳܗΛ͍ͯ͠·͢
͜ͷܗΛ ਖ਼ݭʢTJOFʣ ͱݴ͍·͢
දతͳܗҰཡ TRVBSFʢۣܗʣ TJOFʢਖ਼ݭʣ USJBOHMFʢࡾ֯ʣ TBXUPPUIʢڒࣃঢ়ʣ
ͲΕ໊લ௨ΓͷܗΛ ͍ͯ͠·͢
࣮ࡍʹͦΕͧΕͷ ܗΛ໐Βͯ͠ΈΑ͏
var ctx = new AudioContext(); var osc = ctx.createOscillator();
var types = ['sine', 'square', 'triangle', 'sawtooth']; var typeIdx = 0; var timerId = setInterval(function () { if (typeIdx >= types.length) { clearInterval(timerId); return; } console.log(types[typeIdx]); osc.type = types[typeIdx]; // set waveform here if (typeIdx === 0) { osc.start(0); osc.stop(ctx.currentTime + types.length * 1); } typeIdx++; }, 1000); osc.connect(ctx.destination); IUUQTHJTUHJUIVCDPNLBMJCPSBCGCDBBEGBBG
ؙ͍ܗؙ͍Ի ΪβΪβͷܗΪβΪβͨ͠Ի ʹฉ͑͜·ͤΜ͔ʁ
ͱ͍͏Θ͚Ͱɺ
Ի৭ͷܗʢܗʣ Ͱܾ·Γ·͢
ͱ͜ΖͰɺ
Իͱ͍͏ͷͷཁૉ Ի৭͚ͩͰ͋Γ·ͤΜ
Իͷཁૉ w Ի৭ʢUJNCSF UPOFʣ w େ͖͞ʢMPVEOFTTʣ w ߴ͞ʢQJUDIʣ
Ͱେ͖͞ͱߴ͞Կ Ͱܾ·ΔͷͰ͠ΐ͏͔ʁ
ج४ͱͳΔԻ
େ͖͍Ի ৼ෯
ߴ͍Ի प
Ͱɺ पΛมߋͯ͠ Իͷߴ͞Λมߋͯ͠Έ·͢
var ctx = new AudioContext(); var osc = ctx.createOscillator();
var freqs = [261.63, 293.67, 329.63, 349.23, 392.00, 440.00, 493.88, 523.23]; var freqIdx = 0; var timerId = setInterval(function () { if (freqIdx >= freqs.length) { clearInterval(timerId); return; } console.log(freqs[freqIdx]); osc.frequency.value = freqs[freqIdx]; // set frequency if (freqIdx === 0) { osc.start(0); osc.stop(ctx.currentTime + freqs.length * 1); } freqIdx++; }, 1000); osc.connect(ctx.destination); IUUQTHJTUHJUIVCDPNLBMJCPSBDEGC
࣍ʹɺ ৼ෯Λίϯτϩʔϧͯ͠ɺ Իͷେ͖͞Λมߋͯ͠Έ·͢
var ctx = new AudioContext(); var osc = ctx.createOscillator();
var gain = ctx.createGain(); var levels = [1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1]; var levelIdx = 0; var timerId = setInterval(function () { if (levelIdx >= levels.length) { clearInterval(timerId); return; } console.log(levels[levelIdx]); gain.gain.value = levels[levelIdx]; // set gain if (levelIdx === 0) { osc.start(0); osc.stop(ctx.currentTime + levels.length * 0.5); } levelIdx++; }, 500); osc.connect(gain); gain.connect(ctx.destination); IUUQTHJTUHJUIVCDPNLBMJCPSBGCFGGBCB
DUY"VEJP$POUFYU ίʔυΛղઆ PTD var ctx = new AudioContext(); var
osc = ctx.createOscillator(); var gain = ctx.createGain(); (snip) gain.gain.value = levels[levelIdx]; // set gain (snip) osc.connect(gain); gain.connect(ctx.destination); EFTUJOBUJPO DPOOFDU HBJO DPOOFDU ϘϦϡʔϜ ϑΣʔμʔΈ ͍ͨͳͷ
DUY"VEJP$POUFYU ιʔεϊʔυ " σεςΟωʔ γϣϯϊʔυ ϊʔυ " ϊʔυ # ιʔεϊʔυ
# ϊʔυ $ ੨͍࢛֯ϊʔυͱ ݺΕΔͷͰ ͦΕΒΛෳΈ߹Θͤͯ ͍ΖΜͳԻ͕࡞ΕΔΈ͍ͨͰ͢
͓͠·͍
TJOFΛ߹͍ͯ͠Ζ Μͳܗ͕࡞ΕΔ https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=sin(x) %2Bsin(2x)*(1%2F2)%2Bsin(3x)*(1%2F3)%2Bsin(4x)*(1%2F4)%2Bsin(5x)*(1%2F5)%2Bsin(6x)*(1%2F6)%2Bsin(7x)*(1%2F7) https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=sin(x) %2Bsin(3x)*(1%2F3)%2Bsin(5x)*(1%2F5)%2Bsin(7x)*(1%2F7)%2Bsin(9x)*(1%2F9)%2Bsin(11x)*(1%2F11)