我正在将基于 QT4.X 的应用程序迁移到 QT5。QT5 中删除了声子支持,因此我将播放波形文件的代码更改为使用 QSound。
改变非常简单。我只需要使用 QSound,它现在位于多媒体库中。这是代码:
QSound::play("small_wave_file.wav");
对于我的大多数波形文件,这工作得很好;但是,对于我的波形文件(采样率为 44100Hz)它不起作用。
官方 QT 错误可以在这里找到。
更新:此错误已在 qt 5.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 有几个不同的声音播放 API。对于具有较低延迟的小文件播放,我发现这要快得多: http ://doc.qt.io/qt-5/qsoundeffect.html#details