Доброго времени суток!
Понадобилось решение вывести звук посредством Qt. Причем так, чтобы (к примеру) на левом канале была частота 200, а на правом 400 герц.
Да, есть родной пример Qt, который может выводить звук произвольной частоты.
Но, он выдает одновременно на оба канала.
Модификация кода ничего не дает (возможно, что я просто криворукий).
Может быть кто нибудь делал подобное?
[РЕШЕНО] Звук в Qt (как вывести звук на каналы с разной частотой)
Модератор: Модераторы разделов
Re: [РЕШЕНО] Звук в Qt
1. Вы уверены, что не воспроизводится? 400Hz будут немного "глушить" 200Hz. Пробовали взять, к примеру, 333Hz и 400Hz?
2. Попробую чуть позже. А какой пример использовался?
2. Попробую чуть позже. А какой пример использовался?
Re: [РЕШЕНО] Звук в Qt
Ну, я человек простой. Я загулил слово QAudioOutput и взял пример из документации (audiooutput).
Скомпилировал. Услышал звук.
Попробовал изменить частоту. Работает.
Теперь попытался изменить код в Generator::generateData... и не получается. Т.е. звук получается просто мишированным, если предполагать, что в m_buffer каналы располагаются последовательно.
P.S. Насчет "глушить" - я делал проще. 200 и 400 герц на слух вполне различимы. Особенно, если слушать попеременно одним и вторым ухом.
А тишину (т.е. 0 и 400 герц) я бы точно различил.
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: [РЕШЕНО] Звук в Qt
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: [РЕШЕНО] Звук в Qt
0 и 200 еще более различимы
И 200 и 400 взяты с потолка.
И 200 и 400 взяты с потолка.
Re: [РЕШЕНО] Звук в Qt
У меня всё работает. Показывайте, что меняли.
Re: [РЕШЕНО] Звук в Qt
Ну я предположил, что изменив функцию generateData в классе Generator, добьюсь нужного.
Было предположение, что в m_buffer накапливаются данные синусоиды. Каналов 2, ширина данных 16 бит - получается, что вначале (допустим) в нем 2 байта значения амплитуды одного канала, затем то же самое с другим каналом.
Сделал просто (ожидая тишины в одном канале, для простоты):
Настройки в audioinput.cpp
generator.cpp
где flag - просто флаг для включения/выключения звука. Да, говнокод, но, если заработает - можно будет переписать по-нормальному.
Не заработало...
Было предположение, что в m_buffer накапливаются данные синусоиды. Каналов 2, ширина данных 16 бит - получается, что вначале (допустим) в нем 2 байта значения амплитуды одного канала, затем то же самое с другим каналом.
Сделал просто (ожидая тишины в одном канале, для простоты):
Настройки в audioinput.cpp
Код: Выделить всё
m_format.setSampleRate(DataSampleRateHz);
m_format.setChannelCount(2);
m_format.setSampleSize(16);
m_format.setCodec("audio/pcm");
m_format.setByteOrder(QAudioFormat::LittleEndian);
m_format.setSampleType(QAudioFormat::SignedInt);
generator.cpp
Код: Выделить всё
else if (format.sampleSize() == 16 && format.sampleType() == QAudioFormat::SignedInt)
{
//---
flag = !flag;
if(flag)
x = 0;
//---
qint16 value = static_cast<qint16>(x * 32767);
if (format.byteOrder() == QAudioFormat::LittleEndian)
qToLittleEndian<qint16>(value, ptr);
else
qToBigEndian<qint16>(value, ptr);
}
где flag - просто флаг для включения/выключения звука. Да, говнокод, но, если заработает - можно будет переписать по-нормальному.
Не заработало...
Re: [РЕШЕНО] Звук в Qt
Я делал так, если что:
Но попробовал сделать так, работает только один канал. Снова УМВР.
Код: Выделить всё
for (int i = 0; i < format.channelCount(); ++i) {
const qreal x = qSin(2 * M_PI * (i ? sampleRate2 : sampleRate1) * qreal(sampleIndex % format.sampleRate()) / format.sampleRate());
Но попробовал сделать так, работает только один канал. Снова УМВР.
Спасибо сказали:
Re: [РЕШЕНО] Звук в Qt
Да, так работает!
Воистину: век живи - век учись!
Спасибо за помощь!
Воистину: век живи - век учись!
Спасибо за помощь!