⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复件 sndtools.c

📁 声音信号的采集和回放
💻 C
字号:
/****************sndtools.h*****************************/#ifndef SNDTOOLS_H#define SNDTOOLS_H                                                                               #include<linux/soundcard.h>                                                                               #define FMT8BITS AFMT_S8_LE#define FMT16BITS AFMT_S16_LE                                                                               #define FMT8K 8000#define FMT16K 16000#define FMT22K 22000#define FMT44K 44000                                                                               #define MONO 1#define STERO 2                                                                               #ifndef VAR_STATICextern int devfd;extern int CapMask;#endif //ifndef VAR_STATIC                                                                               //Open sound device,return 1 if open success//else return 0int OpenSnd();                                                                               //Close sound deviceint CloseSnd();                                                                               //Set record or playback format,return 1 if success//else return 0int SetFornat(int bits,int hz);                                                                               //Set record or playback channel, return 1 if success//else return 1int SetCheannel(int chn);                                                                               //Recordint Record(char *buf,int size);                                                                               //Playbackint Play(char *buf,int size);                                                                               #endif//ifndef SNDTOOLS_H                                                                               /*****************sndtools.c************************/#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include <sys/ioctl.h>#include <string.h>#define VAR_STATIC#include "sndtools.h"int devfd=0;/*Open Sound deviceReturn 1 if success,else return 0*/int OpenSnd(/*add by new version*/int nWhich){if(devfd>0)close(devfd);devfd=open("/dev/dsp",O_RDWR);if(devfd<0)return 0;return 1;}/*Close Sound devicereturn 1 if success, else return 0*/int CloseSnd(/*add by new version*/int nWhich){close(devfd);devfd=0;return 1;}/*Set Record an Playback formatreturn 1 if success,else return 0bits--FMT8BITS(8bits),FMT16BITS(16bits)hz--FMT8K(8000Hz),FMT16K(16000Hz),FMT22K(22000Hz),FMT44K(44000Hz)*/int SetFormat(int bits,int hz){int tmp=bits;if(-1==ioctl(devfd,SNDCTL_DSP_SETFMT,&tmp)){#ifdef DEUG_WARNprintf("Set fmt to s16_little faile:%d\n",nWhich);#endifreturn 0;}tmp=hz;if(-1==ioctl(devfd,SNDCTL_DSP_SPEED,&tmp)){#ifdef DEBUG_WARNPrintf("Set speed to %d:%d\n",hz,nWhich);#endifreturn 0;}return 1;}/*Set Sound Card Channelreturn if success,else return 0chn--MONO,STERO*/int SetChannel(int chn){int tmp=chn;if(-1==ioctl(devfd,SNDCTL_DSP_CHANNELS,&tmp)){#ifdef DEBUG_WARNprintf("Set Audio Channel faile:%d\n",nWhich);#endifreturn 0;}return 1;}/*Recordreturn numbers of byte for read.*/int Record(char *buf,int size){return read(devfd,buf,size);}/*Playbackreturn numbers of byte for write*/int Play(char *buf,int size){return write(devfd,buf,size);}//A sample to test record and playback.#include <stdio.h>#include<stdlib.h>#include <unistd.h>#include"sndtools.h"int main(){char *buf;int dwSize;int i;if(!OpenSnd(devfd)){printf("Open sound device error!\n");exit(-1);}SetFormat(FMT16BITS,FMT8K);SetChannel(MONO);buf=(char*)malloc(320);if(buf==NULL)exit(-1);//int i;for( i=0;i<1000;i++){dwSize=Record(buf,640);dwSize=Play(buf,dwSize);}exit(1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -