Rating@Mail.ru
IPB
Etersoft - from Windows to Linux
Etersoft
решения для перехода
с Windows на Linux
Дружественные сайты: alv.me и Rus-Linux.net

Здравствуйте, гость ( Вход | Регистрация ) Поиск · 

> 

Приглашаем вас в jabber-конференцию о питоне на pythonua@conference.jabber.ru :)
Темы от студентов с запросами готовых решений по заданиям зарываются не глядя.

 
Reply to this topic Start new topic
> [РЕШЕНО] Звук в Qt, как вывести звук на каналы с разной частотой
devilr
bookmark
gyfbbdvkffmrljmmmwd
Jul 16 2017, в 17:50
Сообщение #1


Коренной житель
Иконка группы

Сообщений: 863

Вставить имя   :   Цитата

ОС: Mandriva => Gentoo (~amd64)

Группа: Участники

Автор темы
Доброго времени суток!
Понадобилось решение вывести звук посредством Qt. Причем так, чтобы (к примеру) на левом канале была частота 200, а на правом 400 герц.
Да, есть родной пример Qt, который может выводить звук произвольной частоты.
Но, он выдает одновременно на оба канала.
Модификация кода ничего не дает (возможно, что я просто криворукий).

Может быть кто нибудь делал подобное?


--------------------
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Go to the top of the page
 
+Quote Post
NickLion
bookmark
gyfbbdvkffmrljmmmwd
Jul 16 2017, в 18:10
Сообщение #2


аватар-невидимка
Иконка группы

Сообщений: 3032

Вставить имя   :   Цитата

ОС: openSUSE Tumbleweed x86_64
Город: Львів

Группа: Участники

1. Вы уверены, что не воспроизводится? 400Hz будут немного "глушить" 200Hz. Пробовали взять, к примеру, 333Hz и 400Hz?
2. Попробую чуть позже. А какой пример использовался?
Go to the top of the page
 
+Quote Post
devilr
bookmark
gyfbbdvkffmrljmmmwd
Jul 16 2017, в 18:19
Сообщение #3


Коренной житель
Иконка группы

Сообщений: 863

Вставить имя   :   Цитата

ОС: Mandriva => Gentoo (~amd64)

Группа: Участники

Автор темы
Цитата(NickLion @ Jul 16 2017, в 19:10) *
1. Вы уверены, что не воспроизводится? 400Hz будут немного "глушить" 200Hz. Пробовали взять, к примеру, 333Hz и 400Hz?
2. Попробую чуть позже. А какой пример использовался?

Ну, я человек простой. Я загулил слово QAudioOutput и взял пример из документации (audiooutput).
Скомпилировал. Услышал звук.
Попробовал изменить частоту. Работает.
Теперь попытался изменить код в Generator::generateData... и не получается. Т.е. звук получается просто мишированным, если предполагать, что в m_buffer каналы располагаются последовательно.
P.S. Насчет "глушить" - я делал проще. 200 и 400 герц на слух вполне различимы. Особенно, если слушать попеременно одним и вторым ухом.
А тишину (т.е. 0 и 400 герц) я бы точно различил. smile.gif


--------------------
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Go to the top of the page
 
+Quote Post
Bizdelnick
bookmark
gyfbbdvkffmrljmmmwd
Jul 16 2017, в 18:28
Сообщение #4


grammatikführer
Иконка группы

Сообщений: 12571

Вставить имя   :   Цитата

ОС: Debian GNU/Linux
Город: Санкт-Петербург

Группа: Модераторы разделов

Цитата(devilr @ 16th July 2017 - в 18:19) *
200 и 400 герц на слух вполне различимы.

Всё же я соглашусь с NickLion, что лучше брать нерезонансные частоты.


--------------------
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
пожалуйста
приемлемо
проблема
пробовать
трафик
Go to the top of the page
 
+Quote Post
devilr
bookmark
gyfbbdvkffmrljmmmwd
Jul 16 2017, в 18:47
Сообщение #5


Коренной житель
Иконка группы

Сообщений: 863

Вставить имя   :   Цитата

ОС: Mandriva => Gentoo (~amd64)

Группа: Участники

Автор темы
0 и 200 еще более различимы smile.gif
И 200 и 400 взяты с потолка.


--------------------
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Go to the top of the page
 
+Quote Post
NickLion
bookmark
gyfbbdvkffmrljmmmwd
Jul 16 2017, в 23:18
Сообщение #6


аватар-невидимка
Иконка группы

Сообщений: 3032

Вставить имя   :   Цитата

ОС: openSUSE Tumbleweed x86_64
Город: Львів

Группа: Участники

У меня всё работает. Показывайте, что меняли.
Go to the top of the page
 
+Quote Post
devilr
bookmark
gyfbbdvkffmrljmmmwd
Jul 16 2017, в 23:36
Сообщение #7


Коренной житель
Иконка группы

Сообщений: 863

Вставить имя   :   Цитата

ОС: Mandriva => Gentoo (~amd64)

Группа: Участники

Автор темы
Ну я предположил, что изменив функцию generateData в классе Generator, добьюсь нужного.
Было предположение, что в 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 - просто флаг для включения/выключения звука. Да, говнокод, но, если заработает - можно будет переписать по-нормальному.
Не заработало...


--------------------
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Go to the top of the page
 
+Quote Post
NickLion
bookmark
gyfbbdvkffmrljmmmwd
Jul 16 2017, в 23:58
Сообщение #8


аватар-невидимка
Иконка группы

Сообщений: 3032

Вставить имя   :   Цитата

ОС: openSUSE Tumbleweed x86_64
Город: Львів

Группа: Участники

Я делал так, если что:
Код
        for (int i = 0; i < format.channelCount(); ++i) {
            const qreal x = qSin(2 * M_PI * (i ? sampleRate2 : sampleRate1) * qreal(sampleIndex % format.sampleRate()) / format.sampleRate());


Но попробовал сделать так, работает только один канал. Снова УМВР.


Спасибо сказали:
Go to the top of the page
 
+Quote Post
devilr
bookmark
gyfbbdvkffmrljmmmwd
Jul 17 2017, в 00:10
Сообщение #9


Коренной житель
Иконка группы

Сообщений: 863

Вставить имя   :   Цитата

ОС: Mandriva => Gentoo (~amd64)

Группа: Участники

Автор темы
Да, так работает!
Воистину: век живи - век учись!
Спасибо за помощь!


--------------------
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Go to the top of the page
 
+Quote Post

 Reply to this topic Start new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 26th July 2017 - в 03:30




Rating@Mail.ru