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

📄 commnicatetest.cpp

📁 linux下用c++编写的录音放音程序
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>

#include "DataFileOperation.h"
#include "ParamDef.h"
#include "SndOperation.h"

#define BUFF_SIZE 1024 * 2

/************** function implementation **************/
int main(int argc, char *argv[])
{
	CDataFileOperation g_DFOperate;
	CSndOperation g_SndOperate;
	unsigned int snd_fmt = DFT_SND_FMT;
	unsigned int snd_chn = DFT_SND_CHN;
	unsigned int snd_spd = DFT_SND_SPD;
	int i = 0;
	int RecOrPlay;
	int Looptimes = 1000;
	ssize_t nRD;  /*bytes readin */
	ssize_t nWR;  /*bytes write out */
	char *s_file = "Sound.wav";
	char *buff; /*sound buffer */

	if (strcmp(argv[1], "r") == 0) {
		printf("Record mode\n");
		RecOrPlay = ACT_RECORD;
	}else {
		printf("Play mode\n");
		RecOrPlay = ACT_PLAY;
	}
	if (!(g_SndOperate.OpenDev(RecOrPlay))) {
		printf("error in open sound device!\n");
		exit(-1);
	}
	if (!(g_DFOperate.OpenFile(s_file, RecOrPlay))) {
		printf("cannot open sound file %s\n", s_file);
		return (-1);
	}
	if (!(g_SndOperate.SetFormat(snd_fmt, snd_chn, snd_spd))) {
		printf("cannot set device in bit %d, channel %d, speed %d\n",
			snd_fmt, snd_chn, snd_spd);
		return (-1);
	}
	buff = new char [BUFF_SIZE];

	if (RecOrPlay == ACT_RECORD) {
		for(i = 0; i < Looptimes; i++) {
			nRD = g_SndOperate.Record(buff, BUFF_SIZE);
			if (nRD < 0) {
				perror("read sound device file failed");
				return (-1);
			}
			printf("i = %d\t read %d byte from dev\n", i, nRD);

			nWR = g_DFOperate.Write(buff, nRD);
			if (nWR < 0) {
				perror("write sound data file failed");
				return (-1);
			}
		}
	} else {
		printf("begin play!!!\n");
		for(i = 0; i < Looptimes; i++) {
			nRD = g_DFOperate.Read(buff, BUFF_SIZE);
			if (nRD < 0) {
				perror("read sound data file failed");
				return (-1);
			}
			printf("i = %d\t read %d byte from file\n", i, nRD);

			nWR = g_SndOperate.Play(buff, nRD);
			if (nWR < 0) {
				perror("write sound device file failed");
				return (-1);
			}
		}
	}
	delete []buff;
	g_DFOperate.CloseFile();
	g_SndOperate.CloseDev();

	return 1;
}

⌨️ 快捷键说明

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