linux 下音频的录制与播放测试例子
来源:互联网 发布:雅漾活泉保湿面膜 知乎 编辑:程序博客网 时间:2024/06/06 01:47
main.c文件
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include "sndtools.h"int main(int argc, char const *argv[]){ char *buf; int dwSize; if(!OpenSnd()){//打开声音设备 printf("Open sound device error!\\n"); exit(-1); } //SetFormat(FMT16BITS, FMT8K, WAVOUTDEV); SetFormat(FMT16BITS, FMT8K); //SetChannel(MONO, WAVOUTDEV); SetChannel(MONO); buf = (char *)malloc(320); if(buf == NULL) exit(-1); int i; printf("begin...\n"); for(i = 0; i <1000; i++){ dwSize = Record(buf, 640); //录音 dwSize = Play(buf, dwSize);//播放 } printf("close...\n"); CloseSnd(); return 0;}
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;//打开音响设备,如果成功返回1,否则返回0。int OpenSnd(void){ if(devfd > 0) close(devfd); devfd = open(DEV_NAME, O_RDWR); if(devfd < 0) return 0; return 1;}/** 设置录制播放格式* 如果成功返回1,否则返回0。* bits -- FMT8BITS(8bits), FMT16BITS(16bits)* hz -- FMT8K(8000HZ), FMT16K(16000HZ), FMT22K(22000HZ), FMT44K(44000HZ)*/// SetFormat(FMT16BITS, FMT8K);int SetFormat(int bits, int hz){ int tmp = bits; if( -1 == ioctl(devfd, SNDCTL_DSP_SETFMT, &tmp)){ printf("Set fmt to s16_little faile\r\n"); return 0; } tmp = hz; if( -1 == ioctl(devfd, SNDCTL_DSP_SPEED, &tmp)){ printf("Set speed to %d\r\n", hz); return 0; } return 1;}/** 声卡设置通道* 如果成功返回1,否则返回0。* chn -- MONO, STERO*///MONOint SetChannel(int chn){ int tmp = chn; if(-1 == ioctl(devfd, SNDCTL_DSP_CHANNELS, &tmp)){ printf("Set Audio Channel faile\r\n"); return 0; } return 1;}/** 记录* 返回读取的字节数量。*/int Record(char *buf, int size){ return read(devfd, buf, size);}/** 回放* 返回的字节数量写。*/int Play(char *buf, int size){ return write(devfd, buf, size);}//关闭声音设备,如果成功返回1,否则返回0。int CloseSnd(void){ close(devfd); devfd = 0; return 1;}
sndtools.h文件
#ifndef SNDTOOLS_H#define SNDTOOLS_H#include <linux/soundcard.h>#define FMT8BITS AFMT_S8_LE #define FMT16BITS AFMT_S16_LE#define DEV_NAME "/dev/dsp" #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 #define DEBUG() //printf("Time=[%s] FILE=[%s] LINE=[%d]\n",__TIME__,__FILE__,__LINE__);#define ERR_EXIT(m) (perror(m),exit(EXIT_FAILURE))//打开声音设备,如果打开成功返回1//否则返回0int OpenSnd(void);//关闭声音设备int CloseSnd(void);//记录或回放设置格式,如果成功返回1//否则返回0int SetFormat(int bits, int hz);//设置记录或回放通道,如果成功返回1//返回1int SetChannel(int chn);//记录int Record(char *buf, int size);//播放int Play(char *buf, int size);#endif
makefile文件
OBJS = main.o sndtools.oTARGET = outCC = gcc$(TARGET):$(OBJS)$(CC) -O2 -o $(TARGET) $(OBJS)clean:-$(RM) $(TARGET)-$(RM) $(OBJS)
0 0
- linux 下音频的录制与播放测试例子
- 音频的录制与播放
- Linux下OSS音频录制和播放
- Android的音频录制与播放
- Android音频的播放与录制
- Android音频录制与播放
- ALSA音频录制与播放
- linux下声音的录制与播放 /dev/dsp
- 音频AVAudioPlayer 的录制与播放和上传到服务器
- 音频录制与播放——JavaSound
- IOS 音频录制与播放简单演示
- android6.0音频录制与播放
- 音频录制和播放
- 音频录制及其播放
- 播放和录制音频
- 音频录制以及播放
- 录制音频和播放音频
- Android播放器MediaPlayer与MediaRecorder:录制音频并播放
- 【设计模式】建造者模式
- 离散--第三章
- Scala类详解
- 无法修改linux密码Authentication token manipulation error 问题解决
- perl-标准输入与输出
- linux 下音频的录制与播放测试例子
- 计算机组成原理
- 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量
- C语言基础总结-++ -- += -=
- JAVA练级之路(一)--- JAVA环境配置
- 数据结构基础--线性表操作
- Android中的Loaders机制
- 周易六十四卦——屯卦
- mysql基础学习笔记-2