从虚拟设备获取音频数据(playback)

1.加载虚拟输出设备
pacmd load-module module-pipe-sink file=/tmp/output format=s16le rate=44100 channels=2
2.设置虚拟输出设备为默认输出设备
pacmd list-sinks 查看输出设备名称
pacmd set-default-sink fifo_output(虚拟输出设备名称为fifo_output)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <time.h>
#include <sys/time.h> int dump_pcm_data(char *buf, int buf_size, FILE *fp)
{int size = 0;if(fp)size = fwrite(buf, 1, buf_size, fp);printf("write pcm size = %d.\n", size);return size;
}int read_date_from_fifo(char *buf, int buf_size, int fd_read)
{int ret = 0;if(fd_read > 0)ret = read(fd_read, buf, buf_size);fprintf(stderr, "read from fifo size = %d, errno = %d", ret, errno);return ret;
}int main()
{FILE *fp_write = NULL;char *buf[441*8] = {0};int buf_size = 441*8;fp_write = fopen("dump_sound.pcm", "wb");if (fp_write == NULL)fprintf(stderr,"open dump_sound.pcm error, %d. \n", errno);fseek(fp_write, 0, SEEK_SET); //找到文件开头int fd_read = -1;const int openmode = O_RDONLY | O_RSYNC | O_NONBLOCK;char fifo_name[32] = "/tmp/output";fd_read = open(fifo_name, openmode);if(fd_read < 0)fprintf(stderr,"open fifo file error, %d.\n", errno);while(read_date_from_fifo(buf, buf_size, fd_read)){fflush(stdout);time_t ltime; struct tm *LocalTm = {0};struct timeval t;time(&ltime); LocalTm = localtime(&ltime);gettimeofday(&t, NULL);int ret = dump_pcm_data(buf, buf_size, fp_write);fprintf(stderr,"%02d-%02d %02d:%02d:%02d:%03ld.\n", LocalTm->tm_mon+1,LocalTm->tm_mday, LocalTm->tm_hour,LocalTm->tm_min, LocalTm->tm_sec, t.tv_usec/1000); usleep(20*1000);}fclose(fp_read);close(fd_write);
}

向虚拟设备写入音频数据(record)

1. 加载虚拟输入设备

pacmd load-module module-pipe-source file=/tmp/input format=s16le rate=44100 channels=2

2. 设置虚拟输入设备为默认输入设备

pacmd list-sinks 查看输入设备名称

pacmd set-default-sink fifo_input(虚拟输入设备名称为fifo_input)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <time.h>
#include <sys/time.h> int read_date_from_pcm(char *buf, int buf_size, FILE *fp)
{int size = 0;if(fp)size = fread(buf, 1, buf_size, fp);printf("read pcm size = %d.\n", size);//fseek(fp, buf_size, SEEK_CUR);return size;
}int  write_date_to_fifo(char *buf,int buf_size, int fd)
{int ret = 0;if(fd > 0)ret = write(fd, buf, buf_size);return ret;
}int main()
{   FILE *fp_read = NULL;char *buf[441*8] = {0};int buf_size = 441*8;fp_read = fopen("playback_dump.pcm", "rb");if (fp_read == NULL)fprintf(stderr,"open playback_dump.pcm error, %d. \n", errno);fseek(fp_read, 0, SEEK_SET);printf("fp_read = %d.\n", fp_read);int fd_write = -1;const int openmode = O_WRONLY | O_DSYNC | O_NONBLOCK;char fifo_name[32] = "/tmp/input";fd_write = open(fifo_name, openmode);if(fd_write < 0)fprintf(stderr,"open fifo file error, %d.\n", errno);printf("fd_write = %d.\n", fd_write);while(read_date_from_pcm(buf, buf_size, fp_read)){printf("fp_read = %d.\n", ftell(fp_read));fflush(stdout);time_t ltime; struct tm *LocalTm = {0};struct timeval t;time(&ltime); LocalTm = localtime(&ltime);gettimeofday(&t, NULL);int ret = write_date_to_fifo(buf, buf_size, fd_write);fprintf(stderr,"%02d-%02d %02d:%02d:%02d:%03ld : ret = %d. errno = %d\n", LocalTm->tm_mon+1,LocalTm->tm_mday, LocalTm->tm_hour,LocalTm->tm_min, LocalTm->tm_sec, t.tv_usec/1000, ret, errno); usleep(20*1000);}fclose(fp_read);close(fd_write);
}

PulseAudio 模块化实现录音和放音相关推荐

  1. matlab 播放声音,用matlab录音和放音

    用matlab录音和放音 利用matlab的音频信号处理工具箱,可以实现声音的录制和播放. 录音函数wavrecord语法为: y=wavrecord(n,fs,channel,dataType); ...

  2. MATLAB同时录音播放,用matlab录音和放音

    用matlab录音和放音 利用matlab的音频信号处理工具箱,可以实现声音的录制和播放. 录音函数wavrecord语法为: y=wavrecord(n,fs,channel,dataType); ...

  3. 使用iphone的remote io unit来录音和放音.

    此文的参考价值越来越小了,新版的xcode默认要求arc开发,此类是mrc.AudioSessionAddPropertyListener...这些c函数在ios7也提示过时了.用上AVAudioSe ...

  4. 通过dsp设备实现录音与放音编程实例

    今日诗词欣赏: 柳永   <雨霖铃> 寒蝉凄切,对长亭晚,骤雨初歇.都门帐饮无绪,留恋处,兰舟催发.执手相看泪眼,竟无语凝噎.念去去,千里烟波,暮霭沉沉楚天阔.     多情自古伤离别,更 ...

  5. Android下音频的测试程序tinyalsa(录音,放音,查看声卡信息)

    audio代码比较复杂,除了音频参数,我们平时客制化的地方不多.所以没有太深入了解. 建议先抽空看看如下代码: kernel, linux alsa 架构: kernel-3.10/sound/soc ...

  6. 转 alsa录音放音执行流程详解

    前言: linux中,无论是oss还是alsa体系,录音和放音的数据流必须分析清楚.先分析alsa驱动层,然后关联到alsa库层和应用层. 链接分析: core/pcm_native.c文件中.mma ...

  7. 基于51单片机的数码录音放音系统设计

    摘  要 随着语言的处理技术在工业生产.交通.通信等方面的运用得到不断创新.数码录音放音系统已得到了越来越多的人的青睐,通过对多种录音放音系统的设计方案进行了比较和分析,本论文最终选定以STC89C5 ...

  8. 回音消除 Speex AEC 录音放音同步对齐

    一 .因为Windows不是实时操作系统,造成声卡的录音.放音他们之间有一定 时间的延时,而且这个延时的时间长每台电脑可能都不一样 .从而给回音 消除增加一定的难度,再加上房间的大小造成声音反射也不一 ...

  9. linux alsa 录音程序,转 alsa录音放音执行流程详解

    前言: linux中,无论是oss还是alsa体系,录音和放音的数据流必须分析清楚.先分析alsa驱动层,然后关联到alsa库层和应用层. 链接分析: core/pcm_native.c文件中.mma ...

  10. 为android系统添加USB AUDIO设备的放音和录音功能

    转载请注明出处:http://blog.csdn.net/adits/article/details/8242146 开发环境简介 1. 主机系统: Unbuntu10.10 2. android系统 ...

最新文章

  1. 幂等性 第三方交易编号_java幂等性的解决方案
  2. JSP实现在线调查问卷系统
  3. gulp.js 的安装以及使用
  4. arcLength函数
  5. linux系统修改bond的ip,Linux下快速设定ip bond,linux设定ipbond
  6. HR 问“你目前有几个 Offer”,聪明人会怎么说?你呢!
  7. 利用python爬虫(part8)--Xpath路径表达式
  8. html怎么防止表单重复提交,js防止表单重复提交的解决方法
  9. 卢克增加服务器,DNF卢克跨区服务器崩溃?策划:暗制造者临时加入安图恩攻坚...
  10. static静态属性 java 1614870751
  11. flutter 打开后闪退_vscode 扩展 pubspec 依赖快速打开文档
  12. 五分钟快速过完Verilog HDL基本概念(1)
  13. 安装erlang没有bin文件夹_Windows10有关jdk13.0.1的详细安装过程
  14. Windows10右键没有新建文本文件
  15. 1.Ubuntu Server下搭建LAMP环境
  16. 51单片机redefinition_关于c51单片机的一个问题
  17. 单尺度Retinex
  18. 国外10个最佳和最流行的酷站推荐网站
  19. GD32实战1__编程规范
  20. 国际知名芯片专家,加盟武昌理工学院人工智能学院

热门文章

  1. 一个Node程序猿上海的一周
  2. Scan Reorder Formal
  3. Redis的scan命令
  4. 徐思201771010132《面向对象程序设计(java)》第十六周学习总结
  5. 杨玲 徐思 《面向对象程序设计(java)》第十一周学习总结
  6. 云队友丨盘点,到底盘什么?
  7. ftp服务器支持ipv6,IPV6下搭建FTP服务器的步骤
  8. 物联网终端安全系列(之二) -- 物联网终端安全需求分析
  9. 苹果开发人员账号注冊流程
  10. 基于Hive解析AST的模仿sqlFlow无中间表的字段级数据血缘的后端