Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9208414
  • 博文数量: 1728
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 19870
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1728)

文章存档

2024年(4)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: 其他平台

2018-02-05 11:42:08

ALSA API 文档



现在看play.c中音频编码额外的部分
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
snd_pcm_info_t *info;
snd_pcm_info_alloca(&info);
//snd_pcm_open之后
if ((err = snd_pcm_info(handle, info)) < 0)  /
//之后可以通过 snd_pcm_info_get_xxx(info)来通过info获取 card,device,subdevice等信息。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
static snd_output_t *log;
int err = snd_output_stdio_attach(&log, stderr, 0); 把stderr的信息重定向到 log中去。
//之后通过 snd_pcm_hw_params_dump(params, log);  snd_pcm_dump(handle, log); snd_pcm_status_dump(status, log); 等把sound的配置和运行信息导出到log中去。
最后关闭 snd_output_close(log);

还可以使用 
snd_output_stdio_open(&log, “文件名”, “w+”)把文件映射到log中。
snd_output_vprintf 、 snd_output_puts等吧字符串写入log的映射区中,
映射区的内容 通过 size_t snd_output_buffer_string ( snd_output_t *  output,char **  buf)获取。
最后关闭 snd_output_flush; snd_output_close(log);写入文件,。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
扫描所有卡。
int snd_device_name_hint ( int  card,    // -1 (means all cards)
const char *  iface,  // "pcm", 也可以是 (like "pcm", "rawmidi", "timer", "seq")
void ***  hints  //线索输出, 通过 hints ++ 可以切换到下一个。

 snd_device_name_free_hint(hints);
 
 每个线索 hint 通过
 char*  //返回的内容需要 free 
 snd_device_name_get_hint ( const void *  hint,
 const char *  id ; // 可以是 ("NAME", "DESC", or "IOID")
 )
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
 扫描所有的子设备
 card = -1;
 if (snd_card_next(&card) < 0 || card < 0) { //snd_card_next(-1)找到第一个有效卡。snd_card_next返回 -1 时代表所有卡都扫描过了
  error(_("no soundcards found..."));
  return;
 }
 

点击(此处)折叠或打开

  1. snd_ctl_t *card_handle;
  2. snd_ctl_open(&card_handle, "hw:%d", 0) : //%d 0-n card-number
     snd_ctl_card_info_t *info;
     snd_ctl_card_info_alloca(&info);
  3. snd_ctl_card_info(card_handle, info)
  4. int dev_idx = -1;
  5. while (1) 
  6. {
  7.     snd_ctl_pcm_next_device(card_handle, &dev_idx ) //dev_idx =-1时, 找到第一个设备。
             snd_pcm_info_t *pcminfo; 
             snd_pcm_info_alloca(&pcminfo);
  8.     snd_pcm_info_set_device(pcminfo, dev_idx );
       snd_pcm_info_set_subdevice(pcminfo, 0);
       snd_pcm_info_set_stream(pcminfo, SND_PCM_STREAM_PLAYBACK或者SND_PCM_STREAM_Capture);
        snd_ctl_pcm_info(handle, pcminfo); //获取其他信息。
  9.     count = snd_pcm_info_get_subdevices_count(pcminfo); //找到目前有多少个子设备。
  10.     for (i=0; i
  11.         snd_pcm_info_set_subdevice(pcminfo, i); //设置子设备的编号
  12.         snd_ctl_pcm_info(card_handle, pcminfo); //获取子设备的详细信息
  13.         snd_pcm_info_get_subdevice_name(pcminfo); //即可拿到子设备的名称
  14.     }
  15.     
  16. }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
snd_pcm_nonblock(handle, 1); 
snd_pcm_mmap_writei、snd_pcm_mmap_writen、snd_pcm_mmap_readi、snd_pcm_mmap_readn
snd_pcm_writei,snd_pcm_writen,snd_pcm_readi,snd_pcm_readn
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////

其余api
char *strsignal(signo); 返回信号对应的信号名称
void psignal(int sig, const char *s); 输出 s: 信号说明...

阅读(3632) | 评论(0) | 转发(0) |
0

上一篇:从alsa play.c 说起 (3)

下一篇:amixer (一)

给主人留下些什么吧!~~