尝试在Phonon中以不同的速度播放音频时出现availableAudioEffects()错误

时间:2011-06-29 17:59:40

标签: python pyqt phonon

我正在尝试研究如何在Ubuntu中使用Phonon以不同的速度播放声音。我的第一个想法是检查函数调用中可用的选项:

 Phonon.BackendCapabilities.availableAudioEffects()

然而,这是当我导入PyQt和Phonon然后进行该函数调用时会发生的事情:

 ely@zaffpants:~/Desktop$ python2.6
 Python 2.6.6 
 [GCC 4.5.2] on linux2
 Type "help", "copyright", "credits" or "license" for more information.
 >>> import PyQt4; from PyQt4.phonon import Phonon
 >>> print Phonon.BackendCapabilities
 <class 'PyQt4.phonon.BackendCapabilities'>
 >>> print Phonon.BackendCapabilities.availableAudioEffects()
 WARNING: Phonon needs QCoreApplication::applicationName to be set to export audio output names through the DBUS interface 
 ASSERT: "QCoreApplication::instance()" in file ../../phonon/factory.cpp, line 378
 Aborted
 ely@zaffpants:~/Desktop$ 

我在网上找不到任何好的帖子。这为什么会中止?还请注意,在我当前的程序中,我已经使用Phonon同时播放多个音频流,甚至将它链接到管理自定义视频播放器(不是Phonon)的Qt线程,以便即使用户也能保持音频同步通过视频拖得更快。因此,必须正确安装Phonon才能达到这种程度,并且我已经使用了一些后端功能。当我查询后端效果时,为什么会中止?

有什么建议吗?即使他们没有修复此错误,是否有任何关于如何强制Phonon播放音频文件比正常情况更快或更慢的建议?

已添加

我通过执行以下操作解决了中止问题:在导入PyQt和Phonon之后,我创建了一个虚拟QApplication并为其命名,如下所示

>>> import sys
>>> app = PyQt4.QtGui.QApplication(sys.argv)
>>> app.setApplicationName('myname')
>>> print Phonon.BackendCapabilities.availableAudioEffects()

但是这里是函数的输出,即使在从列表中指定一个项目之后,也是不可读的。不知道如何把它变成可读的形式......?

(<unknown>:1848): GStreamer-CRITICAL **: gst_debug_add_log_function: assertion `func != NULL' failed
[<PyQt4.phonon.EffectDescription object at 0x7f941539ed70>,   <PyQt4.phonon.EffectDescription object at 0x7f941539ef30>, <PyQt4.phonon.EffectDescription   object at 0x7f941539efa0>, <PyQt4.phonon.EffectDescription object at 0x7f9408032050>, <PyQt4.phonon.EffectDescription object at 0x7f94080320c0>, <PyQt4.phonon.EffectDescription object at 0x7f9408032130>]
>>> print Phonon.BackendCapabilities.availableAudioEffects()[0]
<PyQt4.phonon.EffectDescription object at 0x7f941539ed70>

发布脚本 正如下面的评论中一样,我对Phonon中的音频速度进行了大部分考虑,并且该线程在这里:&lt; Documentation on PyQt Phonon backend audio effect 'speed'&gt;

1 个答案:

答案 0 :(得分:1)

您将获得EffectDescription个对象的列表。你可以从class reference获得api。例如,

>>>for effect in Phonon.BackendCapabilities.availableAudioEffects():
       print effect.name()

ParamEq
WavesReverb
Gargle
Compressor
Distortion
Echo
I3DL2Reverb
Flanger
Chorus

另一方面,我认为您的装置会受到影响。我不熟悉Ubuntu,但我认为你不应该收到这些错误信息。我认为您不应该创建一个QApplication对象来获取此信息。我没有必要使用WinXP。