📄 linux下声卡编程.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0055)http://linuxsoft.myrice.com/linuxclub/linuxbc/sound.htm -->
<!-- saved from url=(0056)http://www.yestime.net/linux/linux/bczn/linuxsndprg.html --><HTML><HEAD><TITLE>linux下声卡编程</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb_2312-80">
<META content="MSHTML 6.00.2800.1479" name=GENERATOR></HEAD>
<BODY bgProperties=fixed background=linux下声卡编程.files/back.gif>
<TABLE cellSpacing=0 cellPadding=0 width="89%" border=0>
<TBODY>
<TR>
<TD width="100%">
<DIR><FONT lang=ZH-CN face=宋体 size=3>
<P align=center><FONT color=#008000>linux下声卡编程试探</FONT></FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体
size=2>经过小第的不懈努力,终于对声卡编程有了一定的掌握.实现了一个小的录音</FONT></P>
<P align=justify><FONT size=2><FONT lang=ZH-CN face=宋体>程序</FONT>,//hehe
//admire <me></FONT></P>
<P align=justify><FONT size=2><FONT lang=ZH-CN
face=宋体>当然还很不完善</FONT>,<FONT lang=ZH-CN face=宋体
size=3>还有一些细节我不大清楚</FONT>//shy,<FONT lang=ZH-CN face=宋体
size=3>现将原码贴出</FONT>,<FONT lang=ZH-CN face=宋体>请各位给帮</FONT></FONT></P>
<P align=justify><FONT size=2><FONT lang=ZH-CN
face=宋体>忙指正</FONT>,//xixi</FONT></P>
<P align=justify><FONT size=2>#include <sys/soundcard.h></FONT></P>
<P align=justify><FONT size=2>#include <stdio.h></FONT></P>
<P align=justify><FONT size=2>#include <sys/types.h></FONT></P>
<P align=justify><FONT size=2>#include <sys/stat.h></FONT></P>
<P align=justify><FONT size=2>#include <fcntl.h></FONT></P>
<P align=justify><FONT size=2>main()</FONT></P>
<P align=justify><FONT size=2>{</FONT></P>
<P align=justify><FONT size=2>int id,fd,i,j;</FONT></P>
<P align=justify><FONT size=2>char testbuf[4096];</FONT></P>
<P align=justify><FONT size=2>id=open("/dev/audio",O_RDWR);</FONT></P>
<P align=justify><FONT size=2>fd=open("test.wav",O_RDWR);</FONT></P>
<P align=justify><FONT size=2>if(id<0||fd<0){</FONT></P>
<P align=justify><FONT size=2>printf("error in open the
device!\n");</FONT></P>
<P align=justify><FONT size=2>printf("id %d\t dsp%d\t
seq%d\n",id,dsp,seq);</FONT></P>
<P align=justify><FONT size=2>exit(-1);</FONT></P>
<P align=justify><FONT size=2>}</FONT></P>
<P align=justify><FONT size=2>post=0;</FONT></P>
<P align=justify><FONT size=2>ioctl(id,SNDCTL_DSP_RESET,(char
*)&i);</FONT></P>
<P align=justify><FONT size=2>ioctl(id,SNDCTL_DSP_SYNC,(char
*)&i);</FONT></P>
<P align=justify><FONT size=2>i=1;</FONT></P>
<P align=justify><FONT size=2>ioctl(id,SNDCTL_DSP_NONBLOCK,(char
*)&i);</FONT></P>
<P align=justify><FONT size=2>i=8000;</FONT></P>
<P align=justify><FONT size=2>ioctl(id,SNDCTL_DSP_SPEED,(char
*)&i);</FONT></P>
<P align=justify><FONT size=2>i=1;</FONT></P>
<P align=justify><FONT size=2>ioctl(id,SNDCTL_DSP_CHANNELS,(char
*)&i);</FONT></P>
<P align=justify><FONT size=2>i=8;</FONT></P>
<P align=justify><FONT size=2>ioctl(id,SNDCTL_DSP_SETFMT,(char
*)&i);</FONT></P>
<P align=justify><FONT size=2>i=3;</FONT></P>
<P align=justify><FONT size=2>ioctl(id,SNDCTL_DSP_SETTRIGGER,(char
*)&i);</FONT></P>
<P align=justify><FONT size=2>i=3;</FONT></P>
<P align=justify><FONT size=2>ioctl(id,SNDCTL_DSP_SETFRAGMENT,(char
*)&i);</FONT></P>
<P align=justify><FONT size=2>i=1;</FONT></P>
<P align=justify><FONT size=2>ioctl(id,SNDCTL_DSP_PROFILE,(char
*)&i);</FONT></P>
<P align=justify><FONT size=2>for(j=0;j<10;){</FONT></P>
<P align=justify><FONT size=2>i=read(id,testbuf,4096);</FONT></P>
<P align=justify><FONT size=2>if(i>0){</FONT></P>
<P align=justify><FONT size=2>write(fd,filebuf,i);</FONT></P>
<P align=justify><FONT size=2>j++;</FONT></P>
<P align=justify><FONT size=2>}</FONT></P>
<P align=justify><FONT size=2>}</FONT></P>
<P align=justify><FONT size=2>close(fd);</FONT></P>
<P align=justify><FONT size=2>close(id);</FONT></P>
<P align=justify><FONT lang=ZH-CN face=宋体 size=2>}</FONT></P><FONT size=3>
<P align=justify></FONT><FONT size=2><FONT lang=ZH-CN
face=宋体>该程序只是简单地录一小段纯音频数据存储在</FONT>test.wav<FONT lang=ZH-CN
face=宋体>中</FONT>,<FONT lang=ZH-CN face=宋体>用命令</FONT></FONT></P>
<P align=justify><FONT size=2>cat test.wav >/dev/audio <FONT lang=ZH-CN
face=宋体>就可以播放出来</FONT></FONT></P><FONT size=3>
<P align=justify></FONT><FONT size=2><FONT lang=ZH-CN
face=宋体>对了因为程序要读写声卡的设备文件</FONT>,<FONT lang=ZH-CN
face=宋体>所以你必须用相应的权限</FONT>,<FONT lang=ZH-CN
face=宋体>或者</FONT></FONT></P></DIR>
<P align=justify><FONT size=2><FONT lang=ZH-CN
face=宋体>你是</FONT>root。</FONT></P></TD></TR></TBODY></TABLE></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -