ArchLinux下VirtualBox安装和配置
我的smb.conf--超简洁samba配置

编译mp3blaster,解决声卡独占和中文乱码

獨立的圓 posted @ 2008年3月13日 18:20 in 软件安装_配置 with tags mp3blaster , 8217 阅读

 本站文章已轉移,敬請移步:http://www.xxb.me/ ,謝謝!

mp3blaster是个很酷的命令行界面音乐播放器,支持mp3,wav和ogg格式,但它有两个问题,一个是声卡独占,一个是中文乱码。

到其官方网站可以下载源码,我下了最新那个3.2.3版本。(话说它有近两年没更新了)

先说第一个问题,声卡独占(后来发现有更简单的解决办法,文章结尾有补充)

如果开着其它带声音的程序,mp3blaster就不能播放了,比如我就不能一边玩魔兽一边用它放音乐。

如果在系统音效那里开了允许软件混音(ESD)和播放系统声音,用它放歌就会断断续续一顿一顿一卡一卡的,或者播放速度超快音质爆烂。

这个问题好办,为系统安装alsa-oss,编译mp3blaster时加参数“--with-sdl=no --with-esd=no --with-oss”,屏蔽其sdl和esd,强制使用OSS播放

然后编辑~/.bashrc,添加一行:

export LD_PRELOAD="/usr/lib/libaoss.so"

(注:添加进/etc/profile更好,参考一个奇怪的问题--关于声卡独占

运行以下命令使新的.bashrc生效:

$ source ~/.bashrc

这样就能解决声音独占了,如果想边玩魔兽边听歌,必须在winecfg音乐那里勾选ALSA。

再说第二个问题,中文乱码

在源代码目录下有个src/id3parse.cc文件,用文本编辑器打开它,找到

/* tampers with 's' to replace non-printable chars with dots. */
void
convert_to_sane_string(char *s)
{
    unsigned int
        cnt = strlen(s),
        i;

    for (i = 0; i < cnt; i++)
    {
        if (s[i] < (char)32)
            s[i] = '.';
    }
}

修改为:

/* tampers with 's' to replace non-printable chars with dots. */
void
convert_to_sane_string(char *s)
{
        /*
        unsigned int
                cnt = strlen(s),
                i;

        for (i = 0; i < cnt; i++)
        {
                if (s[i] < (char)32)
                        s[i] = '.';
        }
        */
}

即添加/*和*/把这个函数注释掉,保存退出。

接下来就可以编译安装mp3blaster了,终端进入源代码目录,然后

$ ./configure --with-sdl=no --with-esd=no --with-oss
$ make
$ sudo make install

如果系统是GB环境,就能正常显示中文播放列表和mp3中文ID3标签,如果系统环境为UTF-8,此招无效

不过我仍然有旁门左道,把终端字符编码改为GBK,这样能正常显示中文ID3标签,但中文播放列表依然不行,没办法,《小王子》里的狐狸说世上没有十全十美的东西

我把所有的中文歌曲文件名都改为拼音了,windows下有个批量改名的小工具“改名专家2006”,挺好用的

终端运行mp3blaster便能启动播放器,操作很酷很简单,截图:

补充:声音独占的问题其实很好解决,可以通过配置文件,让mp3blaster使用OSS

先建立配置文件:

$ cp /usr/share/doc/mp3blaster/example/sample.mp3blasterrc ~/.mp3blasterrc

然后打开~/.mp3blasterrc,找到

#AudioDriver = oss

把前面的#注释号去掉,即改为:

AudioDriver = oss

这样便不用编译时使用参数了,~/.mp3blasterrc还有很多设置选项,得好好研究下

  • 无匹配

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter