Захват звука со звуковой карты в реальном времени.

Что бы еще такого сделать?... Предлагайте! Обсудим все!!!
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Сообщение B@R5uk »

Вопрос, пожалуй совсем не в тему сайта, но всё-таки возможно кто-то имел опыт и подскажет/ткнёт носом куда копать.

Хочу написать на С++ прогу, которая в реальном времени будет захватывать звук, подаваемый на звуковую карту (меандр), опредлять его частоту и строить графики частоты и (ВНИМАНИЕ!!!) фазы (поэтому необходимо, чтобы звук захватывался без малейших пропусков).

Математический аппарат уже разработан, опыт в программировании у меня есть, загвоздка только в одном. Функции каких библиотек надо использовать, чтобы заведомо не напоросться ни на какие гадости?

Заранее спасибо.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 540
Зарегистрирован: Пт фев 20, 2009 12:26:26

Сообщение Yftul »

Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Сообщение B@R5uk »

Ээээммм... Я собрался писать "под виндоувс" для ПК свою программулину.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

К чему тут ОС реального времени? Со звуковой даже винда справиться - тому множество примеров, от штатных средств до серьезных коммерческих программ.
А использовать, как ни странно, функции api... Либо обертку вокруг них в виде класса, если кто то ее сделал...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 540
Зарегистрирован: Пт фев 20, 2009 12:26:26

Сообщение Yftul »

Goodefine писал(а):К чему тут ОС реального времени?
B@R5uk писал(а):необходимо, чтобы звук захватывался без малейших пропусков
Либо меняйте условия, либо курите в сторону ОСРВ.
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

Yftul писал(а):
B@R5uk писал(а):необходимо, чтобы звук захватывался без малейших пропусков
Либо меняйте условия, либо курите в сторону ОСРВ.
"Малейшие" пропуски" - это техническая характеристика?
Почти каждая карточка умеет оцифровывать под 192к выборок в секунду, что почти в 10 раз больше, чем верхняя граничная частота звукового диапазона. Если этого недостаточно, то звуковая тут явно не в тему, независимо от ОС. Или qnx умеет улучшать аппаратные характеристики? Ведь не винда же лично оцифровывает... Только из буфера выгребает. И надо уж очень постараться, чтоб не успела до переполнения оного...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 540
Зарегистрирован: Пт фев 20, 2009 12:26:26

Сообщение Yftul »

Автор пишет что ему нужно очень точно измерять фазу. Гарантии этого винда дать не может. Разговор может лишь идти о вероятности при определенных условиях.

ЗЫ: Может человек атомный реактор проектирует(судя по ИД), не боитесь, что из-за Вас произойдет очередной Чернобыль? :P
Собутыльник Кота
Аватара пользователя
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Сообщение B@R5uk »

Goodefine писал(а):...Ведь не винда же лично оцифровывает... Только из буфера выгребает. И надо уж очень постараться, чтоб не успела до переполнения оного...
Именно! Мне это необходимо, и этого достаточно. Не спутники ж в космос запускать. Проблема в том, что я не знаю точно, как это реализовать. Вот тут замечательная статья на эту тему для начинающих, жаль только не заострён вопрос на тему циклического последовательного заполнения двух буферов без простоев АЦП звуковухи.

Походу я совсем ошибся адресом с этим вопросом. Ну да ладно, попробую поискать решения сам.
Поставщик валерьянки для Кота
Сообщения: 2108
Зарегистрирован: Пт авг 29, 2008 16:28:19
Откуда: Киев

Сообщение Foks »

Использовать DirectSound - логичное решение, и в статье азы описаны, а зачем Вам два буфера и в чем конкретно состоит вопрос?
------
Add:
А, ну да, там не описано как ввести буфер в режим циклической записи либо циклического воспроизведения.
http://www.helloworld.ru/texts/comp/gam ... /index.htm - описание API всего этого дела (ссылку нагуглил)
Можно пошаманить и попытаться сделать самому (я когда-то именно так и делал), либо еще погуглить и найти простейшие рабочие примеры реализации.
Giggity giggity goo!
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

Yftul писал(а):Автор пишет что ему нужно очень точно измерять фазу. Гарантии этого винда дать не может...:P
Снова "очень точно"... Причем здесь винда вообще непонятно...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Вымогатель припоя
Аватара пользователя
Сообщения: 540
Зарегистрирован: Пт фев 20, 2009 12:26:26

Сообщение Yftul »

Автор не дает точных критериев оценки качества захвата звука, кроме
B@R5uk писал(а):Хочу написать на С++ прогу, которая в реальном времени будет захватывать звук, подаваемый на звуковую карту (меандр), опредлять его частоту и строить графики частоты и (ВНИМАНИЕ!!!) фазы (поэтому необходимо, чтобы звук захватывался без малейших пропусков).
Исходя из этого, ему требуется операционная система, гарантирующая некоторое время реакции на событие, к примеру на смену указателя на буфер :). То есть винда ему не подходит.

Конечно скорее всего все не настолько критично и автор просто сам не понимает что точно он хочет, но мы ведь хотим ему помочь в рамках им выданных ИД, не так ли :wink:
Собутыльник Кота
Аватара пользователя
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Сообщение B@R5uk »

Foks писал(а):...а зачем Вам два буфера?..
Ну, на сколько я себе представляю это дело в общих чертах, звуковуха будет оцифровывать звук в один буфер, в то время как прога будет обсчитывать данные второго. Время, необходимое для обсчёта данных, меньше, чем время, необходимое для заполнения буфера, поэтому накладок быть не должно, и ещё остаётся куча времени для других процессов. По заполнении первого буфера звуковуха не прерываясь должна перейти к заполнению второго и сообщить проге, что она может обрабатывать первый. В реализации этого момента у меня загвоздка. В принципе, для компа есть куча гитарных процессоров, использующие этот момент, да и фирменные программы типа Acid Pro этим тоже пользуются.
Foks писал(а):...и в чем конкретно состоит вопрос?..
Хочу сделать высокоточный частотомер с графиком фазы. По расчётам для частот порадка 10-18кГц, даже с такой низкой частотой дискретизации, как 48 кГц, можно добиться относительной точности определения частоты порадка 2*10^-6 за промежуток времени в 0,1 секунды (естественно без учёта того, на сколько "хорошо кварцована" частота звуковухи). Надо только грамотно обсчитать полученные данные. Я уже года два программирую (а точнее считаю) только в матлабе, под винду прогал очень мало (лучшее, что сделал — обсчёт МНК с графиком и игра жизнь), много — под дос в борланде 3.1, поэтому MS Visual C++ надо практически заново осваивать.
Foks писал(а):http://www.helloworld.ru/texts/comp/games/dsound/dsound/index.htm - описание API всего этого дела (ссылку нагуглил)
Обалденная статья!!! Подробная документация да ещё и на русском! Огромное спасибо. Засейвил =)))
Foks писал(а):...либо еще погуглить и найти простейшие рабочие примеры реализации.
Это было бы полная нирвана...

З.Ы. Yftul :P
Вымогатель припоя
Аватара пользователя
Сообщения: 540
Зарегистрирован: Пт фев 20, 2009 12:26:26

Сообщение Yftul »

B@R5uk писал(а):З.Ы. Yftul :P
Учимся правильно давать ИД и составлять ТЗ :P
Ответить

Вернуться в «Умные мысли»