• 4867阅读
  • 0回复

Phonon 偶尔会出现播放失败的情况 [复制链接]

上一主题 下一主题
离线napier
 

只看楼主 倒序阅读 楼主  发表于: 2010-08-05
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
我在制作一个单词朗读软件时,需要一个个地播放很多的 mp3 文件,每次都使用 Phonon::MediaObject 提供的 setCurrentSource() 函数载入当前的单词音频,然后用 play() 播放。

这时偶尔会出现某个单词播放不出声音的情况,不像是音频文件的问题,因为哪个文件不出声是随机出现的,一个接一个播放几十甚至上百的文件才会遇到一次不出声的情况。此时MediaObject 不会报告任何错误信息。

我检查了一下,在对 Phonon::MediaObject 使用 setCurrentSource() 之后,Phonon::MediaObject 进入 Phonon::StoppedState 这个状态,表示已经就绪了,之后调用 play() 就可以播放。文件播放完成后,进入到 Phonon::PausedState。

整个过程中 MediaObject 的状态变化是:LoadingState -> StoppedState -> PlayingState -> PausedState 。

不出声的时候,MediaObject 直接进入到了 Phonon::PausedState 这个状态,这时 play() 是没有效果的,必须先调用一次 stop() 得到 Phonon::StoppedState 状态之后,才能 play() 发出声音。

而且,在 setCurrentSource() 之后直接调用 stop() 再调用 play() 是没有效果的,也就是说,仍然会遇到偶尔无声的现象,只有用一个槽函数接收 MediaObject 的信号 stateChanged() 之后,再视情况调用 stop() 和 play() 才能避免偶尔的无声。这个可能和 Phonon 本身的异步特性有关。

不知道大家有没有遇到过这个现象,解决办法又是什么?
快速回复
限100 字节
 
上一个 下一个