• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

ATMEGA328を搭載した Arduino Duemilanove 互換機で音をPWM D/A変換出力するシンセサイザーライブラリです。


Commit MetaInfo

Revision3c6fdeedb6f0127f4fa8ced72842e82e8be5716d (tree)
Time2020-04-18 23:56:21
AuthorAkiyoshi Kamide <kamide@yk.r...>
CommiterAkiyoshi Kamide

Log Message

Doc/keywords update, and macro refactored

Change Summary

Incremental Difference

--- a/PWMDAC_Synth.h
+++ b/PWMDAC_Synth.h
@@ -1,5 +1,5 @@
11 //
2-// PWM DAC Synthesizer ver.20200413
2+// PWM DAC Synthesizer ver.20200418
33 // by Akiyoshi Kamide (Twitter: @akiyoshi_kamide)
44 // http://kamide.b.osdn.me/pwmdac_synth_lib/
55 // https://osdn.jp/users/kamide/pf/PWMDAC_Synth/
@@ -16,17 +16,7 @@
1616 #define cbi16(sfr, bit) (_SFR_WORD(sfr) &= ~_BV(bit))
1717 #define sbi16(sfr, bit) (_SFR_WORD(sfr) |= _BV(bit))
1818
19-// Function-to-array generator
20-#define FX2(f,x) f(x), f(x + 1)
21-#define FX4(f,x) FX2(f,x), FX2(f,x + 2)
22-#define FX8(f,x) FX4(f,x), FX4(f,x + 4)
23-#define FX16(f,x) FX8(f,x), FX8(f,x + 8)
24-#define FX32(f,x) FX16(f,x),FX16(f,x + 16)
25-#define FX64(f,x) FX32(f,x),FX32(f,x + 32)
26-#define FX128(f,x) FX64(f,x),FX64(f,x + 64)
27-#define ARRAY128(f) {FX128(f,0)}
28-#define ARRAY256(f) {FX128(f,0),FX128(f,128)}
29-
19+// Default parameter
3020 #ifndef PWMDAC_OUTPUT_PIN
3121 #define PWMDAC_OUTPUT_PIN 3
3222 #endif
@@ -37,7 +27,8 @@
3727 #define PWMDAC_POLYPHONY 6
3828 #endif
3929
40-// Built-in wavetable generator
30+//
31+// Built-in wavetable functions
4132 // x = Phase angle : 0x00...0x80(PI_radian)...0xFF
4233 // f(x) = Wave voltage at the x : 0x00(min)...0x80(center)...0xFF(max)
4334 #define PWMDAC_SQUARE_WAVE(x) (((x) < 0x80 ? 0x00 : 0xFF) / PWMDAC_POLYPHONY)
@@ -46,17 +37,26 @@
4637 #define PWMDAC_MAX_VOLUME_SINE_WAVE(x) ((byte)( 0x80 * (1 + sin(PI * (x) / 0x80)) ))
4738 #define PWMDAC_SINE_WAVE(x) ((byte)( 0x80 * (1 + sin(PI * (x) / 0x80)) / PWMDAC_POLYPHONY ))
4839 #define PWMDAC_SHEPARD_TONE(x) ((byte)( 0x80 * (8 \
49- +sin(PI * (x) / 0x80) \
50- +sin(PI * (x) / 0x40) \
51- +sin(PI * (x) / 0x20) \
52- +sin(PI * (x) / 0x10) \
53- +sin(PI * (x) / 0x08) \
54- +sin(PI * (x) / 0x04) \
55- +sin(PI * (x) / 0x02) \
56- +sin(PI * (x) / 0x01) \
57- ) / (8 * PWMDAC_POLYPHONY) ))
40+ +sin(PI * (x) / 0x80) \
41+ +sin(PI * (x) / 0x40) \
42+ +sin(PI * (x) / 0x20) \
43+ +sin(PI * (x) / 0x10) \
44+ +sin(PI * (x) / 0x08) \
45+ +sin(PI * (x) / 0x04) \
46+ +sin(PI * (x) / 0x02) \
47+ +sin(PI * (x) / 0x01) \
48+ ) / (8 * PWMDAC_POLYPHONY) ))
49+
50+#define FX2(f,x) f(x), f(x + 1)
51+#define FX4(f,x) FX2(f,x), FX2(f,x + 2)
52+#define FX8(f,x) FX4(f,x), FX4(f,x + 4)
53+#define FX16(f,x) FX8(f,x), FX8(f,x + 8)
54+#define FX32(f,x) FX16(f,x), FX16(f,x + 16)
55+#define FX64(f,x) FX32(f,x), FX32(f,x + 32)
56+#define FX128(f,x) FX64(f,x), FX64(f,x + 64)
57+#define FX256(f,x) FX128(f,x), FX128(f,x + 128)
5858
59-#define PWMDAC_CREATE_WAVETABLE(table, function) PROGMEM const byte table[] = ARRAY256(function)
59+#define PWMDAC_CREATE_WAVETABLE(table, func) PROGMEM const byte table[] = { FX256(func,0) }
6060
6161 // [Phase-correct PWM dual-slope]
6262 // TCNTn value changes to:
@@ -277,7 +277,7 @@ class PWMDACSynth {
277277 wavetable = this->channel->wavetable;
278278 envelope = this->channel->envelope;
279279 modulation = &(this->channel->modulation);
280- static PROGMEM const unsigned long phase_speed_table[] = ARRAY128(PHASE_SPEED_OF);
280+ static PROGMEM const unsigned long phase_speed_table[] = { FX128(PHASE_SPEED_OF,0) };
281281 dphase32_original = pgm_read_dword(phase_speed_table + (this->note = note));
282282 dphase32_bended = this->channel->bendedPitchOf(dphase32_original);
283283 dphase32_real = dphase32_bended + dphase32_moffset;
--- a/README.txt
+++ b/README.txt
@@ -1,17 +1,17 @@
11
22 [PWMDAC_Synth - PWM DAC synthesizer library for Arduino]
33
4-ver.20200405
4+ver.20200418
55
66 https://osdn.jp/users/kamide/pf/PWMDAC_Synth/wiki/FrontPage
77
8-Arduino‚Å“®ì‚·‚éŠÈˆÕƒVƒ“ƒZƒTƒCƒUƒ‰ƒCƒuƒ‰ƒŠ‚Å‚·B
98
109 ‚±‚ê‚́ACAmiDion
1110
1211 http://www.yk.rim.or.jp/~kamide/music/chordhelper/hardware/
1312
14-‚Ì‚Q†‹@ˆÈ~‚ÅŽÀ‘•‚µ‚½‰¹Œ¹‚ðƒ‰ƒCƒuƒ‰ƒŠ‰»‚µ‚½‚à‚Ì‚Å‚·B
13+‚Ì‚Q†‹@ˆÈ~‚ÅŽÀ‘•‚µ‚½‰¹Œ¹‚ðƒ‰ƒCƒuƒ‰ƒŠ‚Æ‚µ‚Ä“Æ—§‚³‚¹‚½A
14+ArduinoŒÝŠ·‹@—p‚ÌPWMƒVƒ“ƒZƒTƒCƒUƒ‰ƒCƒuƒ‰ƒŠ‚Å‚·B
1515
1616
1717 œArduino‚ÅŠyŠí‚ðì‚낤‚Æ‚µ‚āA‚±‚ñ‚È–â‘è‚É‚Ô‚¿“–‚½‚Á‚½‚±‚Æ‚Í‚ ‚è‚Ü‚¹‚ñ‚©H
@@ -52,6 +52,8 @@ Arduino
5252 Šî–{“I‚ÈŽg‚¢•û‚ð‰º‹L‚ÉŽ¦‚µ‚Ü‚·B‚È‚¨Aƒm[ƒgƒIƒ“Aƒm[ƒgƒIƒt‚ȂǁA‰¹‚̏o‚µ•û‚ɂ‚¢‚Ä‚Í
5353 Arduino IDE ‚̃ƒjƒ…[‚©‚炽‚Ç‚ê‚éuƒXƒPƒbƒ`‚Ì—áv‚ðŽQl‚É‚µ‚Ä‚­‚¾‚³‚¢B
5454
55+ yƒTƒ“ƒvƒ‹ƒR[ƒhz
56+ //
5557 // •K—v‚ɉž‚¶APWMDAC_Synth.h ‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚é‘O‚É #define ‚ʼnº‹L‚ðŽw’è‚Å‚«‚Ü‚·B
5658 //
5759 #define PWMDAC_OUTPUT_PIN 3 // PWMo—̓sƒ“”ԍ†iÈ—ª‰ÂF‰º‹Luœo—̓sƒ“(PWM)vŽQÆj
@@ -101,9 +103,14 @@ Arduino
101103 ƒfƒtƒHƒ‹ƒg‚Í6d˜a‰¹‚Å‚·B
102104 PWMDAC_POLYPHONY ‚ɐ”’l‚ðÝ’肵‚ăRƒ“ƒpƒCƒ‹‚µ’¼‚·‚±‚Æ‚Å‘Œ¸‰Â”\‚Å‚·B
103105
104- “¯Žž”­‰¹”‚𑝂₷‚ƁA‚»‚Ì•ªAŠ„‚荞‚ݏˆ— ISR() ‚ÌŽÀs‚ÉŽžŠÔ‚ª‚©‚©‚è‚Ü‚·B
105- Š„‚荞‚݈ȊO‚̏ˆ—‚ðs‚¤‚½‚ß‚ÌŽžŠÔ“I—]—T‚ª‚È‚­‚È‚Á‚½Žž“_‚Å“®ì‚µ‚È‚­‚È‚è‚Ü‚·B
106- ‚»‚¤‚Ȃ鐡‘O‚ªAŽ–ŽÀã‚Ì“¯Žž”­‰¹”‚̏ãŒÀ‚Å‚·B
106+ ¦ “¯Žž”­‰¹”‚𑝂₵‚Ä‚¢‚­‚ƁA‚»‚Ì•ª
107+ ISR() (Interrupt Service Routine: Š„‚荞‚݃T[ƒrƒXƒ‹[ƒ`ƒ“)‚É‚¨‚¯‚é
108+ ƒ‹[ƒv‰ñ”‚ª‘‚¦A‘½–Z‚É‚È‚Á‚Ä‚«‚Ü‚·B‚ ‚Ü‚è‚É‘½–Z‰ß‚¬‚Ä loop() ‚ðŽÀs‚·‚é
109+ ‰É‚ª‚È‚­‚È‚é‚ƁA“®ì•s”\‚Ɋׂè‚Ü‚·B‚»‚¤‚Ȃ鐡‘O‚ªA“¯Žž”­‰¹”‚ÌŽ–ŽÀã‚̏ãŒÀ‚Å‚·B
110+
111+ ¦ ISR() ‚È‚Ç‚Å“®ì‘¬“x‚ª—v‹‚³‚ê‚邽‚߁APWMDAC_Synth.h ‚É‚Í
112+ #pragma GCC optimize ("-O3")
113+ ‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚·BƒRƒ“ƒpƒCƒ‹‚̍œK‰»Šî€‚ðA‚±‚̃‰ƒCƒuƒ‰ƒŠ‚¾‚¯‘¬“x—Dæ‚É‚·‚邽‚ß‚Å‚·B
107114
108115 “Á’è‚ÌMIDIƒ`ƒƒƒ“ƒlƒ‹‚ɑ΂µƒ{ƒCƒXƒAƒTƒCƒ“‚Ì—Dæ“x‚ðã‚°‚邱‚Æ‚à‚Å‚«‚Ü‚·B
109116 Œãq‚́uœƒ`ƒƒƒ“ƒlƒ‹—Dæ“xŽw’èv‚ðŽQÆB
@@ -126,27 +133,23 @@ Arduino
126133
127134 œMIDIƒ`ƒƒƒ“ƒlƒ‹‘€ì
128135
129- PWM_SYNTH ‚̃ƒ\ƒbƒh‚ŁA
136+ PWMDACSynth::getChannel() ‚Å
130137
131138 MIDIƒ`ƒƒƒ“ƒlƒ‹”ԍ†(1`16) Ì MIDIƒ`ƒƒƒ“ƒlƒ‹‚ւ̃|ƒCƒ“ƒ^
132139
133- ‚𑊌ݕϊ·‚Å‚«‚Ü‚·B
134-
135- MidiChannel *getChannel(char channel)
136- char getChannel(MidiChannel *cp)
137-
138- MIDIƒ`ƒƒƒ“ƒlƒ‹‚ւ̃|ƒCƒ“ƒ^‚ð‰î‚µ‚ă`ƒƒƒ“ƒlƒ‹’PˆÊ‚ÉŽ‚½‚¹‚é
139- ƒpƒ‰ƒ[ƒ^‚𑀍ì‚Å‚«‚Ü‚·B
140+ ‚𑊌ݕϊ·‚Å‚«‚Ü‚·BMIDIƒ`ƒƒƒ“ƒlƒ‹‚ւ̃|ƒCƒ“ƒ^‚ð‰î‚µ‚āA
141+ ƒ`ƒƒƒ“ƒlƒ‹’PˆÊ‚ÉŽ‚½‚¹‚éƒpƒ‰ƒ[ƒ^‚𑀍ì‚Å‚«‚Ü‚·B
142+ i‘€ì•û–@‚ɂ‚¢‚Ä‚Í PWMDAC_Synth.h ‚ðŽQÆj
140143
141144 ‚È‚¨Aƒm[ƒgƒIƒ“Aƒm[ƒgƒIƒtAƒsƒbƒ`ƒxƒ“ƒh‚ȂǁA¡o‚Ä‚¢‚鉹
142- iƒAƒTƒCƒ“‚³‚ê‚Ä‚¢‚éƒ{ƒCƒXj‚É‘¦À‚É”½‰f‚³‚¹‚é‚ɂ́A
143- MidiChannel ‚Å‚Í‚È‚­ PWMDACSynth ‚̃ƒ“ƒoŠÖ”‚ðŒÄ‚яo‚·•K—v‚ª‚ ‚è‚Ü‚·B
145+ iƒAƒTƒCƒ“‚³‚ê‚Ä‚¢‚éƒ{ƒCƒXj‚É‘¦À‚É”½‰f‚³‚¹‚é‚ɂ́APWMDACSynth ‚Ì‚Ù‚¤‚Å
146+ —pˆÓ‚µ‚Ä‚¢‚郁ƒ“ƒoŠÖ”‚ðŒÄ‚яo‚µAƒ`ƒƒƒ“ƒlƒ‹‚ƃ{ƒCƒX‚𓯎ž‚ɍXV‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B
144147
145148
146149 œMIDIŠÖ”
147150
148- PWM_SYNTH Ã“IƒIƒuƒWƒFƒNƒg‚ɂ́AMIDIƒ‰ƒCƒuƒ‰ƒŠ‚Ì MIDI.setHandleXxxx() ‚É
149- ’¼ÚŽw’è‚Å‚«‚é‚悤Aˆø”‚̏‡˜‚âŒ^‚ð‡‚í‚¹‚½ŠÖ”‚ð‚¢‚­‚‚©—pˆÓ‚µ‚Ä‚¢‚Ü‚·B
151+ PWMDACSynth ‚Å’è‹`‚³‚ꂽ‚¢‚­‚‚©‚Ì static ƒIƒuƒWƒFƒNƒg‚́A
152+ MIDIƒ‰ƒCƒuƒ‰ƒŠ‚Ì MIDI.setHandleXxxx() ‚É’¼ÚŽw’è‚Å‚«‚éŒ`Ž®‚É‚È‚Á‚Ä‚¢‚Ü‚·B
150153
151154 ‚½‚¾‚µAÚ‘±‘ŠŽè‚ÌMIDIƒfƒoƒCƒX‚É‚æ‚Á‚ẮANOTE OFF ‚Ì‘ã‚í‚è‚É
152155 velocity=0 ‚Ì NOTE ON ‚ð‘—‚Á‚Ä‚­‚邱‚Æ‚ª‚ ‚é‚̂ŁA‚»‚̏ꍇ‚¾‚¯
@@ -158,39 +161,29 @@ Arduino
158161
159162 œ‰¹F•ÏX
160163
161- ”gŒ`‚ƃGƒ“ƒxƒ[ƒvƒpƒ‰ƒ[ƒ^iADSRj‚ð MidiChannel ƒNƒ‰ƒX‚Ì
162- wavetable ‚Æ env_param ‚ÉŽw’è‚·‚邱‚ƂŁA‰¹F‚ð•ÏX‚Å‚«‚Ü‚·B
163-
164- ADSR‚̐ݒè‚Í EnvelopeParam ƒNƒ‰ƒX‚ð‰î‚µ‚čs‚¢‚Ü‚·B
165- ƒRƒ“ƒXƒgƒ‰ƒNƒ^‚ÅŽŸ‚Ì’l‚ðŽw’肵‚ú‰»‚Å‚«‚Ü‚·B
166-
167- Eattack_time - ƒAƒ^ƒbƒNŽžŠÔi‘å‚«‚¢‚قǃm[ƒgƒIƒ“’¼Œã‚Ì—§‚¿ã‚ª‚肪‚ä‚Á‚­‚èj
168- Edecay_time - ƒfƒBƒPƒCŽžŠÔi‘å‚«‚¢‚قǃm[ƒgƒIƒ“Œã‚ÌŒ¸Š‚ª‚ä‚Á‚­‚èj
169- Esustain_level - ƒTƒXƒeƒBƒ“ƒŒƒxƒ‹iŒ¸Š‚ªŽ~‚Ü‚Á‚½‚ ‚ƈێ‚·‚鉹—ʁj
170- Erelease_time - ƒŠƒŠ[ƒXŽžŠÔi‘å‚«‚¢‚قǃm[ƒgƒIƒtŒã‚ÌŒ¸Š‚ª‚ä‚Á‚­‚èj
171-
172- ’l‚Ì”ÍˆÍ‚Í sustain_level ‚ª 0`255A‚»‚êˆÈŠO‚Í 0`15 ‚Å‚·B
173- ŽÀŽžŠÔ‚Í loop() “à‚Å update() ‚ðŒÄ‚яo‚·•p“x‚É‚æ‚Á‚Ä•Ï‚í‚è‚Ü‚·B
164+ ”gŒ`ƒe[ƒuƒ‹‚ÆADSRƒGƒ“ƒxƒ[ƒvƒpƒ‰ƒ[ƒ^‚ðA‚»‚ꂼ‚ê MidiChannel ƒNƒ‰ƒX‚Ì
165+ wavetable ‚Æ envelope[] ‚ÉŽw’è‚·‚邱‚ƂŁA‰¹F‚ð•ÏX‚Å‚«‚Ü‚·B
174166
175- ŠeADSRƒpƒ‰ƒ[ƒ^’l‚ւ̃|ƒCƒ“ƒ^‚Í getParam() ƒƒ\ƒbƒh‚Ŏ擾‚Å‚«‚Ü‚·B
167+ ‚Ü‚½AInstrument \‘¢‘̒萔‚ðƒvƒƒOƒ‰ƒ€ƒƒ‚ƒŠ—̈æ‚ɍì‚èA‚»‚ê‚ð
168+ programChange() ‚ÉŽw’è‚·‚邾‚¯‚ŁA”gŒ`‚ƃGƒ“ƒxƒ[ƒv‚ðˆê“x‚ɐݒè‚Å‚«‚Ü‚·B
169+ MIDI‚̃vƒƒOƒ‰ƒ€ƒ`ƒFƒ“ƒW‚ðŽÀ‘•‚·‚é‚Æ‚«‚É•Ö—˜‚Å‚·B
176170
171+ y”gŒ`z wavetable
177172 ”gŒ`ƒe[ƒuƒ‹‚́A—v‘f”256‚ÌbyteŒ^PROGMEM”z—ñ‚Æ‚µ‚ж¬‚µ‚Ü‚·B
178173 ‚»‚ê‚ð wavetable ‚ÉŽw’è‚·‚邱‚ƂŁA”gŒ`‚ðØ‚è‘Ö‚¦‚邱‚Æ‚ª‚Å‚«‚Ü‚·B
179-
180- ”gŒ`ƒe[ƒuƒ‹”z—ñ‚̐¶¬‚́APWMDAC_Synth.h ã‚Å’è‹`‚³‚ꂽ
181- ƒ}ƒNƒ‚ðŽg‚¢A•K—v‚È”gŒ`ƒe[ƒuƒ‹‚¾‚¯‚𐶐¬‚µ‚Ä‚­‚¾‚³‚¢B
182-
183- ‚±‚̃}ƒNƒ‚́A“¯Žž”­‰¹”‚ª‘‚¦‚Ä‚àM†ƒŒƒxƒ‹‚ª255‚ð’´‚¦‚ĉ¹Š„‚ꂹ‚¸A
184- ‚©‚ő剹—ʂ̏o‚é‚悤‚ÈŒvŽZŽ®‚É‚È‚Á‚Ä‚¢‚Ü‚·B
185- ‚±‚ê‚ɏK‚Á‚ÄŽ©•ª‚Å”gŒ`‚ð’è‹`‚·‚ê‚΁A‚»‚ê‚ðŽw’肵‚Ä
186- “ÆŽ©‚̉¹F‚𐶂ݏo‚·‚±‚Æ‚à‰Â”\‚Å‚·B
187-
188- ƒvƒƒOƒ‰ƒ€ƒƒ‚ƒŠ—̈æ‚É Instrument \‘¢‘̒萔‚ðì‚Á‚āA
189- ‚»‚ê‚ðŽw’è‚·‚邱‚Ƃʼn¹F‚ð•ÏX‚·‚邱‚Æ‚à‚Å‚«‚Ü‚·B
190- MIDI‚̃vƒƒOƒ‰ƒ€ƒ`ƒFƒ“ƒW‚ÌŽÀ‘•‚É‚Í‚±‚Ì•û–@‚ª‚¨‚·‚·‚ß‚Å‚·B
191- Œ»Ý‚̃o[ƒWƒ‡ƒ“‚ł́AƒvƒƒOƒ‰ƒ€ƒ`ƒFƒ“ƒW‘Ήž‚É”º‚¢A
192- ƒGƒ“ƒxƒ[ƒv‚̏‰Šú‰»‚É Instrument \‘¢‘̒萔‚ðŽg‚¤ƒCƒ“ƒ^[ƒtƒF[ƒX‚É
193- ‚µ‚ÄRAM‚Ö‚Ì“WŠJ‚ðÅ¬ŒÀ‚É—}‚¦‚ç‚ê‚é‚悤‚É‚µ‚Ü‚µ‚½B
174+ ”gŒ`ŠÖ”‚̃}ƒNƒ‚ð PWMDAC_CREATE_WAVETABLE() ƒ}ƒNƒ‚ÉŽw’è‚·‚é‚©A
175+ ‚Ü‚½‚Í‚»‚ê‚É‚È‚ç‚Á‚ÄŽ©•ª‚Å”z—ñ‚ð’è‹`‚·‚邱‚ƂŁA”CˆÓ‚Ì”gŒ`‚𐶐¬‚·‚邱‚Æ‚ª‰Â”\‚Å‚·B
176+
177+ ¦ ”g‚‚́i255€“¯Žž”­‰¹”FƒfƒtƒHƒ‹ƒg6d˜a‰¹‚Ì‚Æ‚«42j‚ð’´‚¦‚È‚¢‚悤‚É‚µ‚Ä‚­‚¾‚³‚¢B
178+ “¯Žž”­‰¹”‚¢‚Á‚Ï‚¢‚ɖ‚炵‚½‚Æ‚«‚ɍő剹—Ê255‚ð’´‚¦‚ăI[ƒo[ƒtƒ[‚µAƒmƒCƒY‚ª
179+ ”­¶‚·‚é‹°‚ꂪ‚ ‚è‚Ü‚·B
180+
181+ yADSRƒGƒ“ƒxƒ[ƒvz envelope[]
182+ ADSR_ATTACK_VALUE - ƒAƒ^ƒbƒNŽžŠÔi0`15A‘å‚«‚¢‚قǃm[ƒgƒIƒ“’¼Œã‚Ì—§‚¿ã‚ª‚肪‚ä‚Á‚­‚èj
183+ ADSR_DECAY_VALUE - ƒfƒBƒPƒCŽžŠÔi0`15A‘å‚«‚¢‚قǃm[ƒgƒIƒ“Œã‚ÌŒ¸Š‚ª‚ä‚Á‚­‚èj
184+ ADSR_SUSTAIN_VALUE - ƒTƒXƒeƒBƒ“ƒŒƒxƒ‹i0`255AŒ¸Š‚ªŽ~‚Ü‚Á‚½‚ ‚ƈێ‚·‚鉹—ʁj
185+ ADSR_RELEASE_VALUE - ƒŠƒŠ[ƒXŽžŠÔi0`15A‘å‚«‚¢‚قǃm[ƒgƒIƒtŒã‚ÌŒ¸Š‚ª‚ä‚Á‚­‚èj
186+ ŽÀŽžŠÔ‚Í loop() “à‚Å update() ‚ðŒÄ‚яo‚·•p“x‚É‚æ‚Á‚Ä•Ï‚í‚è‚Ü‚·B
194187
195188
196189 œƒ`ƒƒƒ“ƒlƒ‹—Dæ“xŽw’è
@@ -217,10 +210,6 @@ Arduino
217210 ‘½d˜a‰¹Š´‚ªŽ¸‚í‚ê‚邱‚Æ‚ª‚ ‚è‚Ü‚·‚̂ŁA“K‹X’²®‚µ‚Ä‚­‚¾‚³‚¢B
218211
219212
220-œ‚»‚Ì‘¼‚̊֐”
221-
222- ‚»‚Ì‘¼A—˜—p‚Å‚«‚éŠÖ”‚ɂ‚¢‚Ă̓\[ƒXƒR[ƒh‚̃wƒbƒ_ PWMDAC_Synth.h ‚ðŽQÆB
223-
224213
225214 ìŽÒF—‚«‚悵 - Akiyoshi Kamide
226215 http://www.yk.rim.or.jp/~kamide/
--- a/keywords.txt
+++ b/keywords.txt
@@ -6,10 +6,8 @@
66 # Datatypes (KEYWORD1)
77 #######################################
88
9-EnvelopeParam KEYWORD1
109 Instrument KEYWORD1
1110 MidiChannel KEYWORD1
12-VoiceStatus KEYWORD1
1311 PWMDACSynth KEYWORD1
1412
1513 #######################################
@@ -24,7 +22,6 @@ pitchBend KEYWORD2
2422 controlChange KEYWORD2
2523 systemReset KEYWORD2
2624 getChannel KEYWORD2
27-setEnvelope KEYWORD2
2825 setPriority KEYWORD2
2926
3027 #######################################
@@ -35,3 +32,4 @@ PWMDAC_NOTE_A_FREQUENCY LITERAL1
3532 PWMDAC_POLYPHONY LITERAL1
3633 PWMDAC_OUTPUT_PIN LITERAL1
3734 PWMDAC_CHANNEL_PRIORITY_SUPPORT LITERAL1
35+