Articles of alsa

alsa – mem泄漏?

我一直在追逐内存泄漏(由'valgrind –leak-check = yes'报告),它似乎来自ALSA。 这段代码已经有一段时间在自由的世界里了,所以我猜这是我做错了。 #include <stdio.h> #include <stdlib.h> #include <alsa/asoundlib.h> int main (int argc, char *argv[]) { snd_ctl_t *handle; int err = snd_ctl_open( &handle, "hw:1", 0 ); printf( "snd_ctl_open: %d\n", err ); err = snd_ctl_close(handle); printf( "snd_ctl_close: %d\n", err ); } 输出如下所示: [root@aeolus alsa]# valgrind –leak-check=yes ./test2 ==16296== Memcheck, a memory error detector ==16296== […]

ALSA:防止扬声器不足的方法

我正在以非交错模式播放单声道audio。 当我将aduio数据写入扬声器时,我正在运行ALSA lib pcm.c:7339:(snd_pcm_recover) underrun occurred 这是我写的: printf("%d",snd_pcm_avail (spkhandle)); ret = snd_pcm_writen(spkhandle, pSpeakerBuf , framesIn18Millisec); if(ret < 0) { snd_pcm_recover(spkhandle, ret, 0); } 什么是不同的方式/参数configuration来防止运行ALSA? (我正在使用Linux 3.0,ARM) 编辑:这是一个使用snd_pcm_avail()API的缓冲区度量 snd_pcm_avail = 2304 << snd_pcm_writen call 1 success snd_pcm_avail = 2160 << snd_pcm_writen call 2 success snd_pcm_avail = 2016 << snd_pcm_writen call 3 success snd_pcm_writen error -32 Broken […]

模拟麦克风(虚拟麦克风)

我有一个问题,我需要“模拟”麦克风输出。 数据将通过networking传输,解码为PCM,基本上需要写入麦克风 – 然后其他程序可以读取/logging/不pipe。 我一直在读alsa,但是信息很稀less。 该文件插件貌似很有前途 – 我正在考虑将一个命名pipe道作为“infile”,然后我可以从我的应用程序传递数据。 我不能得到它的工作(VLC /大胆只是段错误)。 pcm.testing { type file slave { pcm { type hw card 0 device 0 } } infile "/dev/urandom" format "raw" } 有没有更好的方法来做到这一点? 对alsa插件(特别是文件插件)的任何build议?

从ALSA录制 – 了解内存映射

Im试图使用ALSA从USBaudio设备获取input,并将其作为一系列有signed short值写入磁盘。 我所得到的结果是看起来是有效的数据块散布与大块零。 我猜我有我的缓冲区安装不正确,没有正确使用内存映射。 我正在尝试: 采样率:8K(这是由设备强制) 缓冲区大小:2048 期限大小:512 一个频道 该设备似乎打开正确,并接受各种参数。 经过一些设置后,循环运行如下: snd_pcm_avail_update snd_pcm_mmap_begin memcpy data from mmap buffer to array of short snd_pcm_mmap_commit memcpy是一个指向short的数组的指针,并且每次传递返回的帧数都是递增的。 在这个logging几秒钟之后,我把它closures,并把随后的缓冲区写入磁盘,作为每一行的一个简单值。 我期望的是在1200和2300赫兹之间变化的一秒或两秒的PCM数据。 我得到的是一些有很多零的数据。 我想知道的是:我的缓冲区和期限值是否合理? 有没有人成功地使用ALSA的内存映射输出? 编辑:一些代码 const snd_pcm_channel_area_t *areas; snd_pcm_uframes_t offset, frames, size; short* pCID = (short*)malloc( 50000 * sizeof( short )); short* ppCID = pCID; while( size > 0 ) […]

alsa_aplay不能在android上录音

我刚刚开始在Android上工作,我正在尝试了解Androidaudio子系统(ALSA)如何工作。 我运行在windows-7(64位)上运行的虚拟框中的Android图像。 我正在摆弄alsa-utils录制声音。 我试过alsa_aplay -C -f S16_LE -c 2 -r 44100 -d 5 foo.wav它说的是这样的: Recording WAVE foo.wav : Signed 16 bit little endian, rate 44100, stereo 但是,创build的输出文件似乎是空白的(在wav文件头之后)。 od -x foo.wav 0000000 4952 4646 7574 000d 4157 4556 6d66 2074 0000020 0010 0000 0001 0002 ac44 0000 b110 0002 0000040 0004 0010 6164 6174 7550 000d […]

ALSA教程需要

我是audio编程的新手。我想创build一个能够播放和控制音量的小应用程序。 我正在使用alsa-lib。 我想知道什么是开关(ex.Master回放开关)的目的,在混音器元素枚举和我应该设置什么值给那些开关。 请教我一些混音器设置的教程以及alsa编程。

ALSA:扬声器和麦克风的周期大小之间的关系

我有audio会议设备,有一个麦克风和扬声器。 具有与snd_pcm_hw_params_set_rate_near()设置的采样率相同的麦克风和扬声器都是snd_pcm_hw_params_set_rate_near() 。 我是否需要将期限大小和期限数量设置为相同(两个此类设备相互通信)? 或者,我可以为扬声器select不同的周期/周期大小吗? 我如何决定使用哪个期间和期限? 我正在使用snd_pcm_hw_params_set_period_size_near()和snd_pcm_hw_params_set_periods_near() API为扬声器和麦克风设置周期大小和周期。 (我是ALSA的新手)。

从C代码设置ALSA主音量

我一直在寻找一个简单的C代码示例来设置ALSA调音台的主音量,但找不到任何简单的操作。 我对ALSA完全不熟悉,所以做出我自己最小的例子需要时间。 如果有人能提供,我会很高兴。