gstreamer播放wav文件
来源:互联网 发布:阻抗匹配网络 编辑:程序博客网 时间:2024/05/01 07:24
http://basiccoder.com/play-wav-using-gst.html
在网上查了一下实现wav播放的方法,大多数都是这种直接操作/dev/dsp的,GTK也没有像QT那样的直接播放音频文件的类,于是我只好使用第三方的库了,网上很流行的gstreamer,今天简单读了一下它的手册,发现gstreamer确实是很强大,和GTK一样,它也是基于面向对象的思想来实现的,C语言的面向对象,这样对象和对象之间的继承和派生的关系他们都实现的很完美,有时间一定要仔细研究一下具体的实现方法,gstreamer还有一个更强大的特点是它的管道流机制,gstreamer里面的基本元素是element,element上有pad,每一个element都是一个独立的组件,来完成相应的功能,pad应该可以理解成接口吧,我也不知道该翻译成什么,element之间通过各种pad连接起来形成一个pipe,数据流就在这个pipe里面流动,每经过一个element就会经过一层过滤,比如经过数据压缩的element,数据解码的element,这让我想到了很多年前开发OA的时候里面的工作流,不过这种机制用在这里确实是个好主意,要实现一个复杂的功能只需要把各种独立实现某个小功能的element连接成一个pipe,数据流依次流过这个pipe的时候就完成了对这个数据流的复杂的处理,可扩展性也很高,当需要新的功能的时候只需要开发新的组件,提供相应的接口就可以添加到应用程序中去。
gst-inspect命令列出当前系统中已经安装了的gstreamer组件以及这些组件所具有的特性。
gst-launch命令创建并运行一个pipe,组件之间的管道用”!”作为分隔符,为了跟shell的管道分隔符区分开没有用”|”,下面是几个例子:
播放一个mp3文件,第二个组件mad是用来对mp3进行解码的,我系统上没装这个组件…
gst-launch filesrc location=music.mp3 ! mad ! osssink
其中location是组件filesrc的一个属性,filesrc是要从一个文件读取源数据,location指出了文件的路径
具体还有很多,详见http://linux.about.com/library/cmd/blcmdl1_gst-launch.htm
播放wav的时候需要用到wavparse这个组件,它在gst-plugins-good这个包里面,我的slackware没有预装,我在slackbuild.org上下载上来装上了。
在命令行用gst-launch命令播放的时候跟播放mp3时候类似,但在程序里面实现的时候就不同了,简单的把filesrc,wavparse和alsasink这三个组件连接起来会失败,这困扰了我好久,最后终于弄明白了,wavparse这个组件的sink pad只能在数据流来了以后才可以连接,因为wavparse需要先知道输入给它的数据的类型,所以在wavparse创建的时候link就会失败。解决的办法是使用信号动态地连接pad,gst_bin_add_many这个函数调用的时候会触发add_pad信号,回调函数参数列表里面就有新创建的pad,把这个pad连接到alsasink的sink pad上去就可以了,下面是gstreamer播放wav的源码:
编译:
1
$gcc -o gst gst.c `pkg-config --cflags --libs gstreamer-0.10`
- gstreamer播放wav文件
- 播放wav文件
- 播放WAV文件
- 播放WAV文件
- python 播放wav文件
- 播放 wav 文件
- jmf 播放wav文件
- PSP播放wav文件
- linux 播放wav文件
- 如何播放 WAV 文件?
- 实现播放WAV文件
- IE 播放wav文件
- 大型WAV文件的播放
- 如何播放大型 WAV 文件?
- 大型WAV文件的播放
- VB中播放WAV文件
- 使用libao播放wav文件
- silverlight中播放Wav文件
- 逆向之hash算法 ,逆向之选择排序 ,逆向之快速排序
- 在 x86 上面交叉编译 gstreamer for arm(zz)与MIPS平台上的编译(原)
- 反射 笔记
- 小宝,小宝,我爱你
- 宿命论毫无意义
- gstreamer播放wav文件
- C++ Virtual详解
- Hibernate 使用 Annotation 之 ManyToOne(单向关联关系)
- 关于java反编译:被证实的怀疑让我们收获
- 逆向之堆排序 ,逆向之二路归并排序
- 编写strcpy函数——链式表达式
- 常见音频视频格式简介
- 数组与Object的关系及其反射类型,数组反射应用实例,通过Array类实现数组的反射
- xml