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
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
890
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
act1-costs.pdf
sumedhbala
0
240
5分で問診!Composer セキュリティ健康診断
codmoninc
0
500
どこまでゆるくて許されるのか
tk3fftk
0
520
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
480
共通化で考えるべきは、実装より公開する型だった
codeegg
0
270
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
510
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
520
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
140
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
180
1年で人数1.5倍、PR数5.5倍増。 品質とアウトカムはどうなったか、 何が効いたか
ike002jp
0
140
Featured
See All Featured
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Context Engineering - Making Every Token Count
addyosmani
9
1k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
390
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.9k
Paper Plane
katiecoart
PRO
2
52k
A Modern Web Designer's Workflow
chriscoyier
698
190k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
350
The Spectacular Lies of Maps
axbom
PRO
1
870
Technical Leadership for Architectural Decision Making
baasie
3
440
My Coaching Mixtape
mlcsv
0
170
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
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)