|
¡û ¤Ï¤¸¤á¤Ë
LECTURE 2 ¤Ç¤Ï¡¢¥¹¥Ô¡¼¥«¤Ë²»¤ò½ÐÎϤ¹¤ëÊýË¡¤Ë¤Ä¤¤¤Æ²òÀ⤷¤Þ¤·¤¿¡£¤³¤³¤Ç¤Ï¿·¤¿¤Ë¥Þ¥¤¥¯ÆþÎϤòÏ¿²»¤¹¤ë¤¿¤á¤ÎÊýË¡¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Þ¤¹¡£¥¹¥Ô¡¼¥«¡¼½ÐÎÏ¤Ç¤Ï write() ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò»È¤¤¤Þ¤·¤¿¤¬¡¢¥Þ¥¤¥¯ÆþÎϤò°·¤¦¤¿¤á¤Ë¤Ï read() ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò»È¤¤¤Þ¤¹¡£
¡û ¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à
5 Éô֤Υޥ¤¥¯ÆþÎϤòÏ¿²»¤·¡¢Â³¤±¤Æ¤½¤ÎÆâÍƤò¥¹¥Ô¡¼¥«¡¼¤Ë½ÐÎϤ¹¤ë¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à mic.c ¤Ç¤¹¡£¤Ï¤¸¤á¤Ë ¤Î¥Ú¡¼¥¸¤«¤é¡¢Á´¤Æ¤Î¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤ò¸Ç¤á¤¿ tar ¥Ü¡¼¥ë¤ò¥À¥¦¥ó¥í¡¼¥É¤¹¤ë¤³¤È¤â¤Ç¤¤Þ¤¹¡£
gcc -o mic mic.c
¤È¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤·¤Þ¤¹¡£¥³¥ó¥Ñ¥¤¥ë¥ª¥×¥·¥ç¥ó¤Ï³Æ¼«¤Î´Ä¶¤Ê¤É¤Ë±þ¤¸¤Æ½¤Àµ¤·¤Æ²¼¤µ¤¤¡£
¼Â¹Ô¤¹¤ë¤È¡¢Æä˥¨¥é¡¼¤¬Ìµ¤±¤ì¤Ð
######################################## # Now speak to your mic for 5 seconds. # ########################################
¤Èɽ¼¨¤µ¤ì¤ë¤Î¤Ç¡¢Ìó 5 ÉôÖÄø¥Þ¥¤¥¯¤Ë¸þ¤«¤Ã¤Æ²¿¤«²»¤ò¤Õ¤¤³¤ó¤Ç²¼¤µ¤¤¡£Ï¿²»»þ´Ö¤¬²á¤®¤ë¤È
######################################## # Playing what you have said. # ########################################
¤È¤¤¤¦É½¼¨¤Ë³¤¤¤ÆÀèÄø¤Õ¤¤³¤ó¤À²»¤¬ºÆÀ¸¤µ¤ì¤Þ¤¹¡£
²»¤¬½Ð¤Ê¤¤¾ì¹ç¤ÎÃí°ÕÅÀ¤È¤·¤Æ 2 ÅÀ¤¢¤ê¤Þ¤¹¡£¤Þ¤º¡¢¥¹¥Ô¡¼¥«¡¼½ÐÎϤÈƱÍͤ˥ޥ¤¥¯ÆþÎϤΥܥê¥å¡¼¥à¤¬ 0 ¤Ë¤Ê¤Ã¤Æ¤¤¤Ê¤¤É¬Íפ¬¤¢¤ê¤Þ¤¹¡£¥ß¥¥µ¡¼ÁàºîÍÑ¥½¥Õ¥È¤ò»È¤¦¤«¡¢LECTURE 7 /dev/mixer ¤òÁàºî¤¹¤ë ¤Ë½¾¤Ã¤Æ¥Ü¥ê¥å¡¼¥à¤òÀßÄꤷ¤Æ²¼¤µ¤¤¡£
¼¡¤Ë¡¢OSS ( /Free )¤Ç¤ÏÆþÎϲ»¸»¤È¤·¤Æ¥Þ¥¤¥¯ÆþÎϤ¬¥Ç¥Õ¥©¥ë¥È¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Ï¤º¤Ç¤¹¤¬¡¢¤Ò¤ç¤Ã¤È¤¹¤ë¤ÈÆþÎϲ»¸»¤È¤·¤Æ¥é¥¤¥óÆþÎϤʤÉÊ̤β»¸»¤¬ÁªÂò¤µ¤ì¤Æ¤¤¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤Ë¤Ä¤¤¤Æ¤â¡¢¥ß¥¥µ¡¼ÁàºîÍÑ¥½¥Õ¥È¤ò»È¤¦¤« LECTURE 7 /dev/mixer ¤òÁàºî¤¹¤ë ¤Ë½¾¤Ã¤ÆÆþÎϲ»¸»¤ò¥Þ¥¤¥¯ÆþÎϤËÀßÄꤷ¤Æ²¼¤µ¤¤ ( °Ê¾å¡¢¤³¤ì°Ê¹ß¤Î¥µ¥ó¥×¥ë¤Ç¤âƱÍÍ )¡£
¤Á¤Ê¤ß¤Ë¡¢¥ß¥¥µ¡¼¤òÁàºî¤·¤ÆÆþÎϲ»¸»¤òÊѤ¨¤ë¤È¡¢¤½¤Î²»¸»¤òÁ´¤¯Æ±¤¸¥µ¥ó¥×¥ë¥³¡¼¥É¤ÇÏ¿²»¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
--- mic.c ---
1 #include <fcntl.h> 2 #include <linux/soundcard.h> 3 #include <stdio.h> 4 #include <sys/ioctl.h> 5 #include <unistd.h> 6 7 8 /* 9 * Î̻Ҳ½¥Ó¥Ã¥È¿ô : 16 bits 10 * ¥µ¥ó¥×¥ê¥ó¥°¼þÇÈ¿ô : 44.1 KHz 11 * ¥Á¥ã¥ó¥Í¥ë¿ô : 1 12 * Ï¿²»/ºÆÀ¸»þ´Ö : 5 sec 13 * 14 * ʬ¤Î¥Ð¥Ã¥Õ¥¡Îΰè 15 * 16 * 16 (bits) * 44100 (Hz) * 5 (sec) = 3528000 (bits) 17 * = 441000 (bytes) 18 */ 19 #define BUFSIZE 441000 20 21 static int setup_dsp( int fd ); 22 23 int 24 main( void ) 25 { 26 short buf[ BUFSIZE / sizeof(short) ]; 27 int fd, rtn; 28 29 if ( ( fd = open( "/dev/dsp", O_RDWR ) ) == -1 ) { 30 perror( "open()" ); 31 return 1; 32 } 33 34 /* /dev/dsp ¤ÎÀßÄê */ 35 if ( setup_dsp( fd ) != 0 ) { 36 fprintf( stderr, "Setup /dev/dsp failed.\n" ); 37 close( fd ); 38 return 1; 39 } 40 41 42 printf( "########################################\n" ); 43 printf( "# Now speak to your mic for 5 seconds. #\n" ); 44 printf( "########################################\n" ); 45 46 /* 5 ÉÃ´Ö ¥Þ¥¤¥¯ÆþÎϤòÏ¿²»¤¹¤ë */ 47 if ( ( rtn = read( fd, buf, BUFSIZE ) ) == -1 ) { 48 perror( "read()" ); 49 close( fd ); 50 return 1; 51 } 52 53 54 printf( "\n" ); 55 printf( "########################################\n" ); 56 printf( "# Playing what you have said. #\n" ); 57 printf( "########################################\n" ); 58 59 /* Ï¿²»¤·¤¿²»¤òºÆÀ¸¤¹¤ë */ 60 if ( write( fd, buf, rtn ) == -1 ) { 61 perror( "write()" ); 62 close( fd ); 63 return 1; 64 } 65 66 close( fd ); 67 return 0; 68 } 69 70 71 /* 72 * /dev/dsp ¤ò°Ê²¼¤ÎÍͤËÀßÄꤹ¤ë¡£ 73 * 74 * Î̻Ҳ½¥Ó¥Ã¥È¿ô : 16 bits 75 * ¥µ¥ó¥×¥ê¥ó¥°¼þÇÈ¿ô : 44.1 KHz 76 * ¥Á¥ã¥ó¥Í¥ë¿ô : 1 77 * PCM ¥Ç¡¼¥¿¤ÏÉä¹æÉÕ¤¡¢¥ê¥È¥ë¥¨¥ó¥Ç¥£¥¢¥ó 78 * 79 */ 80 static int 81 setup_dsp( int fd ) 82 { 83 int fmt = AFMT_S16_LE; 84 int freq = 44100; 85 int channel = 1; 86 87 /* ¥µ¥¦¥ó¥É¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎÀßÄê */ 88 if ( ioctl( fd, SOUND_PCM_SETFMT, &fmt ) == -1 ) { 89 perror( "ioctl( SOUND_PCM_SETFMT )" ); 90 return -1; 91 } 92 93 /* ¥Á¥ã¥ó¥Í¥ë¿ô¤ÎÀßÄê */ 94 if ( ioctl( fd, SOUND_PCM_WRITE_CHANNELS, &channel ) == -1 ) { 95 perror( "ioctl( SOUND_PCM_WRITE_CHANNELS )" ); 96 return -1; 97 } 98 99 /* ¥µ¥ó¥×¥ê¥ó¥°¼þÇÈ¿ô¤ÎÀßÄê */ 100 if ( ioctl( fd, SOUND_PCM_WRITE_RATE, &freq ) == -1 ) { 101 perror( "ioctl( SOUND_PCM_WRITE_RATE )" ); 102 return -1; 103 } 104 105 return 0; 106 } 107 108 /* End of mic.c */
¡û ¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤ÎÀâÌÀ
¤Ç¤Ï¡¢¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Æ¤¤¤¤Þ¤¹¡£¤È¤¤¤Ã¤Æ¤â¡¢¤Û¤È¤ó¤É¤ÎÉôʬ¤Ï LECTURE 2 ¤Î sound.c ¤Ç²òÀ⤷¤¿¤â¤Î¤Ð¤«¤ê¤Ç¤¹¤¬¡£¡£¡£
- 8 ¡Á 19 ¹ÔÌÜ
PCM ¥Ç¡¼¥¿¤ò³ÊǼ¤¹¤ë¤¿¤á¤ËɬÍפʥХåե¡Îΰè¤Î¥µ¥¤¥º¤Ç¤¹¡£LECTURE 2 ¤Î sound.c ¤Î¤½¤ì¤ÈÁ´¤¯Æ±¤¸Â礤µ¤Ç¤¹¡£Î̻Ҳ½¥Ó¥Ã¥È¿ô 16 ¥Ó¥Ã¥È¡¢¥µ¥ó¥×¥ê¥ó¥°¼þÇÈ¿ô 44.1 KHz¡¢ ¥Á¥ã¥ó¥Í¥ë¿ô 1 ¤È¤¤¤¦ PCM ¥Ç¡¼¥¿¤ò 5 Éôְ·¤¦¤Î¤Ç¡¢ 16 ( bits ) * 44100 (Hz) * 5 (sec) = 441000 (bytes) ¤Î¥Ð¥Ã¥Õ¥¡¤ò»È¤¤¤Þ¤¹¡£
2007/12/03 Äɵ¡£34 ¹ÔÌܤǼºݤ˥Хåե¡¤ò³ÎÊݤ·¤Æ¤¤¤Þ¤¹¤¬¡¢short ·¿¤Ç³ÎÊݤ·¤Æ¤¤¤ë¤Ë¤â´Ø¤ï¤é¤º BUFSIZE ¤ò¤½¤Î¤Þ¤ÞÍ×ÁÇ¿ô¤Ë»ØÄꤷ¤Æ¤¤¤Þ¤·¤¿ (short buf[BUFSIZE];)¡£ Àµ¤·¤¯¤Ï short buf[BUFSIZE / sizeof(short)]; ¤Ç¤·¤¿¡£ËÙ¤µ¤ó¡¢¤´»ØŦ¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤·¤¿¡ª
- 23 ¡Á 68 ¹ÔÌÜ ( main() )
- 29 ¡Á 32 ¹ÔÌÜ
mic.c ¤Ç¤Ï¥Þ¥¤¥¯ÆþÎϤȥ¹¥Ô¡¼¥«¡¼½ÐÎϤÎξÊý¤ò¹Ô¤¦¤Î¤Ç¡¢/dev/dsp ¤ò O_RDWR ( Æɤ߽ñ¤Î¾ÍÑ ) ¤Ç³«¤¤¤Æ¤¤¤Þ¤¹¡£
- 34 ¡Á 39 ¹ÔÌÜ
¼«ºî´Ø¿ô setup_dsp() ¤Ç /dev/dsp ¤ÎÀßÄê¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£LECTURE 2 ¤Î setup_dsp() ¤ÈÁ´¤¯Æ±¤¸½èÍý¤ò¤·¤Æ¤¤¤ë¤Î¤Ç¡¢¤½¤Á¤é¤Î²òÀâ¤ò»²¾È¤·¤Æ²¼¤µ¤¤¡£
- 42 ¡Á 51 ¹ÔÌÜ
/dev/dsp ¤ò read() ¤¹¤ë¤³¤È¤Ç¥Þ¥¤¥¯ÆþÎϤòÏ¿²»¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£Ï¿²»¤·¤¿ PCM ¥Ç¡¼¥¿¤Ï buf ¤Ë³ÊǼ¤µ¤ì¤Þ¤¹¡£
¤³¤³¤ÇÃí°Õ¤·¤Æ¤ª¤¤¤ÆÍߤ·¤¤¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£¥µ¥¦¥ó¥É¥É¥é¥¤¥Ð¤«¤é PCM ¥Ç¡¼¥¿¤òÆɤ߹þ¤àºÝ¡¢ ¥µ¥¦¥ó¥É¥É¥é¥¤¥ÐÆâÉô¤Î¥Õ¥é¥°¥á¥ó¥È¤È¸Æ¤Ð¤ì¤ë¥Ð¥Ã¥Õ¥¡¤¬¡¢ ºÇÄã°ì¤Ä¤Ï¥Ç¡¼¥¿¤ÇËä¤á¤é¤ì¤Ê¤±¤ì¤Ð read() ¤Ï¥Ö¥í¥Ã¥¯¤·¤Þ¤¹¡£
¤³¤ì¤Ç¤Ï¡¢¥Õ¥é¥°¥á¥ó¥È¤Î¥µ¥¤¥º¤è¤ê¾®¤µ¤Ê¥Ç¡¼¥¿¤òÆɤ߹þ¤ß¤¿¤¤¾ì¹ç¤ËÉÔÍפ˥֥í¥Ã¥¯ ¤·¤Æ¤·¤Þ¤¤¤Þ¤¹¡£¤³¤ì¤òÈò¤±¤ë¤Ë¤Ï¡¢¥Õ¥é¥°¥á¥ó¥È¤Î¥µ¥¤¥º¤òÊѹ¹¤·¤¿¤ê¡¢ ¥Ö¥í¥Ã¥¯¤»¤º¤ËÆɤ߹þ¤à¤³¤È¤Î¤Ç¤¤ë¥Õ¥é¥°¥á¥ó¥È¤Î¿ô¤ò¼èÆÀ¤·¤¿¤ê¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ¤³¤ì¤é¤ÎÊýË¡¤Ë¤Ä¤¤¤Æ¤Ï LECTURE 5 ¥ê¥¢¥ë¥¿¥¤¥àÀ¤ò¹Íθ¤¹¤ë ¤Ç¾Ò²ð¤·¤Þ¤¹¤¬¡¢¤³¤³¤Ç¤Ï¤³¤ÎÍͤÊÌäÂ꤬¤¢¤ë¤³¤È¤ò³Ð¤¨¤Æ¤ª¤¤¤Æ²¼¤µ¤¤¡£
- 54 ¡Á 64 ¹ÔÌÜ
sound.c ¤ÈƱ¤¸¤¯¡¢buf ¤ÎÆâÍƤò /dev/dsp ¤Ë write() ¤¹¤ë¤³¤È¤Ç¥¹¥Ô¡¼¥«¡¼¤Ë ½ÐÎϤ·¤Æ¤¤¤Þ¤¹¡£
- 71 ¡Á 106 ¹ÔÌÜ ( setup_dsp() )
/dev/dsp ¤ÎÀßÄê¤ò¹Ô¤¦¤¿¤á¤Î´Ø¿ô¤Ç¤¹¡£LECTURE 2 ¤Î setup_dsp() ¤ÈÁ´¤¯Æ±¤¸¤Ê¤Î¤Ç¡¢ ¾ÜºÙ¤Ï¤½¤Á¤é¤Î²òÀâ¤ò»²¾È¤·¤Æ²¼¤µ¤¤¡£
mic.c ¤ÎÀâÌÀ¤Ï°Ê¾å¤Ç¤¹¡£OSS API ¤ò»È¤Ã¤¿¥×¥í¥°¥é¥ß¥ó¥°¤Ç¤Ï¡¢¥Þ¥¤¥¯ÆþÎϤòÏ¿²»¤¹¤ë¤Ë¤Ï read() ¤¹¤ë¤À¤±¤ÇÎɤ¤¤Î¤Ç¤¹¡£¤³¤ì¤Þ¤¿¤È¤Æ¤â´Êñ¤Ç¤¹¤Í¡£
¡û ¥µ¥¦¥ó¥É¤ÎÏ¿²»¤ÈºÆÀ¸¤òƱ»þ¤Ë¹Ô¤¦
mic.c ¤Ç¤Ï¡¢read() ¤Ç¥Þ¥¤¥¯ÆþÎϤòÏ¿²»¤·¤¿¸å¤Ë write() ¤ÇÏ¿²»¤·¤¿¥Ç¡¼¥¿¤òºÆÀ¸¤·¤Æ¤¤¤Þ¤¹¡£¤³¤Î¾ì¹ç¤Ï¡¢ºÆÀ¸¤·¤Æ¤¤¤ë´Ö¤ÏÆþÎϲ»¸»¤ò¼è¤ê¹þ¤àɬÍפÏ̵¤¤¤Î¤ÇÌäÂꤢ¤ê¤Þ¤»¤ó¡£
¤·¤«¤·¡¢write() ¤ÇºÆÀ¸¤·¤Æ¤¤¤ë´Ö¤âÆþÎϲ»¸»¤ò¥É¥é¥¤¥ÐÆâ¤Î¥Ð¥Ã¥Õ¥¡¤Ë¼è¤ê¹þ¤ó¤Ç¤ª¤¤¤ÆÍߤ·¤¤¤È¤¤¤Ã¤¿¾ì¹ç¤Ï¡¢¥µ¥¦¥ó¥É¥«¡¼¥É¤¬Á´Æó½Å¥â¡¼¥É¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£»ÈÍѤ·¤Æ¤¤¤ë¥Ç¥Ð¥¤¥¹¤¬Á´Æó½Å¥â¡¼¥É¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¤«¤É¤¦¤«¤Ï¡¢LECTURE 3 /dev/dsp ¤Îµ¡Ç½¤òÄ´¤Ù¤ë ¤Ç¾Ò²ð¤·¤Æ¤¤¤ë ioctl SNDCTL_DSP_GETCAPS ¥³¥Þ¥ó¥É¤ÇÄ´¤Ù¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
int caps; ioctl( fd, SNDCTL_DSP_GETCAPS, &caps );
¾å¤Î ioctl() ¤òȯ¹Ô¤·¤ÆÆÀ¤é¤ì¤ë caps ¤È DSP_CAP_DUPLEX ¤Î AND ¤Î·ë²Ì¤¬ 0 ¤Ç¤Ê¤±¤ì¤Ð¡¢¤½¤Î¥Ç¥Ð¥¤¥¹¤ÏÁ´Æó½Å¥â¡¼¥É¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
¥Ç¥Ð¥¤¥¹¤ò»ÈÍѤ¹¤ë»þ¤ËÁ´Æó½Å¥â¡¼¥É¤Ë°Ü¹Ô¤¹¤ë¤Ë¤Ï¡¢¥Ç¥Ð¥¤¥¹¤ò O_RDWR ¥â¡¼¥É¤Ç open() ¤·¤¿Ä¾¸å¤Ë²¼µ¤Î ioctl() ¤ÇÀßÄꤷ¤Þ¤¹¡£
ioctl( fd, SNDCTL_DSP_SETDUPLEX, 0 );
¤³¤Î ioctl() ¤Ï¥Ç¥Ð¥¤¥¹¤ò open() ¤·¤¿Ä¾¸å¡¢Â¾¤Î ioctl() ¤ä read()¡¢write() ¤Ê¤É¤ò¼Â¹Ô¤¹¤ëÁ°¤Ë¹Ô¤¤¤Þ¤¹¡£¤³¤Î ioctl() ¤Ë¤è¤Ã¤Æ¥Ç¥Ð¥¤¥¹¤ÏÁ´Æó½Å¥â¡¼¥É¤Ç»ÈÍѤǤ¤Þ¤¹¡£
SNDCTL_DSP_GETCAPS ¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ëºÝ¤Ï¡¢¤Þ¤º SNDCTL_DSP_SETDUPLEX ¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë¤Ù¤¤À¤È OSS ¥×¥í¥°¥é¥Þ¡¼¥º¥¬¥¤¥É¤Ëµ½Ò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤½¤¦¤·¤Ê¤¤¤È¡¢SNDCTL_DSP_GETCAPS ¥³¥Þ¥ó¥É¤¬ DSP_CAP_DUPLEX ¤Î¥Ó¥Ã¥È¤ÏÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤ÈÊó¹ð¤¹¤ë¤«¤â¤·¤ì¤Ê¤¤¤«¤é¤È¤¤¤¦¤³¤È¤Ç¤¹¡£
¤È¤¤¤¦¤³¤È¤Ê¤ó¤Ç¤¹¤¬¤¤¤¯¤Ä¤«¤Î¥É¥é¥¤¥Ð¤Î¥³¡¼¥É¤ò¸«¤¿¤È¤³¤í¡¢SNDCTL_DSP_SETDUPLEX ¤¬È¯¹Ô¤µ¤ì¤¿¾ì¹ç¡¢´û¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¥Õ¥é¥°¤ÈÈæ³Ó¤·¤ÆÁ´Æó½Å¥â¡¼¥É¤Ç¤¢¤ì¤ÐÀ®¸ù¤È¤ß¤Ê¤¹¤È¤«¡¢ºÇ½é¤«¤éÁ´Æó½Å¥â¡¼¥É¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Î¤Ç¤³¤Î¥³¥Þ¥ó¥Éȯ¹Ô»þ¤Ë¤Ï²¿¤â¤·¤Ê¤¤¤È¤«¡¢Á´Æó½Å¥µ¥Ý¡¼¥È¤·¤Æ¤Ê¤¤¤«¤é¥¨¥é¡¼¤òÊÖ¤¹¤È¤¤¤Ã¤¿¡¢¥µ¥Ý¡¼¥È¾õ¶·É½¼¨ÍѤߤ¿¤¤¤Ê¥³¡¼¥É¤¬Â¿¤¤ÍͤǤ¹ ( Á´¤Æ¸«¤¿¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó )¡£