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
SSAW14 第2回 - センサーでMozziをコントロール
Search
Atsushi Tadokoro
April 19, 2014
Technology
2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SSAW14 第2回 - センサーでMozziをコントロール
Atsushi Tadokoro
April 19, 2014
More Decks by Atsushi Tadokoro
See All by Atsushi Tadokoro
デザイン言語総合講座 - クリエイティブ・コーディング
tado
0
2.8k
Tumblrを使う4 - Webサイトを構成する、固定ページとタグ
tado
0
1.8k
Tumblrを使う3- カスタムHTMLテーマの作成
tado
0
470
Processing.jsによるデータの可視化と生成的表現
tado
1
1.9k
Tumblrを使う2 - テーマをカスタマイズする
tado
0
380
Touchéの仕組みを理解 - ProcessingとArduinoの連携
tado
0
2.4k
Github Pagesで作品を公開、Automatic Page Generatorでサイトを生成
tado
0
1.6k
TumblrでWebサイトを作成
tado
0
730
bmaw14 第2回: Touchéセンサーを使う1 Touchéセンサーを作成する
tado
0
2.3k
Other Decks in Technology
See All in Technology
サイバー捜査員研修(後半)
nomizone
1
860
DatadogのBits Chatが開発組織にもたらしたもの / What Bits Chat Has Brought Us
sms_tech
1
260
【AG-UI × A2UI × MCP Apps】Generative UIをやさしく解説する
nrinetcom
PRO
1
120
Head First モブプログラミング / Head First Mobprogramming
takaking22
10
12k
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
170
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
1
250
修正PRを食べてレビュースキルが賢くなる:Claude Codeによる自己改善サイクル
yuyaumetsu
6
1.5k
FPGAが実現する遠方宇宙の高空間分解能天体撮影 -大型地上望遠鏡の視力を補正する「補償光学」とは?-
komei_mt
0
230
クラウドセキュリティ入門 ~安全なクラウド利用のための基礎知識~
lhazy
13
8.7k
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
380
ホームラボ紹介
y_sera15
0
160
ハーレムエンジニアリング
kazuma777777
0
140
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
KATA
mclloyd
PRO
35
15k
So, you think you're a good person
axbom
PRO
2
2.1k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
470
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
900
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.3k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
200
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Transcript
44"8 ୈճηϯαʔͰ.P[[JΛίϯτϩʔϧ ݄ ଟຎඒज़େֶใσβΠϯֶՊϝσΟΞܳज़ίʔε ాॴ३
ࠓͷ༰ ‣ Ҿ͖ଓ͖.P[[J ‣ ֎෦ͷηϯαʔίϯτϩʔϥʔ͔Β.P[[JͷϓϩάϥϜΛ ίϯτϩʔϧͰ͖ΔΑ͏ʹ ‣ ࣗ࡞ָثͷୈҰา
ઌिͷ෮श
.P[[Jʹ͍ͭͯ ‣ .P[[Jˠ"SEVJOPͷͨΊͷԻڹ߹ϥΠϒϥϦ ‣ "SEVJOP୯ମͰɺߴͳԻڹ߹Λ࣮ݱ ‣ IUUQTFOTPSJVNHJUIVCJP.P[[J
εςϨΦϛχδϟοΫͷͱΓ͚ͭ ‣ "SEVJOP͔ΒԻΛग़ྗ͢ΔʹɺΦʔσΟΦग़ྗͷͨΊͷ ύʔπΛࣗ࡞ͯ͠ଓ͠ͳͯ͘ͳΒͳ͍ ‣ ࠓճɺळ݄ͷʮNNεςϨΦϛχδϟοΫ%*1ԽΩο τʯΛ༻ ‣ IUUQBLJ[VLJEFOTIJDPNDBUBMPHHH,
εςϨΦϛχδϟοΫͷͱΓ͚ͭ ‣ ࣍ʹϒϨουϘʔυଆͷઢ ‣ ҎԼͷΑ͏ʹઢ͢Δ
εςϨΦϛχδϟοΫͷͱΓ͚ͭ ‣ Ճͨ͠εςϨΦϛχδϟοΫΛஔ
εςϨΦϛχδϟοΫͷͱΓ͚ͭ ‣ "SEVJOPͱଓ ‣ (/%ͱɺ%JHJUBM0VUΛҎԼͷਤͷͱ͓Γଓ
εςϨΦϛχδϟοΫͷͱΓ͚ͭ ‣ ४උྃ
.P[[JͷμϯϩʔυͱΠϯετʔϧ ‣ .P[[JΛҎԼ͔Βμϯϩʔυ ‣ .P[[J[JQΛอଘ͢Δ ίί
.P[[JͷμϯϩʔυͱΠϯετʔϧ ‣ "SEVJOPΛىಈ ‣ 4LFUDI*NQPSU-JCSBSZ"EE-JCSBSZ ‣ ઌ΄Ͳμϯϩʔυͨ͠ɺ.P[[J[JQΛબ
.P[[JͷμϯϩʔυͱΠϯετʔϧ ‣ *NQPSU-JCSBSZͷཝʹ.P[[J͕ग़͖ͯͨΒΠϯετʔϧྃ
.P[[Jϓϩάϥϛϯά෮श
.P[[JϓϩάϥϜߏ ‣ ϓϩάϥϜͷߏҰൠతͳ"SEVJOPϓϩάϥϜ TFUVQ MPPQ ॳظઃఆ ϧʔϓ
.P[[JϓϩάϥϜߏ ‣ ϓϩάϥϜͷߏ.P[[JϓϩάϥϜ TFUVQ MPPQ VQEBUF$POUSPM VQEBUF"VEJP
ॳظઃఆ ϧʔϓ ίϯτϩʔϧߋ৽ ΦʔσΟΦߋ৽
#include <MozziGuts.h> #include <Oscil.h> #include <tables/sin2048_int8.h> ! Oscil <2048, AUDIO_RATE>
aSin(SIN2048_DATA); ! void setup(){ startMozzi(CONTROL_RATE); aSin.setFreq(440); } ! void updateControl(){ } ! int updateAudio(){ return aSin.next(); } ! void loop(){ audioHook(); } .P[[Jϓϩάϥϛϯά ɺ͡ΊͷҰา ‣ αϯϓϧ4JOΛੜ͢ΔϓϩάϥϜ
#include <MozziGuts.h> #include <Oscil.h> #include <tables/cos2048_int8.h> ! Oscil<COS2048_NUM_CELLS, AUDIO_RATE> aCos(COS2048_DATA);
Oscil<COS2048_NUM_CELLS, AUDIO_RATE> aVibrato(COS2048_DATA); ! const long intensity = 300; ! void setup(){ startMozzi(CONTROL_RATE); aCos.setFreq(220); aVibrato.setFreq(15.f); } ! void loop(){ audioHook(); } ! void updateControl(){ } ! int updateAudio(){ long vibrato = intensity * aVibrato.next(); return aCos.phMod(vibrato); } .P[[Jϓϩάϥϛϯά ɺ͡ΊͷҰา ‣ αϯϓϧ4JO Ϗϒϥʔτ
.P[[JΛίϯτϩʔϥͰૢ࡞͢Δ
.P[[JΛίϯτϩʔϥͰૢ࡞͢Δ ‣ .P[[JͷϓϩάϥϜΛɺ֎෦ͷίϯτϩʔϥʔ͔Βૢ࡞ ‣ ࠷ॳՄม߅Ͱ ‣ Γํ͕Θ͔ͬͨΒɺผͷηϯαʔͰ
#include <MozziGuts.h> #include <Oscil.h> #include <tables/cos2048_int8.h> ! Oscil<COS2048_NUM_CELLS, AUDIO_RATE> aCos(COS2048_DATA);
Oscil<COS2048_NUM_CELLS, AUDIO_RATE> aVibrato(COS2048_DATA); ! float intensity = 300.0; ! void setup(){ startMozzi(CONTROL_RATE); aCos.setFreq(220); aVibrato.setFreq(15.f); } ! void loop(){ audioHook(); } ! void updateControl(){ } ! int updateAudio(){ long vibrato = intensity * aVibrato.next(); return aCos.phMod(vibrato); } .P[[Jϓϩάϥϛϯά ɺ͡ΊͷҰา ‣ ઌ΄ͲͷϏϒϥʔτͷαϯϓϧ͔Βελʔτ
.P[[JΛίϯτϩʔϥͰૢ࡞͢Δ ‣ Իྔ͕େ͖͗ͯ͢ΠϠϗϯͰௌ͘ͷ͕ͭΒ͍ͷͰɺ·ͣԻ ྔΛίϯτϩʔϧͰ͖ΔΑ͏ʹ ! ‣ .P[[JͷϓϩάϥϜʹɺΞφϩά*/ͷΛө͢Δʹ ‣ NP[[J"OBMPH3FBEΛ༻͢Δ
‣ VQEBUF$POUSPM ͷதͰ༻ void updateControl(){ int hoge = mozziAnalogRead(INPUT_PIN); ... }
.P[[JΛίϯτϩʔϥͰૢ࡞͢Δ ‣ ԻྔΛมԽͤ͞Δʹɺ࠷ऴग़ྗͷʹ͔͚ࢉ͢Εྑ͍ Y
#include <MozziGuts.h> #include <Oscil.h> #include <tables/cos2048_int8.h> ! Oscil<COS2048_NUM_CELLS, AUDIO_RATE> aCos(COS2048_DATA);
Oscil<COS2048_NUM_CELLS, AUDIO_RATE> aVibrato(COS2048_DATA); ! float intensity = 300.0; ! int amp = 127; ! void setup(){ startMozzi(CONTROL_RATE); aCos.setFreq(220); aVibrato.setFreq(15.f); } ! void loop(){ audioHook(); } .P[[Jϓϩάϥϛϯά ɺ͡ΊͷҰา ‣ ઌ΄ͲͷϏϒϥʔτͷαϯϓϧ͔Βελʔτ Ճ
void updateControl(){ } ! int updateAudio(){ float vibrato = intensity
* aVibrato.next(); return int(aCos.phMod(vibrato) * amp) >> 8; } .P[[Jϓϩάϥϛϯά ɺ͡ΊͷҰา ‣ ઌ΄ͲͷϏϒϥʔτͷαϯϓϧ͔Βελʔτ Ճ
.P[[JΛίϯτϩʔϥͰૢ࡞͢Δ ‣ Իྔ͕ʹͳͬͨͣ ! ‣ Ͱ࣍ʹɺՄม߅ͰϘϦϡʔϜΛมߋͰ͖ΔΑ͏ʹ ‣ ·ͣϒϨουϘʔυͷઢ͔Β
.P[[JΛίϯτϩʔϥͰૢ࡞͢Δ ‣ ઢ ϔουϗϯδϟοΫ Մม߅
void updateControl(){ int volume = mozziAnalogRead(0); amp = map(volume, 0,
1024, 0, 255); } ! int updateAudio(){ float vibrato = intensity * aVibrato.next(); return int(aCos.phMod(vibrato) * amp) >> 8; } .P[[Jϓϩάϥϛϯά ɺ͡ΊͷҰา ‣ VQEBUF$POUSPM ʹՃ Ճ
.P[[JΛίϯτϩʔϥͰૢ࡞͢Δ ‣ ࣍ʹϏϒϥʔτͷਂ͞มߋͰ͖ΔΑ͏ʹ
.P[[JΛίϯτϩʔϥͰૢ࡞͢Δ ‣ Մม߅Ճ
.P[[JΛίϯτϩʔϥͰૢ࡞͢Δ ‣ ͞ΒʹɺϏϒϥʔτͷपՄมʹ
.P[[JΛίϯτϩʔϥͰૢ࡞͢Δ ‣ Մม߅Λ͞ΒʹՃ
#include <MozziGuts.h> #include <Oscil.h> #include <tables/cos2048_int8.h> ! Oscil<COS2048_NUM_CELLS, AUDIO_RATE> aCos(COS2048_DATA);
Oscil<COS2048_NUM_CELLS, AUDIO_RATE> aVibrato(COS2048_DATA); ! float intensity = 300.f; float vib = 15.f; int amp = 127; ! void setup(){ startMozzi(CONTROL_RATE); aCos.setFreq(80); aVibrato.setFreq(15.f); } ! void loop(){ audioHook(); } .P[[Jϓϩάϥϛϯά ɺ͡ΊͷҰา ‣ ͞ΒʹɺϏϒϥʔτͷपՄมʹ
void updateControl(){ int volume1 = mozziAnalogRead(0); amp = map(volume1, 0,
1024, 0, 255); int volume2 = mozziAnalogRead(1); intensity = map(volume2, 0, 1024, 0, 20000); int volume3 = mozziAnalogRead(2); vib = map(volume3, 0, 1024, 0, 100); aVibrato.setFreq(vib); } ! int updateAudio(){ float vibrato = intensity * aVibrato.next(); return int(aCos.phMod(vibrato) * amp) >> 8; } .P[[Jϓϩάϥϛϯά ɺ͡ΊͷҰา ‣ ͞ΒʹɺϏϒϥʔτͷपՄมʹ
࣮श ‣ લճվͨ͠αϯϓϧΛίϯτϩʔϥʔͰૢ࡞Ͱ͖ΔΑ͏ʹ ͞Βʹվͯ͠ΈΔ ‣ վͨ͠ʮָثʯͰύϑΥʔϚϯε ‣ ͍Ζ͍Ζͳʮ๏ʯΛ։ൃ͠ɺ࿅श͢Δ ‣ ୯७ͳϓϩάϥϜΛɺԋʹΑͬͯັྗతʹϓϨθϯςʔ
γϣϯ͢Δ ! ‣ ༻͢ΔηϯαʔɺՄม߅Ҏ֎ͷͷΛ༻͍ͯՄ