我正在将基于QT4.X的应用迁移到QT5。 QT5中已删除了声子支持,因此我更改了播放wave文件的代码以使用QSound。
变化非常简单。我只需要使用QSound,它现在位于多媒体库中。这是代码:
QSound::play("small_wave_file.wav");
对于我的大多数wave文件,这很好用;但是,对于我的波形文件(采样率为44100Hz),它不起作用。
可以找到官方QT错误here。
更新:此错误已在qt 5.1中修复
答案 0 :(得分:2)
事实证明,一些wave文件混淆了QSound。仍然不确定究竟是什么导致了这个问题。当我在Audacity中加载我的wave文件,然后将其导出回不同的wave文件而没有任何更改(相同的采样率......)。 QSound播放文件很好。
在MacOSX中,当我在有问题的波形文件上单击“获取信息”时,波形文件中的常规波形信息记录不可用;所以也许QSound无法从中获取采样率信息;并且因为它不知道波形文件的样本速率是多少?
有趣的是,iTunes播放原始文件很好,并且它以某种方式具有正确的采样率。 Phonon也常常播放原始文件。
无论如何,希望这对一些有QSound :: play()方法问题的人有所帮助。
更新:由于QSound :: play()在mac上非常错误,我选择使用本机NSSound从mac上的QT应用程序播放我的wave文件。这是代码:
void play_sound( const char* file)
{
NSSound *sound = [[NSSound alloc] initWithContentsOfFile:[NSString stringWithUTF8String:file] byReference:NO];
[sound play];
[sound release];
}
答案 1 :(得分:0)
另请注意,Qt有几种不同的声音播放API。对于延迟较低的小文件播放,我发现这要快得多: http://doc.qt.io/qt-5/qsoundeffect.html#details