2014-01-23 63 views
0

Qt 5.1或更高版本:在Qt中播放通知(频率x)声音 - 最简单的方法?

我需要播放频率为x的通知声音n毫秒。如果我可以合并这样的音调也是很好的:1000Hz的2秒,然后3000Hz的1秒,..

最简单的方法是使用文件(WAV,MP3,..),例如,如下所述:How to play sound with Qt但是我必须为每个场景生成这样的文件。

Qt's audio output example在存储器中产生这样的音调(Generator::generateData(const QAudioFormat &format, qint64 durationUs, int sampleRate))。我可以为我的目的写一个这样的发电机。但是,我必须?

那么在n毫秒内只播放频率x最简单的方法是什么?

回答

1

要在Qt中生成一个音调,我们可以将我们自己的QBuffer传递给QAudioOutput来播放。

请查看QAudioOutput页面上的first example

我所做的是在QByteArray中创建我的波形。 记住sin(2 * pi * frequency * i/sample_rate)会给你所需频率的罪口气:

#define FREQ_CONST ((2.0 * M_PI)/SAMPLE_RATE) 

QByteArray* bytebuf = new QByteArray(); 
buf->resize(seconds * SAMPLE_RATE); 

for (int i=0; i<(seconds * SAMPLE_RATE); i++) { 
    qreal t = (qreal)(freq * i); 
    t = t * FREQ_CONST; 
    t = qSin(t); 
    // now we normalize t 
    t *= TG_MAX_VAL; 
    (*bytebuf)[i] = (quint8)t; 
} 

然后我们可以将该缓冲区做这样的事情,以发挥它:

​​3210

如果您需要更多的示例代码,你可以看到我在一个小项目中做了些什么,我刚刚开始here

1

你可以使用“window.h”包(不是QT)。 然后,您只需使用哔声(频率,毫秒)。 对于您的示例,它应该分别是嘟嘟声(1000,2000)和嘟嘟声(3000,1000)。

+1

好的和有效的提示,但我需要在不同的操作系统上运行应用程序。 –

相关问题