资源简介
想要实现局域网内的两台Linux主机实现对讲功能。于是就写了此代码,但只能实现一端采集语音,一端播放语音,要实现实时对讲还需要多个线程,多个套接字。此段代码能实现基本的一端录音,一端播放。但是可能还有点问题,就是时间长了,可能延时较大。由于是基于OSS的,所以执行时应加padsp,如下所示:
gcc -o udp-client udp-client.c
padsp ./udp-client IP
gcc -o udp-server udp-server.c
padsp ./udp-server

代码片段和文件信息
//udp-dsp-client.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//录音频率
#define RATE 88200
//量化位数
#define SIZE 16
//声道数目
#define CHANNELS 2
//缓冲区大小
#define RSIZE 2048
//保存录取的音频数据
unsigned char buf[RSIZE];
int main(int argcchar *argv[])
{
int fdsockfd;
int status;
int arg;
struct sockaddr_in s_addr;
if((sockfd=socket(AF_INETSOCK_DGRAM0))==-1)
{
perror(“socket“);
exit(errno);
}
else
printf(“creat sockfd success!.\n\r“);
s_addr.sin_family=AF_INET;
s_addr.sin_port=htons(7000);
if(argc!=2)
{
printf(“用法:./udp-dsp-client IP地址。\n“);
return 1;
}
else
s_addr.sin_addr.s_addr=inet_addr(argv[1]);
bzero ( & (s_addr.sin_zero)8);
/*************读方式打开音频设备********************************************************************************/
fd= open(“/dev/dsp“O_RDONLY0777);
if(fd < 0)
{
perror(“Cannot open /dev/dsp device“);
return 1;
}
//设置采样的量化位数
arg = SIZE;
status = ioctl(fdSOUND_PCM_WRITE_BITS&arg);
if(status == -1)
{
perror(“Connet set SOUND_PCM_WRITE_BITS “);
return -1;
}
//设置采样时的声道数目
arg = CHANNELS;
status = ioctl(fdSOUND_PCM_WRITE_CHANNELS&arg);
if(status == -1)
{
perror(“Connet set SOUND_PCM_WRITE_CHANNELS “);
return -1;
}
//设置采样时的频率
arg = RATE;
status = ioctl(fdSOUND_PCM_WRITE_RATE&arg);
if(status == -1)
{
perror(“Connet set SOUND_PCM_WRITE_RATE “);
return -1;
}
int readNumsendNum;
while(1)
{
//从声卡读语音数据
readNum = read(fdbufRSIZE);
if(readNum==-1)
{
perror(“read wrong number of bytes\n“);
}
//发送语音数据
sendNum=sendto(sockfdbufreadNum0(struct sockaddr * )& s_addrsizeof(struct sockaddr));
if(sendNum==-1)
{
printf(“sendto error\n“);
break;
}
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-10-27 10:53 udp\
文件 2059 2014-10-24 16:33 udp\udp-client.c
文件 2375 2014-10-20 21:16 udp\udp-server.c
- 上一篇:大型(双核心)网络综合实验
- 下一篇:网站后台扫描工具
相关资源
- uboot到linux logo显示不间断 补丁
- UNIX/LINUX编程实践教程的源码
- 使用选择性重传协议实现UDP可靠通信
- Linux任务管理器
- linux应用层的华容道游戏源代码
- 使用 SoundPool 同时播放多个音频
- ubuntu9.10 可加载内核模块和字符设备驱
- MP3文件ID3v2ID3v2APEv2标签读取
- 音频测试软件
- 操作系统实验——虚存管理实验
- linux下的发包工具sendip
- 尚观培训linux许巍关于c 的笔记和讲义
- 尚观培训linux董亮老师关于数据结构的
- linux 线程池源码 c 版
- linux C 电梯程序练习
- 网络(UDP)转串口程序
- linux下用多进程同步方法解决生产者
- Linux 操作系统实验(全)
- Linux From Scratch 中文手册
- linux 网络实验 ftp程序
- 用Socket写的简易FTP服务器和客户端
- Linux命令大全离线版&在线版
- Qt 播放音频文件
- 操作系统共享内存实验
- 模拟电路课程设计(音频放大电路设
- dos 下运行Linux 命令--gnu_utils
- linux 0.12内核源代码
- linux简易shell C实现
- linux实验报告及心得体会
- 基于GTK的Linux环境下的简易任务管理器
评论
共有 条评论