Linux下mono播放PCM音频
作者:网络转载 发布时间:[ 2015/3/9 14:43:40 ] 推荐标签:Linux 操作系统 mono
测试环境:
Ubuntu 14
MonoDevelop
CodeBlocks
1、建立一个共享库(shared library)
这里用到了linux下的音频播放库,alsa-lib。 alsa是linux下的一个开源项目,它的全名是Advanced Linux Sound Architecture。它的安装命令如下:
sudo apt-get install libasound2-dev
使用 Coceblocks 建立一个 shared library 项目,命名为libTest2,编程语言选择C。在main中加入下代码:
1#include<alsa/asoundlib.h>
2#include<stdio.h>
3
4
5snd_pcm_t*handle;
6snd_pcm_sframes_tframes;
7
8
9intPcmOpen()
10{
11
12if(snd_pcm_open(&handle,"hw:0,0",SND_PCM_STREAM_PLAYBACK,0)<0)
13{
14printf("pcmopenerror");
15return0;
16}
17
18if(snd_pcm_set_params(handle,SND_PCM_FORMAT_U8,SND_PCM_ACCESS_RW_INTERLEAVED,1,8000,1,500000)<0)//0.5sec500000
19{
20printf("pcmseterror");
21return0;
22}
23
24return1;
25}
26
27
28
29voidPlay(unsignedchar*buffer,intlength)
30{
31frames=snd_pcm_writei(handle,buffer,length);
32if(frames<0)
33{
34frames=snd_pcm_recover(handle,frames,0);
35}
36}
37
38
39
40
41intPcmClose()
42{
43snd_pcm_close(handle);
44return1;
45}
在编译的时候,记得链接alsa-lib库。具体方法是在codeblocks的编译对话框中,找到linker settings选项,在Other linker options中输入:-lasound。
如图所示:

当然,也可以手工编译。cd 进main.c所在的目录,执行以下命令:
gcc -o main.o -c main.c
gcc -o libTest1.so -shared main.o -lasound

sales@spasvo.com