QT5 QSound 不播放所有波形文件
Posted
技术标签:
【中文标题】QT5 QSound 不播放所有波形文件【英文标题】:QT5 QSound does not play all wave files 【发布时间】:2013-01-04 21:54:05 【问题描述】:我正在将基于 QT4.X 的应用程序迁移到 QT5。 QT5 中移除了声子支持,因此我将播放波形文件的代码更改为使用 QSound。
更改非常简单。我只需要使用 QSound,它现在位于多媒体库中。代码如下:
QSound::play("small_wave_file.wav");
对于我的大多数波形文件,这都很好;但是,对于我的波形文件(采样率为 44100Hz),它不起作用。
官方QT bug可以在here找到。
更新:此错误已在 qt 5.1 中修复
【问题讨论】:
我遇到了类似的问题,QSound::play
不起作用(这就是我发现这个问题的原因),对我来说,问题是因为缺少一些 DLL,解决方案是使用 Windows deployment tool .
【参考方案1】:
事实证明,有些波形文件会混淆 QSound。仍然不确定究竟是什么导致了这个问题。当我在 Audacity 中加载我的波形文件,然后将其导出回不同的波形文件而不进行任何更改(相同的采样率......)。 QSound 播放的文件很好。
在 MacOSX 中,当我在有问题的波形文件上单击“获取信息”时,波形文件中的一般波形信息记录不可用;所以也许 QSound 无法从中获取采样率信息;并且因为它不知道波形文件的采样率是多少?
有趣的是,iTunes 可以很好地播放原始文件,并且它具有正确的采样率。 Phonon 也可以正常播放原始文件。
无论如何,希望这对一些对 QSound::play() 方法有问题的人有所帮助。
更新:由于 QSound::play() 在 Mac 上的错误很大,我选择使用本机 NSSound 从 Mac 上的 QT 应用程序播放我的波形文件。代码如下:
void play_sound( const char* file)
NSSound *sound = [[NSSound alloc] initWithContentsOfFile:[NSString stringWithUTF8String:file] byReference:NO];
[sound play];
[sound release];
【讨论】:
我会提交一个 Qt 错误并附上有问题的波形文件。 我以为我做到了,但我没有。我今天会打开一个。谢谢。 实际上我确实打开了它(添加了错误链接)。此问题已在 qt 5.1 中解决【参考方案2】:另外请注意,Qt 有几个不同的声音播放 API。对于具有较低延迟的小文件播放,我发现这要快得多: http://doc.qt.io/qt-5/qsoundeffect.html#details
还有: http://doc.qt.io/qt-5/qmediaplayer.html
【讨论】:
以上是关于QT5 QSound 不播放所有波形文件的主要内容,如果未能解决你的问题,请参考以下文章