Alsa 音频编程小结(一)
2016-08-23 15:20
218 查看
本文主要记录我在完成实现基本录音与播放的过程中遇到的问题。
首先,介绍完成程序,我参考过的博文:
http://blog.csdn.net/u013494117/article/details/52269463;
http://blog.csdn.net/keepingstudying/article/details/50674284;
一、了解一下各个参数的含义以及一些基本概念
样本长度(sample):样本是记录音频数据最基本的单位,计算机对每个通道采样量化时数字比特位数,常见的有8位和16位。
通道数(channel):该参数为1表示单声道,2则是立体声。
帧(frame):帧记录了一个声音单元,其长度为样本长度与通道数的乘积,一段音频数据就是由苦干帧组成的。
采样率(rate):每秒钟采样次数,该次数是针对帧而言,常用的采样率如8KHz的人声, 44.1KHz的mp3音乐, 96Khz的蓝光音频。
周期(period):音频设备一次处理所需要的桢数,对于音频设备的数据访问以及音频数据的存储,都是以此为单位。
交错模式(interleaved):是一种音频数据的记录方式 在交错模式下,数据以连续桢的形式存放,即首先记录完桢1的左声道样本和右声道样本(假设为立体声格式),再开始桢2的记录。 而在非交错模式下,首先记录的是一个周期内所有桢的左声道样本,再记录右声道样本,数据是以连续通道的方式存储。不过多数情况下,我们只需要使用交错模式就可以了。
period(周期): 硬件中中断间的间隔时间。它表示输入延时。
比特率(Bits Per Second):比特率表示每秒的比特数,比特率=采样率×通道数×样本长度
二、ALSA介绍
1、设备命名
API库使用逻辑设备名而不是设备文件。设备名字可以是真实的硬件名字也可以是插件名字。硬件名字使用hw:i,j这样的格式。其中i是卡号,j是这块声卡上的设备号。
第一个声音设备是hw:0,0.这个别名默认引用第一块声音设备并且在本文示例中一真会被用到。
插件使用另外的唯一名字,比如 plughw:,表示一个插件,这个插件不提供对硬件设备的访问,而是提供像采样率转换这样的软件特性,硬件本身并不支持这样的特性。
我用的是主机的本地声卡,所以声卡设备要使用“default”或“hw:0,0”。否则在设置参数的时候
会出现invalid arguments 。无效参数。
在前面提到的参考博文中,录音和播放程序里面会出现下面的语句。
这里的val变量和前面程序里用到的采样率参数val=44100是同一个变量。但是这里我们要的到的是周期,执行完上面一条语句后,val的值不在是采样率的值了。
首先,介绍完成程序,我参考过的博文:
http://blog.csdn.net/u013494117/article/details/52269463;
http://blog.csdn.net/keepingstudying/article/details/50674284;
一、了解一下各个参数的含义以及一些基本概念
样本长度(sample):样本是记录音频数据最基本的单位,计算机对每个通道采样量化时数字比特位数,常见的有8位和16位。
通道数(channel):该参数为1表示单声道,2则是立体声。
帧(frame):帧记录了一个声音单元,其长度为样本长度与通道数的乘积,一段音频数据就是由苦干帧组成的。
采样率(rate):每秒钟采样次数,该次数是针对帧而言,常用的采样率如8KHz的人声, 44.1KHz的mp3音乐, 96Khz的蓝光音频。
周期(period):音频设备一次处理所需要的桢数,对于音频设备的数据访问以及音频数据的存储,都是以此为单位。
交错模式(interleaved):是一种音频数据的记录方式 在交错模式下,数据以连续桢的形式存放,即首先记录完桢1的左声道样本和右声道样本(假设为立体声格式),再开始桢2的记录。 而在非交错模式下,首先记录的是一个周期内所有桢的左声道样本,再记录右声道样本,数据是以连续通道的方式存储。不过多数情况下,我们只需要使用交错模式就可以了。
period(周期): 硬件中中断间的间隔时间。它表示输入延时。
比特率(Bits Per Second):比特率表示每秒的比特数,比特率=采样率×通道数×样本长度
二、ALSA介绍
1、设备命名
API库使用逻辑设备名而不是设备文件。设备名字可以是真实的硬件名字也可以是插件名字。硬件名字使用hw:i,j这样的格式。其中i是卡号,j是这块声卡上的设备号。
第一个声音设备是hw:0,0.这个别名默认引用第一块声音设备并且在本文示例中一真会被用到。
插件使用另外的唯一名字,比如 plughw:,表示一个插件,这个插件不提供对硬件设备的访问,而是提供像采样率转换这样的软件特性,硬件本身并不支持这样的特性。
我用的是主机的本地声卡,所以声卡设备要使用“default”或“hw:0,0”。否则在设置参数的时候
rc = snd_pcm_hw_params(handle, params); if (rc < 0) { fprintf(stderr, "unable to set hw parameters: %s\n", snd_strerror(rc)); exit(1); }
会出现invalid arguments 。无效参数。
在前面提到的参考博文中,录音和播放程序里面会出现下面的语句。
/* We want to loop for 5 seconds */ snd_pcm_hw_params_get_period_time(params,&val, &dir); /* 5 seconds in microseconds divided by * period time */ loops = 5000000 / val;
这里的val变量和前面程序里用到的采样率参数val=44100是同一个变量。但是这里我们要的到的是周期,执行完上面一条语句后,val的值不在是采样率的值了。
相关文章推荐
- Linux Alsa音频编程
- 原创:ALSA音频编程自我分析
- 【Linux&音频】Alsa音频编程【精华】
- Linux音频编程-OSS编程-alsa编程
- ubuntu 12.04下 ALSA音频编程
- 【Linux&音频】Alsa音频编程【精华】
- alsa音频编程
- ALSA音频编程自我分析
- ALSA音频编程
- Alsa音频应用编程
- 【转】Alsa音频编程【精华】
- Linux系统ALSA音频编程
- Alsa音频编程【精华】
- Alsa音频编程【精华】
- 【Linux&音频】Alsa音频编程【精华】
- 【转】Alsa音频编程【精华】
- Linux ALSA音频PCM播放编程
- alsa与oss音量设置例程, Linux音频编程指南
- Linux音频编程-OSS编程-alsa编程
- Alsa音频编程