学习python的时候突然想看看多媒体方面的开源库。
找到了pymedia。
下载后,编译:
python setup.py install <<< y
初步尝试了播放一个wav文件。
python aplayer.py /projects/media/test-org.wav
很遗憾,播放失败,提示
File "aplayer.py", line 72, in <module>
aplayer( sys.argv[ 1 ], i, r, t )
File "aplayer.py", line 47, in aplayer
snd.play( data )
Cannot play sound because of 0:
没办法,只好用SouceInsight建个工程,看看代码到底是怎么一回事。
与Play关联的有3个派生类,linux一般用alsa,估计是audio_alsa.h下的OSoundStream::Play
一看代码,感觉就有点不地道的感觉。
while(frames>0)
{
res = snd_pcm_writei(this->handle, buf, frames);
...
frames -= res;
}
危险点: res有可能比res大,buf位置没变化。
用printf确认,果然是这个原因。(到底是不是snd_pcm_writei问题还不是很清楚?这个设计的确很坑人)
简单修改如下:
if (res > 0) {
frames -= res;
if (frames < 0) frames = 0;
buf += res*this->framesize;
}
再编译,发现居然没clean功能,倒,搜寻了so位置,用如下方法再编译就能正常了。
rm -r -f build/*;python setup.py install <<< y
总体来说,这次体验让我对这个库的品质很是担心, 只能随便看看就删除了.