ã¬ã¼ã¶ã¼å¯è¦å éä¿¡ã§æãæã£ãã¢ã«ãã£ã¼ã
â»ã¿ã¤ãã«ã¯ã大åã¾ãåèãéæ²³ãããã¯ã¼ã¯ã§æãæã£ãã¯ã¸ã©ãããã
ååã®å¯è¦å
éä¿¡ãããã«ãããã«Aruduinoãéä¿¡ã«ä½¿ã£ã¦ããå°ãéã¶ã¨ãã¾ãã
LEDã ã¨è·é¢ãè¦ããã£ãã®ã§ãä»åã¬ã¼ã¶ã¼ã使ãã¾ãã
ï¼ä½ããPerfume ã®æ°èãã¬ã¼ã¶ã¼ãã¼ã ããçºå£²éè¿(2011/5/18)ã§ããããããªã®ã§å¾åã§ã¯Arduionoã«Perfumeãæãããï¼ãã¨ãããã¾ããï¼
å¯è¦å
éä¿¡ã®éä¿¡é¨ã¯ã以åã®ã¯ãã¶ãããã¿è¨äºã§ãArduionoã«èµ¤è²ã¬ã¼ã¶ãã¤ã³ã¿ãã¤ãªãããã¤ãããã®ã§OKã
åä¿¡é¨ã¨A/D (ã¢ããã°âãã¸ã¿ã«å¤æï¼ã¯ååã®å
éä¿¡ãããã®åä¿¡é¨ããã®ã¾ã¾ä½¿ãã°OKã
åçã®ç½ããã¤ã¯åãªã乾黿± ã®USB給é»å¨ã§ãã
ãã¨ã¯Arduinoã§ã¢ããã°é³å£°å¤èª¿ãããã¹ã±ãã(Arduinoã®ããã°ã©ã )ã§ãããã»ã»ã»ã¨ãããããPWMï¼ãã«ã¹å¹
å¤èª¿ï¼ã§ãªã¼ãã£ãªåºãã®ãã°ã°ãã¾ãã¦ãããã§éã¶ãã¨ã¨ãã¾ãããããã人ãããããã§ãã
Cantarino, the Arduino speech synthesiser
ï¼BoxHeadRoomããã®è¨äºã『Cantarino』唄うArduino ã¨ããç´¹ä»è¨äºãããããããã§ããå¾è¿°ããã2001å¹´ã»ã»ãã®HALã®æãã·ã¼ã³ã¸ã®ãªã³ã¯ãããã¾ããï¼
ããããåããã¨è¨ãåã«æ¥ãããé²é³æ¸é³å£°ã®PCMãã¼ã¿ãåºãããããªãã¦ããã©ã«ãã³ãã·ã³ã»ãµã¤ã¶ã¼ã§ããã¤ã¾ããåé³ãã¯ã¿ãããªããã§ããï¼æ£ç¢ºã«ã¯ãåé³ãã¯ã¯é²é³æ¸é³ç´ çã使ãé£çµçåææ¹å¼ã§ãä»åç´¹ä»ããã¹ã±ããã¯è¨ç®ã§é³å£°æ³¢å½¢ãã¤ãããã©ã«ãã³ãåææ¹å¼ã§ã)
ä¸è¨åç»ã®å·¥ä½ä¾ã§ã¯ããã®PWMã®ï¼ãã³ã®åºåãã¢ã³ãã»ã¹ãã¼ã«ã¼ã«ã¤ãªãã§é³ãåºãã¦ã¾ãããä»åã¯ããã®PWMãã«ã¹ã§ã¬ã¼ã¶ã¼é§åãã¦å
å¤èª¿ãã«ã¹ã¨ãã¦éã£ã¦ãå
éä¿¡ãããã§åä¿¡ã¨ãã¾ãã
ãã®ã¬ã¼ã¶ãã¤ã³ã¿ã®é§åã¯ï¼V 17mAãArduinoã®ãã¸ã¿ã«ãã³ã¯ï¼V40mAã¾ã§ã²ã£ã±ãã¾ããã§ãã®ã§ãéã«åããã§ããä¸çªå®æãªæ¹æ³ãæµæã§é»å§ããããããã¦ãï¼Vãããã«è½ã¨ãã¦ãã£ã¤ã§ãã£ã¦ã¾ãã
ã¨ãããã¨ã§ãã¹ã±ããããã¼ãã«Uploadãã¦ããã£ã¨åä½ç¢ºèªã§ãããããã£ããã¬ã¼ã¶ã¼ãªãã§ç¸å½å±ãã¯ãï¼ããçµµãåãããï¼ãã¨ãè¿æã®å ¬åã§ãæ¯åã«åå¡ããã¦æä¼ããã¦å®é¨ãã¦ã¿ã¾ããã
5mãããããé æ¬¡é·ããã¦ãããã¨æã£ãããå®é¨ãã¦ã¿ã¦é©æã®ãã¿ã¬äºå®ï¼å·¥ä½ã«ä½¿ã£ãã¬ã¼ã¶ã¼ãã¤ã³ã¿ãå®ç©ã§ããã¼ã ãçãããã ã£ãã®ã§ãã_|ï¿£|ãâ¦ãã»ãã®20ï½ãããã§ããããã®ããã«ãã¼ã ãã ã åºãããã®ããããéçã®ããã§ãã100ï½ã¯è»½ãã¨æã£ãã®ã§ããã»ã»ã»
ãã®ããã«æ°mããããªãã¡ããã¨ãã¼ã ãªãã§ããã»ã»ã»ã»
æ¬å½ã¯å ¬åãã£ã±ã使ã£ã¦ãé¡ã§ã°ã©ã¦ã³ãã²ã¨ã¾ããã®åå°è¡æç ²ãã£ã¡ããï¼ã¨ã妿³åºãã£ã¦ãã®ã§ããã»ã»ã»å®ããã§ãããã¬ã³ãºã®æªã¿ãç¦ç¹èª¿æ´ã®å·¥ä½ç²¾åº¦ãªã®ããã¾ããã¨ããããããã§ãæå¬ã¨ããã¦ãã ããã
ãã®ãå®é¨ããã£ã¦ãã¨ãã§ãããä¸ãåãã¦è
°ã®é«ããããã®ãã¼ã ã®ä½ç½®ã確èªããªããå¾ããããã§ããããã ãã ãããåºãããããï¼ãã¨ããã£ã¦ãããå
¬åã§ãããã¹ããã¦ããã°ããéããã¡ãããã©ãã©ãããã®äººä½ãã£ã¦ãã®ããããï¼ä½ãè½ã¨ããã®ãããããããªããå¤ãããã¨ãã½ãã½ãèããã¦ããã®ãã¡ãä½è½ã¨ããã®ï¼å¤§ä¸å¤«ï¼ãã¨å£°ãããã¦ä¸ããã¾ããããã°ã¡ããéãããã¨ããä¸å¯©è
ã§ããããªããã
âãã®å®é¨ã§ä½¿ã£ã楽æ²ããã¤ã¸ã¼ã»ãã«ãã«ã¤ãã¦
wikipedia:ãã¤ã¸ã¼ã»ãã«
ãã¤ã¸ã¼ã»ãã«ã¨ããæ²ã¯ã1961å¹´ã«ä¸çã§åãã¦ã³ã³ãã¥ã¼ã¿ãåã£ãæããªãã§ããããããæåãªã®ã¯ãæ ç»ãï¼ï¼ï¼ï¼å¹´å®å®ã®æ
ãã®ã·ã¼ã³ã§ããããããã¼ãã³è¹é·ããæ´èµ°ããï¼é«åº¦ãããããã«ç²¾ç¥é害ãèµ·ãããï¼AIã³ã³ãã¥ã¼ã¿HAL9000ãç ´å£ããéç¨ã§å¹¼å
ããããã¦ããï¼HALã幼尿ï¼ã«è¦ããããã®ãã¤ã¸ã¼ã»ãã«ãæãã ãã¨ãããæããã·ã¼ã³ã§ãããã®HALããã¤ã¸ã¼ã»ãã«æãã¨ããã®ã¯ãä½è
ã®Aã»Cã»ã¯ã©ã¼ã¯ãå®éã«IBM7094ã®ãã¢ãè¦ã¦ãããæéããããã ããã§ãã
ãã®åç»ããã®è§£èª¬ãï¼ãã®åç»ã§ã¯ãªããã¥ã¼ããªãã¯ãï¼ã¨ãªã£ã¦ãã¾ãããã¯ã©ã¼ã¯ã®ã¢ã¤ãã£ã¢ã¨æãã¾ãï¼
ãªãããï¼ï¼ï¼ï¼å¹´ã»ã»ãã§ç´ æ´ãããã¨æãã®ã¯ãä¸è¨åç»ã«ããããã«ãã¼ãã³ãå£ãã¦ããHALã®ä¸æ¢ããªã«ãã¯ãªã¹ã¿ã«ç¶ã®ã¢ã¸ã¥ã¼ã«ãããªã£ã¦ããäºã§ãã
å
æ¼ç®åè·¯ï¼ãã©ãã³ãæ±ãéåã³ã³ãã¥ã¼ãã£ã³ã°ç´ åï¼ã£ã¦æãã§ãã¸ãã«ç¾ä»£ã®åè·¯åºæ¿ã«ãã¦ãªãããã«æä»£æ®éæ§ãåºãã¦ãã®ãæ¬å½ã«ãã¤ã»ã³ã¹ã§ãã
ãã¼ãéã°ããã§ãªããããå
ã®ä¿¡å·å
åãç ç©¶ããã¦ãã¨æãã®ã§ã2001å¹´ã«ã¯éã«åããªãã£ããã©ãã³ãã«è¿æªæ¥ã¯ããããã¢ã¸ã¥ã¼ã«ã«ãªã£ãããã¦ã»ã»ã»
ããããã°ãHALã®å£ãæ¹ããã²ã·ã¥ã¿ã«ããç¶æãã¤ã¤å£ããæãã§ãããããã¯ãªæ§é ã伺ããããªã©ãæªæ¥ã®äººå·¥ç¥è½ã¨ãã¦ãªã¢ãªãã£ããã¾ããã
ããããã°ã確ãæå¡æ²»è«ããï¼ï¼ï¼ï¼å¹´ã»ã»ãã®ã¢ããã¤ã¶ã¼ã§å£°ããã£ã¦ãã®ã§ãããã彿è«ããç«ã¡ä¸ããã°ããã¨ããäºæ
ã§è¾éãªãã£ãã¨ããäºã§ããã»ã»ã»ã¡ã¨æ®å¿µã
âã¡ãã£ã¨ããã°ã©ã ã®è§£èª¬
ä¸è¨ãªã³ã¯ããArduionoã®ã¹ã±ããã¯ãã¦ã³ãã¼ãã§ãã¾ããä¾åã©ã¤ãã©ãªããªããã¹ã±ããã«ã¯æå±ãã¼ã¿ã¤ããªã®ã§ãè½ã¨ãã¦ãã¼ãã«Uploadãã¦PWM3ãã³ã®åºåãé³å£°åããã°ã©ãªãããããã«æãããããã¨æãã¾ãã
â¯é³å£°ã®PWMå¤èª¿ã«ã¤ãã¦ï¼åå¿è
åãï¼
PWMèªä½ã«ã¤ãã¦ã¯ã
http://www.musashinodenpa.com/arduino/ref/index.php?f=2&pos=152
ã¨ããååã®ã¨ã³ããªã¼ä¸ã«ããã¸ã¿ã«ã®PWMãã¢ããã°çã«ã¯ã©ãæãããã®çå±ãããããã ããã
Arduionoã®PWM端åã£ã¦ãanalogWrite()ã§å¤ãè¨å®ããã¨ãPWMï¼Pulse Width Modulation)ãèªåçã«å¶å¾¡ãã¦ããã¦ãONã¨OFFã®ããå¡©æ¢
ã®æ¯çã«ãªã£ããã«ã¹ãè¨å®ãã¦ããããã§ããã
å¿çé度ã¯ãããã©ã«ãï¼å¤åãã¬ã¹ã±ã¼ã«1/64ã490Hzï¼ã ã¨é
éãã§ãã(ã¾ããåºæ¬ãã®PWMã£ã¦ããã©ã«ãã®æèã¯ã¢ã¼ã¿ã¨ãå¶å¾¡ç¨ã§ãããããé³å£°å¸¯åã¯èãã¦ãªãï¼
ï¼ãã«ã¹ã§ï¼ã¤ã®ã¢ããã°å¤ã§ãããã490Hzã®ãã«ã¹å¨æã ã¨ãã¢ããã°å¹³æ»ãã¦è¡¨ç¾ã§ããå¤ã®å¤åã®å¨æ³¢æ°ã¯ã490/8=61Hz ã¤ã¾ãã61Hzãµã¤ã³æ³¢ãªããªã表ç¾ã§ããã¨ãããããã©ã®é³ã440Hzã§ãããããã ã®æ£å¼¦æ³¢ã®ã¡ããã£ã¬ãã«ã§ã表ç¾ã§ãã¾ããããæãã¨ãããã¹ãã¨ãã®ã¬ãã«ã¯ããã¾ãããï¼ãã¨ãã°äººã®å£°ã¨ãã£ããåããç¨åº¦ã®é³è²è¡¨ç¾ã«ã¯ãå°ãªãã¨ãï¼KHzï¼fsã§ããã¨8KHzï¼ãããã¾ã§ã®å¨æ³¢æ°ã表ç¾ã§ãããã¨ãæä½ã¬ãã«ã¨ãããã¦ãã¾ããã¡ãªã¿ã«CDã§ã¯ãfs=44.1KHzã ããã22KHzã¨ããé«ãé³ã®æåã«ããè¤éãªæ³¢å½¢ï¼é³è²ã表ç¾ã§ããã¨ãããã¨ã«ãªãã¾ãï¼
ãªã®ã§ããã®ããã°ã©ã ã§ã¯ã
TCCR2A = _BV(COM2B1) | _BV(WGM20);
TCCR2B = _BV(CS20);
TIMSK2 = _BV(TOIE2);
ã¨ãã£ã¦ãPWMã®å¨æ³¢æ°ãã31.5ï½Hzã«ãã¾ããããå®éã«ã¯ãfsã¨ãã¦31.5/8 =3.9KHzããªã®ã§ã表ç¾ã§ããé³ã¯æé«ã§1.9KHï½ã§ããã¤PWMã®ç¸å½ãã¤ã¸ã¼ã§ãããã¨ã¯ããããããã¾ãããï¼ãã¨ããã®å
éä¿¡ãããã®åä¿¡æ©ã«ããã¦ã2kHzã®ãã¼ãã¹ãããã¨ããã£ãã§ããï¼
â¯æå±ãã¼ã¿ãã¼ãã«ã«ã¤ãã¦
ã§ããã®ããã°ã©ã ã®åãã¨ããã¯ãåè¿°ããããã«PCM波形ãåºãã®ã§ãªããé³ç´ çã¨å¤èª¿ã¨ãããããã¼ãã«ã«å¾ã£ã¦å¦çãã¦ããã®å ´ã®æå£°ãåæããããã§ãã
ç§ãæ£ç´ãããã°ã©ã ãå
¨é¨è¿½ã£ã¦ãªãã§ããã解説æã«ããã°ãäºã¤ã®æ£å¼¦æ³¢ã¨ä¸ã¤ã®ç©å½¢æ³¢ãåæã㦠ã¾ãä½ç¸å¤èª¿ã調æ´ãããã¨ã§ç¡å£°é³ãã ããã¨ã®ãã¨ã§ãã
uint8_t frameList[] PROGMEM = {
_Da,3,0,39,_Db,1,0,39,_Dc,1,3,39,_EY,8,6,39,_YX,20,3,39, // Dai..
_Z,10,0,36,_IY,35,3,36, // ..sy
â¦
ï¼PROGMEMã¨ããã®ã¯ããã®é
åãRAMã§ãªãROMé åã«é
ç½®ããã¨ããå½ä»¤ã§ãããªã«ããã¼ã¿ãã§ããã®ã§ãRAMã«ããã¨ããµãã¡ããã®ã§ã)
ä¸è¿°ã®ããã«ãåºæ¬çã«ããé³ç´ ãã¼ã¿ãé·ããå¤èª¿?ãããããã¨ãã4ãã¤ãçµã§ãã¬ã¼ã ã¨å¼ã¶ä¸ã¤ã®åä½ã§ãããããã¯27ãC4ï¼ãï¼ã®ããã§ããåé³ã§ï¼ã¤ä¸ãããã¨ã«ï¼ï¼ã§ãããªã®ã§31ã ã¨ãã§ãã
æéé·ãã¯15msãï¼åä½ã£ã½ãã§ãããã¾ãé©å½ã«ã
http://code.google.com/p/tinkerit/wiki/Cantarinoãã®ãã¼ãã«ãåèã«ãã¾ãããåºæ¬çã«ãã¾ãããããããããã¥ã¡ã³ãããã¦ã³ãã¼ããã¼ã¸ã«ã¯ãªãæãã§ãã
æ¯é³ã¨åé³ã§ä¸ã¤ã®é³ãå¤ãã§ãããè¤æ°ã®åé³ãè¤éã«çµã¿åãããå¿
è¦ãããããã§ããããã®ãããã¯ããããçè§£ãã¦ããã¾ããã
âPerfumeã®ãã¬ã¼ã¶ã¼ãã¼ã ããæããããï¼
ãã¦ãããããæ²ãå¤ãã¦ã¿ã¾ããããã¿ã¼ã²ããã¯ãã¡ãããçºå£²ãå¾
ã¡ã©ããããPefumeã®æ°èããã¬ã¼ã¶ã¼ãã¼ã ãã§ã
æ²ãå¤ããå ´åã«ã¯ãåè¿°ã®ããã«
uint8_t frameList[] PROGMEM = {â¦..}
ã®ãã¼ãã«ãã¼ã¿ã ãå¤ããã°è¯ãããã§ãã
ã§ããããã«ãã£ã¤ããªãã§ãã«ã³ã¼ã©ã¹ã¯ããã¨ãã¦ã決ãã®ãã¬ã¼ãºããã«ã£ãã£ã~ãã®ãã©ããã¼ã ãã®ãã ãã ããã£ã¦ã¿ã¾ããã
ã¨ãããããformantTable[]ãåç
§ããIndexã¨ããããenum ãããã_AHã¨ã_UHã¨ãã
ä¸å¿é³ã¨å¯¾å¿ãã¦ãããããã®ã§ãããã§ããã§ããããããããã¾ããã
ã§ã¾ããï¼ï¼âï¼ï¼åãããæ ¼éãã¦ãã®ãªèãããããã«ãªã£ãããªï¼ã£ã¦ã®ã以ä¸ã§ãã
//Perfume "Laser beam"
uint8_t frameList[] PROGMEM = {
_N,3,0,32, _IH,16,10,32, //Ni
_ZH,3,0,39,_IH,24,10,39, //Ji
_IH,8,10,37, //I
_ER,4,10,34, //Ro
_OH,4,0,30, //No
_L,2,0,32,_AA,4,10,32, //Ra
_V,3,5,39,_UH,3,5,39, //Bu
_Ba,1,0,33,_Bb,2,0,33,_IH,8,10,33, //Bi
_IH,8,10,30, //I
_M,3,3,27,_UH,8,5,27, //Mu
};
ããããã°ããåãç¡ãæ¹ã®ããã«å
æ²ã®ãã¬ã¼ã¶ã¼ãã¼ã ãã«ã¤ãã¦ã
ä¸è¨ãã¬ã¼ãºã¯ã以ä¸ã®PVåç» 0:35ãããã§ãã
ï¼â»å
¬å¼PVåç»å
¬éã«ä¼´ãã以åã®CMã®åç»ãªã³ã¯ãã夿´ãã¾ãã 5/21)