
[PWMDAC_Synth - PWM DAC synthesizer library for Arduino]

ver.20130327

Arduinoœ삷ȈՃVZTCUCułB

 CAmiDion

  http://www.yk.rim.or.jp/~kamide/music/chordhelper/hardware/

̂Q@ȍ~ŎCûłB

y낤ƂāAȖɂԂƂ͂܂񂩁H

EoȂ tone() 葁ǁAaoȂc

EanalogWrite()  PWM o͂ĂApXg̎g490Hz
@Ⴗ邩A1kHzỎȂď悹ȂAǂ悤c

ȖAAVR̃vXP[ij̐ݒς
pXg̎gőɂΈCɉB

̃CúA̎Ń^C}[荞݂𔭐A
o̔g`ɍ킹PWM̃pX𖈉XV
ƂɂĐFXȔg`̉炵܂B

O`bvȂ Arduino {̂̂̂
VZTCỦƂɊpĂB

CXg[

WJ PWMDAC_Synth tH_

	\Program Files\arduino-<o[Wԍ>\libraries\

ɒułB

uAArduino IDE ̃j[ [t@C]  [XPb`̗] 
PWMDAC_Synth 邱ƂmFĂB

o̓s(PWM)

iPWMDAC_Synth.h QƁj

PWMDAC_Synth.h CN[hOɁAPWM o͂ Arduino sԍ
#define PWMDAC_OUTPUT_PIN Œ`ĂB

F
	#define PWMDAC_OUTPUT_PIN 3
	#include <PWMDAC_Synth.h>

włsԍ 3,9,10,11 ̂ꂩłB

3,11 Iꍇ TIMER2A9,10 Iꍇ TIMER1 g܂B

ȂA5,6  PWM [qłĂwł܂B
 TIMER0 p ISR()  Arduino  millis() Ȃǂ̂߂ɎgĂ
Ē`łȂ߂łB

̂܂ PC  LINE IN ȂǂɂȂłAꉞ͕܂A
[pXtB^ŉgʂ悤ɂƁA蕷₷Ȃ܂B


g

t̃TvXPb`iexamples/*.inojɎႪ܂B
܂ACAmiDion Ȃ PWMDAC_Synth gĂXPb`QlɂĂB

Esetup() ̒ PWM_SYNTH.setup() gď܂B

Eloop() ̒ PWM_SYNTH.updateEnvelopeStatus() IɌĂяo܂B
	͌ȂǂADSRGx[v`݈̌ʒui߂A
	W[Vɂĕω鎞ԂƂ̎gXV邽߂̊֐łB
	Ăяopx͎ŃJE^pӂȂǂ̕@ŃRg[ĂB

 g֐ɂĂ PWMDAC_Synth.h QƂĂB


EMIDI`l

	PWM_SYNTH ̃\bhŁA

		MIDI`lԍ(1`16)  MIDI`lւ̃|C^

	𑊌ݕϊł܂B

	MidiChannel *getChannel(char channel)
	char getChannel(MidiChannel *cp)

	MIDI`lƂ̑ɂ́AMIDI`lւ̃|C^KvɂȂ܂B

	ANOTE OFFANOTE ON ɂĂ VoiceStatus NXɂ
	ǗKvȂ߁AMidiChannel NXɂ͎Ă܂B
	PWM_SYNTH ɂ noteOff()AnoteOn() gĂB

	sb`xhɂĂ PWM_SYNTH.pitchBend() g悤
	ĂBVoiceStatus ꏏɍXVAݖĂ鉹ɂ
	Ɣf܂B
	MidiChannel.setPitchBend() ōXVł́AVoiceStatus 
	XVȂ̂ŉA^Cɕω邱Ƃł܂B

EMIDI֐
	PWM_SYNTH ÓIIuWFNgɂ́AMIDICu MIDI.setHandleXxxx() 
	ڎwł悤Ȁ^킹֐pӂĂ܂B

	AڑMIDIfoCXɂẮANOTE OFF ̑
	velocity=0  NOTE ON 𑗂Ă邱Ƃ̂ŁȀꍇ
	NOTE OFF ĂяoƂHvKvɂȂ܂B

	sb`xh́AftHǵ}PŜ݂łB
	sb`xhZVereBixグăxh傫jɂ
	ΉĂ܂B

	Rg[`FẂAW[ViPԁĵ݂ɔ܂B

	MIDI`lԍ́AMIDICuɍ킹 1`16 ͈̔͂
	w肷悤ɍĂ܂B

EFύX
	vO`FWɂ͑ΉĂ܂B
	ɂɃGx[vp[^Ɣg`w肵ĉFύX܂B
	iMidiChannel NX wavetable  env_param Ŏw肵܂j

	Gx[vp[^ EnvelopeParam \̂čs܂B

	Eattack_speed - A^bNxiقǃA^bN^Cj
	Edecay_time - fBPCԁi傫قǃm[gǏj
	Esustain_level - TXeBxi~܂ƈێ鉹ʁj
	Erelease_time - [Xԁi傫قǃm[gIťj

	ȂA̎Ԃ loop()  updateEnvelopeStatus() Ăяo
	pxɂĕς܂B

	g`́APROGMEM zivf256byte^Ɍjw肵čs܂B

	aɂĉdȂƂAx 255 𒴂
	̌ɂȂ܂BiftHgFUdaj
	߂̒lŔg`悤ɂĂB
	ȂAPWM_SYNTH ɂgݍ݂̔g`z񂪂̂
	w肷ƊȒPłB

	EsineWavetable[]	g
	EsquareWavetable[]	`g
	EtriangleWavetable[]	Opg
	EsawtoothWavetable[]	̂g
	EshepardToneSineWavetable[]	g̖KiVFp[hg[j

	́A#define lς邱ƂŌIɂƑ₹܂A
	܂葝₵ƏǂȂȂ肵܂B
	iUda炢Ê悤łj

E[eBeB
	byte musicalMod7(char x)
	byte musicalMod12(char x)
		ꂼ7Ŋ]A12Ŋ]Ԃ܂B
		% ZqƈႢA^ĂŕԂ܂B
		Iɂ̓rbgZƉZōɌvZ܂B
		ǨvZɕ֗łB

	byte log2(unsigned int x)
		QƂΐA_ȉ؎̂ĂŕԂ܂B
		y = log2(x)  x = 1 << y ͋t֐̊֌WɂȂ܂B

	int musicalConstrain12(int note, int min_note, int max_note)
		Arduino  constrain() KpɎ֐B
		note  min_note ` max_note ̉ɂ
		note ̂܂ܕԂ܂B͂ݏoĂꍇA
		KςɃIN^[uʒuς邱ƂɂA
		͈͂Ɏ܂悤܂B

XV
	var.20130327
		EVvoice蓖Ăۂɔvoice肳
		@܂ƂsC

		E[eBeB֐ musicalConstrain12() ǉ

	var.20130113
		EW[V̂炬
		@ϐ PWM_SYNTH.modulation_dphase Œł悤ɂ܂B
		E[Xɉi]CjĂƂɃA^bNĂ
		@FςȂs̏C

	var.20130112
		Esb`xhlOĂƂ NOTE ON 
		@ۂ̃sb`lɖ߂Ă܂s̏C
		E[eBeB֐ log2() ǉ
		EMidiChannelNX̊OoA֐ .h ɏoăCCAȂ

	var.20121110
		Em[gԍOiŏF̂Ⴂ 8Hz 炢̉Kj
		@^Ƃhł͂Ȃ~̉ɂȂĂ܂oOC

		E[eBeB֐ musicalMod7() ǉ

	var.20121108
		E[eBeB֐ musicalMod12() ǉAIɂ
		@g悤ɂ܂B

	ver.20121029
		Ẽ`[jOisvȏ̏ȗȂǁj

	ver.20121013
		Eo PWM [q̕ύXAĂяoXPb`łł悤ɂ܂B
		@i܂ł̓CuȂƂł܂łj
		E[`̐

	ver.20120805
		EgetEnvelope()AgetWave() ǉ

	ver.20120719
		Eo PWM [qS̒Ił悤ɂ܂
		@iF3 ̂  VF3,9,10,11 IjB

	ver.20120716
		EgA`gAOpgÂg̔g`e[u
		@Cuɑgݍ݂܂B

	ver.20120611
		Eg`̎w@ύX܂B
		@g`e[uRAMg킸SʓIPROGMEMitbVֈړj
		@ƂɔAg`e[u֐Ŏw肷C^[tF[Xp~A
		@PROGMEMz̔g`e[uiĂяoŏKvjw肷
		@C^[tF[Xɂ܂B
		@ɂRAM̈悪팸ꂽقAMIDI`lƂ
		@g`Ⴄ̂ɂ邱Ƃ\ɂȂ܂B

	ver.20120609
		EgvŽ
		@Phase correctiʑjPWM ł̓^C}[JE^(TCNT2)
		@Opg`悤ɕς܂A㉺̒_PȂ̂
		@ۂ512NbNł͂Ȃ510NbNƂɊ荞݂
		@邱Ƃ܂B𓥂܂Ċl𒲐܂B

	ver.20120607
		E荞ݏ̍B
		@PWM荞݂ISR()Ă΂ nextPulseWidth() ֐
		@WrbgVtg̉Z[vO֒ǂoB

		ETIMER0~߂鏈RgAEg

	ver.20120321
		Eg`ύXsetWave()֐Ɉ{

	ver.20120318()

URL

dqyCAmiDion
	http://www.yk.rim.or.jp/~kamide/music/chordhelper/hardware/

̃Cũ_E[hFSourceForge̍ƕFdqyCAmiDion
	http://sourceforge.jp/users/kamide/pf/CAmiDion/files/

ҁF悵 - Akiyoshi Kamide
	http://www.yk.rim.or.jp/~kamide/
