2014-01-23 88 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

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

相關問題