2014-01-23 12 views
0

Qt 5.1 или новее:Воспроизвести уведомление (частота х) в Qt - проще всего?

Мне нужно воспроизвести звуковой сигнал уведомления частоты x за миллисекунды. Было бы неплохо, если бы я мог сочетать такие звуки: 1000 Гц в течение 2 секунд, затем 3000 Гц в течение 1 секунды, ...

Самый простой способ - использовать файлы (WAV, MP3, ..), например. как описано здесь: How to play sound with Qt Но тогда мне нужно сгенерировать такие файлы для каждого из моих сценариев.

Qt's audio output example генерирует такие тоны в памяти (Generator::generateData(const QAudioFormat &format, qint64 durationUs, int sampleRate)). Я мог бы написать такой генератор для своей цели. Но мне нужно?

Итак, что является самым простым способом просто воспроизводить частоту x за миллисекунды?

ответ

1

Чтобы сформировать тон в Qt, мы можем передать собственный QBuffer в QAudioOutput для воспроизведения.

Посмотрите на first example на странице QAudioOutput.

То, что я сделал, это создать мою форму волны в 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; 
} 

Тогда мы можем взять этот буфер и сделать что-то вроде этого, чтобы играть:

// Make a QBuffer from our QByteArray 
QBuffer* input = new QBuffer(bytebuf); 
input->open(QIODevice::ReadOnly); 

// Create an output with our premade QAudioFormat (See example in QAudioOutput) 
QAudioOutput* audio = new QAudioOutput(format, this); 
audio->start(input); 

Если вам нужно больше примеров кода , вы можете увидеть, как я это сделал в небольшом проекте, который только что начал here.

1

Вы можете использовать пакет "window.h" (а не QT). Затем вы просто используете звуковой сигнал (частота, милисекунды). Для вашего примера это должен быть звуковой сигнал (1000,2000) и звуковой сигнал (3000,1000) соответственно.

+1

Хороший и верный намек, но мне нужно запустить приложение на разных ОС. –

 Смежные вопросы

  • Нет связанных вопросов^_^