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

0 投票
1 回答
760 浏览
提问于 2025-04-16 20:32

我正在研究如何在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同时播放多个音频流,并且还将其链接到一个管理自定义视频播放器的Qt线程(这个播放器不在Phonon中),以便在用户快速拖动视频时保持音频同步。因此,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中音频速度的大部分内容,相关讨论在这里:< 关于PyQt Phonon后端音频效果“速度”的文档 >

1 个回答

1

你现在得到了一个包含 EffectDescription 对象的列表。你可以从这个 类参考 中获取相关的API信息。例如,

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

ParamEq
WavesReverb
Gargle
Compressor
Distortion
Echo
I3DL2Reverb
Flanger
Chorus

另外,我觉得你的安装可能有问题。我对Ubuntu不太熟悉,但我觉得你不应该看到那些错误信息。而且,我认为你也不需要创建一个QApplication对象来获取这些信息。在WinXP上我就不需要这样做。

撰写回答