Ñ§Ï°Íø¿¼ÊÔѧϰ×ÊÁÏ

Gzu521.com

LinuxÉùÒôÉ豸±à³ÌʵÀý(2)

LINUX½Ì³Ì   µã»÷£º´Î   ·¢²¼Ê±¼ä£º2007-3-28   ¡¾×ÖÌ壺´ó ÖРС¡¿   À´Ô´£ºblog
GZU521.COMÑ§Ï°Íø

2. ¶ÔÉù¿¨±à³Ì
¡¡¡¡Ö»ÒªÎÒÃDz»ÊǽøÐÐÖîÈçÇý¶¯É豸¿ª·¢Ö®ÀàµÄ¹¤×÷£¬¶ÔÉù¿¨µÄ±à³ÌºÍÉÏÃæ¶ÔÑïÉùÆ÷µÄ±à³ÌûÓÐʲô±¾ÖʵÄÇø±ð¡£µ±ÄãÊÔͼÀ´±àдÖîÈçcd²¥·ÅÆ÷¡¢mp3²¥·ÅÆ÷Ö®ÀàµÄ¸´ÔӵijÌÐòʱ£¬ÄãµÄ¹¤×÷ÊÇÈ¡»ñµÃÓëcdrom¿ØÖÆ¡¢mp3½âÂëÖ®ÀàµÄÐÅÏ¢£¬¶ø¶ÁдϵͳÉ豸µÄÕâÒ»²½ÔÚlinuxϳ¬»¥ÏëÏóµÄ¼òµ¥¡£ÀýÈ磬linuxÏÂ×î¼òµ¥µÄ²¥·ÅwavµÄ³ÌÐòÖ»ÓÐÒ»ÐУºcp $< >/dev/audio¡£½«Ëüд³ÉÒ»¸öshellÎļþ£¬Í¬ÑùÊÇÒ»¸ö³ÌÐò£¨shell ±à³Ì£©¡£
¡¡¡¡ÎÒÃÇÊ×ÏÈÐèÒªÖªµÀһ̨»úÆ÷ÉÏÊÇ·ñÓÐÉù¿¨£¬Ò»¸ö¼ì²éµÄ°ì·¨ÊǼì²éÎļþ/dev/sndstatÎļþ£¬Èç¹û´ò¿ª´ËÎļþ´íÎ󣬲¢ÇÒ´íÎóºÅÊÇenodev£¬Ôò˵Ã÷´Ë»úÆ÷ûÓа²×°Éù¿¨¡£³ý´ËÖ®Í⣬ÊÔ×ÅÈ¥´ò¿ªÎļþ/dev/dspÒ²¿ÉÒÔÀ´¼ì²éÊÇ·ñ°²×°ÁËÉù¿¨¡£
¡¡¡¡linuxϺÍÉù¿¨Ïà¹ØµÄÎļþÓÐÐí¶à£¬Èç²É¼¯Êý×ÖÑù±¾µÄ/dev/dspÎļþ£¬Õë¶Ô»ìÒôÆ÷µÄ/dev/mixerÎļþÒÔ¼°ÓÃÓÚÒôÐòÆ÷µÄ/dev/sequencerµÈ¡£Îļþ/dev/audioÊÇÒ»¸ö»ùÓÚ¼æÈÝÐÔ¿¼ÂǵÄÉùÒôÉ豸Îļþ£¬Ëüʵ¼ÊÊǵ½ÉÏÊöÊý×ÖÉ豸µÄÒ»¸öÓ³É䣬Ëü×î´óµÄÌØÉ«»òÐíÊǶÔÖîÈçwavÕâÀàÎļþ¸ñʽµÄÖ±½ÓÖ§³Ö¡£ÎÒÃÇÏÂÃæµÄÀý×Ó¼´Ê¹ÓÃÁË´ËÉ豸ÎļþʵÏÖÁËÒ»¸ö¼òµ¥µÄ¼Òô»ú£ºÎÒÃÇ´ÓÉù¿¨É豸£¨µ±È»ÒªÓÃÂó¿Ë·ç£©¶ÁÈ¡ÒôƵÊý¾Ý£¬²¢½«Ëü´æ·Åµ½Îļþtest.wavÖÐÈ¥¡£Òª²¥·ÅÕâ¸öwavÎļþ£¬Ö»ÒªÈçÇ°ÃæËùÊö£¬Ê¹ÓÃÃüÁîcp test.wav >/dev/audio¼´¿É£¬µ±È»ÄãÒ²¿ÉÒÔÓÃlinuxÏÂÆäËûµÄ¶àýÌåÈí¼þÀ´²¥·ÅÕâ¸öÎļþ¡£
ÏÂÃæ¼´ÊÇÍêÕûµÄ³ÌÐòÇåµ¥£º

/* ´ËÎļþÖж¨ÒåÁËÏÂÃæËùÓÐÐÎÈçsnd_µÄ±äÁ¿*/

££i nclude

££i nclude

££i nclude

££i nclude

££i nclude

 

main() FDm,XV/€DqZAv[ ±¾_×Ê_ÁÏ_À´_Ô´_ÓÚ_¹ó_ÖÝ_ѧ_ϰ_Íø µçÄÔ¿ÎÌÃLINUX½Ì³Ì Http://wwW.gzU521.coM )FDm,XV/€DqZAv

{

     /* id£º¶ÁÈ¡ÒôƵÎļþÃèÊö·û£»fd£ºÐ´ÈëµÄÎļþÃèÊö·û¡£i£¬jΪÁÙʱ±äÁ¿*/

     int id,fd,i,j;

     /* ´æ´¢ÒôƵÊý¾ÝµÄ»º³åÇø£¬¿ÉÒÔµ÷Õû*/

     char testbuf[4096];

     /* ´ò¿ªÉù¿¨É豸£¬Ê§°ÜÔòÍ˳ö*/

     if ( ( id = open ( "/dev/audio", o_rdwr ) ) < 0 ) {

         fprintf (stderr, " can¡¯t open sound device!\n");

         exit ( -1 ) ;

     }

     /* ´ò¿ªÊä³öÎļþ£¬Ê§°ÜÔòÍ˳ö*/

     if ( ( fd = open ("test.wav",o_rdwr))<0){

         fprintf ( stderr, " can¡¯t open output file!\n");

         exit (-1 );

     }

     /* ÉèÖÃÊʵ±µÄ²ÎÊý£¬Ê¹µÃÉùÒôÉ豸¹¤×÷Õý³£*/

     /* ÏêϸÇé¿öÇë²Î¿¼linux¹ØÓÚÉù¿¨±à³ÌµÄÎĵµ*/

     i=0;

     ioctl (id,sndctl_dsp_reset,(char *)&i) ;

     ioctl (id,sndctl_dsp_sync,(char *)&i);

     i=1;

     ioctl (id,sndctl_dsp_nonblock,(char *)&i);

     i=8000;

     ioctl (id,sndctl_dsp_speed,(char *)&i);

     i=1;

     ioctl (id,sndctl_dsp_channels,(char *)&i);

     i=8;

     ioctl (id,sndctl_dsp_setfmt,(char *)&i);

     i=3;

     ioctl (id,sndctl_dsp_settrigger,(char *)&i);=z*=tDoJ`vr_t[ת Ìù ÓÚ ÎÒ µÄ ѧ ϰ Íø µçÄÔ¿ÎÌÃLINUX½Ì³Ì HTtp://wwW.gzU521.coM)=z*=tDoJ`vr_t

     i=3;

     ioctl (id,sndctl_dsp_setfragment,(char *)&i);

     i=1;

     ioctl (id,sndctl_dsp_profile,(char *)&i);

     /* ¶Áȡһ¶¨ÊýÁ¿µÄÒôƵÊý¾Ý£¬²¢½«Ö®Ð´µ½Êä³öÎļþÖÐÈ¥*/

     for ( j=0; j<10;){

         i=read(id,testbuf,4096);

         if(i>0){

              write(fd,filebuf,i);

              j++;

         }

     }

     /* ¹Ø±ÕÊäÈë¡¢Êä³öÎļþ*/

     close(fd);

     close(id);

}

 

3. Óû§ÕæÕý±à³ÌÐèÒªµÄ×ÊÁÏ
¡¶linux sound user¡¯s guide¡·
¡¶linux sound howto¡·

ÉÏÒ»Ò³ ±¾ÎĹ²2Ò³£ºµÚ [1] [2] Ò³

ÔðÈα༭£ºgzu521

µçÄÔ¿ÎÌ÷ÖÀà
Windows 2000½Ì³Ì
Windows XP½Ì³Ì
Windows 2003½Ì³Ì
Windows Vista½Ì³Ì
LINUX½Ì³Ì
Èí¼þ½Ìѧ
°ì¹«Èí¼þ
Ó²¼þDIY
·ÖÀàÍÆ¼öÐÅÏ¢
¸ü¶à...
´óÀà×îÐÂÎÄÕÂ
¸ü¶à...