用 padsp 解决一些老的linux程序在 pulseaudio 主管声音的新系统下的声音问题

用 padsp 解决一些老的linux程序在 pulseaudio 主管声音的新系统下的声音问题

padsp 是 pulseaudio-utils 包中的一个程序


用法:  padsp [options] PROGRAM [ARGUMENTS ...]


    它是pulseaudio对oss的包装,是用pulseaudio来虚拟 oss 设备 /dev/dsp 以及相关兼容设备 /dev/mixer, /dev/sndstat (注:实际上只是重定向,因而不会在 /dev 目录下真的产生设备文件 dsp 等)。或者说是将oss设备重定向到pusleaudio服务中。总之,这样一处理,那些老的应用oss的程序就能通过padsp的包装来正常使用pulseaudio服务来发声。

    比如,linux下有个很好的模拟器叫 xmame,但是它已不再维护了,继之的是一个新的项目,叫sdlmame。问题是,xmame不再支持最新的rom了;而sdlmame也对以前xmame支持的老的rom不再支持了,所以要玩一些老的游戏,还是离不开xmame。Fedora11的yum源中已经只有sdlmame而没有xmame了,于是只能自己下载rpm包来安装了,装完后运行时却没有声音!原因就是 xmame 使用老式的设备 /dev/dsp,然而在 Fedora11下已经没有了,所以没有声音。解决办法就是用 padsp!使用如下命令即可玩kof98(当然,得有rom,且设好rompath):

    padsp  xmame kof98


    padsp 的另一个应用的例子就是博客前几帖转贴中关于 vmware 解决声音冲突问题的应用!


Linux声音系统和PulseAudio简介


http://www.jysls.com/thread-440416-1-1.html
Linux 的声音系统或许是最无序的子系统部分!作为Server来说,声音无足轻重,无人问津,而作为桌面来说太多的实现方案,各有各的长出和不足,ALSA经过 多年的发展,基本统一了Linux声卡硬件驱动层的借口,OSS日渐退出,但是在ALSA之上的各个应用层面,方案和软件之多让人咋 舌!ESD,aRts, JACK,GStreamer,这些系统组件各个为战,实现了不同的功能,ESD是GNOME的声音服务器,而aRts是KDE的,JACK可以处理一些 底层的应用,GStreamer是GNOME平台比较新的Code和Decode的中间层,向声音服务器输送解码后的RAWAudio,还有很多程序,比 如Xine和Mplayer,他们的声音处理完全是独自完成的,从编解码到输出到ALSA驱动,应用程序全包办了,不需其他的中间层!这就使整个声音系统 显的极其复杂和杂乱无章!PulseAudio声音服务器试图以全新的架构来提供新的声音处理架构,希望能像ALSA统一底层那样一统声音应用领域!

对于现今的大部分GNOME程序而言,声音处理流程是这样的:
应 用程序调用GSTreamer解码,将压缩的声音文件解成rawaudio数据,然后交给ESD声音服务器,由ESD交由ALSA转至设备层,完成声音输 出,这个过程中,使用PulseAudio的话,只要把ESD换成PulseAudio应该就可以了!而对于其他方式的应用而言,问题还不止这些!

PulseAudio的目的就是要让声音系统整体复杂度有效的降下来,方便更好的开发各类声音应用。

由于pulseaudio-esound-compat的出色替代工作,大部分基于ESD的应用用上了PulseAudio。
约90%的应用可以使用PulseAudio,KDE程序可以设置aRTs直接路由到ESD,而XMMS,Amarok程序可以设置后台声音服务器为ESD。

PulseAudio通过网络处理请求的能力也很强,可以处理来自多个数据原的声音,这是其它最大的特色之一!

补充:
http://linuxtoy.org/archives/alsa-1019-release.html
alsa是硬件驱动,实现最底层的基础音频功能。
而其他音频服务器(例如pulseaudio、jackd等)要依赖alsa,它们都有个共同点,为了提供一套方便开发者的api(相对于alsa、oss)。
由于它们的目的和着重点不同,你会看到依赖性的一些有趣现象。
如jackd是音频服务器,调用alsa或oss提供的功能实现发声,本来目的是给音频软件使用(如xmms、ardour、audacity),由于它强调实时性、低延时,后来其他音频服务器都可以用它作发声驱动(后端)了。
以前的esound只为了简单地实现多音频流同时发声,除了alsa还可以用很多声音系统做后端,例如jackd。
esound已经被“实时性没那么差”的pulseaudio代替了。

gstreamer是包括视频的中间层,编程框架相对庞大了。越是高层越臃肿、越依赖底层。拿个例子恶搞一下。
如果有个视频剪辑软件调用gstreamer,复杂的调用关系可以是: gstreamer -> pulseaudio -> jackd -> alsa ; 大多数人都有不会这么傻的设置,通常只是:gstreamer -> alsa 。

题外话,我曾不解,alsa为何不能做好些;如果alsa本身就能支持多音频流、实时性强、编程简单,也不会出现pulseaudio、jackd、aRts、esound这些东西了。
事实上大多廉价和内置声卡都不支持多音频流同时发声,都是软件这一级实现的。alsa也有个叫”default”的缺省软设备,适当地写个配置文件可以混 合alsa提供的一些“插件”(这个词很不恰当),也可以实现多音频流————可惜对于专业用户不可接受、居然还没够jackd的实时!

你可能感兴趣的:(用 padsp 解决一些老的linux程序在 pulseaudio 主管声音的新系统下的声音问题)