![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
planer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.3.2005 Репутация: нет Всего: нет |
Товарищи, какой параметр используется для визуализации звука, т.е. для построения графика (например, как в винампе)?
И как мне этот параметр получить, если воспроизводить звук с помощью DirectSound/DirectShow или еще чего-нить в этом роде. Заранее благодарю. |
|||
|
||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: нет Всего: 54 |
Очевидно, для визуализации требуется не параметр, а либо последовательный (поточечный) вывод на экран каждого значения дискреты, либо Фурье анализ.
СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: нет Всего: 164 |
Модератор: перенесено из С++: Общие вопросы
Да, т.е. ты просто приводишь значения звуковой волны к экранным координатам и выводишь по ним , точки, столбики и т.д.. --------------------
|
|||
|
||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: нет Всего: 54 |
только именно значения каждой дискреты
![]() СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
BBC |
|
|||
Unregistered |
Точки, соответствующие амплитудам вы то выведете, вопрос как их соединить прямыми линиями(аппроксимировать), что бы не потерять форму огибающей. Уж точно не прямыми.
|
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: нет Всего: 164 |
Кривые Безье? Это сообщение отредактировал(а) chipset - 29.3.2005, 19:11 --------------------
|
||||
|
|||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: нет Всего: 54 |
до аппроксимаций не дойдет, даю 100%. Вы аппруксимируя делаете лишнюю работу, т.к. выше частоты дискретизации не прыгнешь.
А соединить точечки палочками - в раздел "архиважных и архисложных задач" ![]() СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
BBC |
|
|||
Unregistered |
По-моему PILOT пишет о визуализации спектра. Тогда все нормально. А если необходимо отобразить форму сигнала, как в осциллографе,то... Выведите амплитуды например гармонического сигнала и посмотрите на то, что получится. А если еще сделать шаг между отсчетами больше единицы - для того, чтобы развернуть сигнал и получится набор точек, которые сразу же захочется соединить для нормального отображения .
|
|||
|
||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: нет Всего: 54 |
ВВС, я описал как вывод спектра, так и сигнал во времени.
А лишнюю работу по аппроксимации никто не делает (см. CoolEdit, SoundForge). СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
BBC |
|
|||
Unregistered |
Если кто то не видел CoolEdit рассказываю. Открываем любой файл формата Microsoft PCM, и видим точки, соответствующие значениям амплитуды, записанные в файле и соединенные чем? Разверните по шире и посмотрите. Каким образом это делается?
|
|||
|
||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: нет Всего: 54 |
BBC, значение(я?) амплитуды и значение дискреты разные вещи все-таки.
Зачем делать лишнюю работу по аппроксимации? Кто может гарантировать, что полученный аппроксимацией образ соответсвует действительности? А если на входе был сигнал (звук) выше частоты дискретизации (взятой к примеру 6кГц, как в телефоне)? Тогда ваш метод будет вообще некорректен. СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
planer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.3.2005 Репутация: нет Всего: нет |
Ну прежде всего спасибо за активное участие.
То как соединить точки - с этим я разберусь. Главная "трабла" - это как получить сами точки, т.е. как с помощью С++.net (через DirectX или еще как... я-то не знаю) получить значения амплитуды (или дискреты) проигрываемого мной файла? Причем требуется знать эти значения немного наперед (на 0,1сек; на 1сек; - это не особо важно - как получится). |
|||
|
||||
BBC |
|
|||
Unregistered |
А кто же подает на звуковую плату сигнал выше половины частоты дискретизации? Я почему активно муссирую эту тему. У меня задача наиболее точно передать форму записываемого сигнала. Например синусоиды. Отчеты амлитуды из файла я на экран вывожу, но мне неоходимо видеть огибающую полностью, причем с возможностью менять ширину развертки, как в CoolEdite. Для этого необходимо соединить каким то образом выведенные точки. Я пробовал аппроксимировать - получаю хоть и небольшие, но заметные искажения. Тут мне подсказали применить цифровой НЧ фильтр. Может кто выскажется на эту тему или подскажет алгоритм цифровой фильтрации?
planer - если приложение не открывает файл в монопольном режиме читай из файла и выводи, причем наперед хоть на минуту. А если это твое приложение то у тебе, как говорится и все флаги открытия файла в руки. |
|||
|
||||
SLAMER |
|
|||
Unregistered |
Товарищи, я понимаю все умные, а мы тупые.
Дайте пожалуйста кусок кода который читает из файла эти значения |
|||
|
||||
Guest |
|
|||
Unregistered |
SLAMER - даю куски функций, кода под рукой нет. Остальное найдешь в инете или MSDN.
CreateFile() ReadFile() CloseFile() |
|||
|
||||
Guest |
|
|||
Unregistered |
Хотя CloseFile() погорячился, правильно CloseHandle()
|
|||
|
||||
planer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.3.2005 Репутация: нет Всего: нет |
BBC
Файл нормально открывается. Проблема заключается в том как именно извлечь из него информацию об амплитуде сигнала в конкретный момент времени. Объясните пожалуйста кто-нибудь популярно, как извлечь из файла (например из D:\1.mp3) амплитуду сигнала в конкретный момент времени. Приведите конкретный пример, а там уж я думаю, я разберусь. |
|||
|
||||
BBC |
|
|||
Unregistered |
Из mp3 по-моему никак. Из wav без проблем указанным выше способом. На сколько я знаю плеер mp3 переводит звук сначала в wav (Microsoft PCM) а потом кидает на звуковуху. Вот там он амплитуды для визуализации и достает.
|
|||
|
||||
PILOT |
|
||||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: нет Всего: 54 |
Ты и подаешь... любой подает, когда записывает, но то что выше половины частоты дискретизации "уходит в гудок". СУВ. Добавлено @ 19:21
Собственно, метод скользящей медианы (заданной степени вложенности)... и иже с ними... СУВ. -------------------- тут могла быть Ваша реклама... |
||||
|
|||||
Guest |
|
|||
Unregistered |
А это еще что за зверь? Можно по подробнее? И этот метод точно воспроизведет огибающую или с каким то приближением? |
|||
|
||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: нет Всего: 54 |
Это фильтр высоких частот...
![]() СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
Guest |
|
|||
Unregistered |
По моему ты хотел сказать нижних. Частота среза половина частоты дискретизациии.
Вот это я завтра и попробую. А метод скользящей медианы, я уже прочитал - "Сглаживание скользящей медианой позволяет удалить отдельные пиковые выбросы" , а мне их надо максимально точно отобразить. |
|||
|
||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: нет Всего: 54 |
Тогда дифференцируй, получишь фильтр НЧ, а скользящая медиана это фильтр ВЧ (потому что почти интеграл).
СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
planer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.3.2005 Репутация: нет Всего: нет |
BBC и остальные
а как хотя бы из wav файлов получать амплитуду? Хотябы функции скажите, а еще лучше приведите кусок кода. |
|||
|
||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: нет Всего: 54 |
planer,
поиском не пробовал? http://graphics.cs.msu.ru/courses/cg02b/as...elp/wavfmt2.htm http://www.win98.ru/manual/programming/Vis.../waveformat.htm http://www.codenet.ru/progr/audio/sbprot.php#part_3 СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
BBC |
|
|||
Unregistered |
Ну с интегралом конечно не поспоришь, но при чем здесь фильтр ВЧ? Мне что низшие гармоники отфильтровывать надо? Сглаживает как раз фильтр НЧ, за счет удаления высших гармоник. Ты сам то "Сглаживание скользящей медианой" делал?
|
|||
|
||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: нет Всего: 54 |
Хм...что-то ты совсем запутался...
Для того чтобы убрать ВЧ составляющую используй метод скользящей медианы (сумма нескольких последних значений деленная на кол-во просуммированых элементов), для того, чтобы убрать НЧ составляющую используй дифференцирование (в самом простом случае разница между соседними точками).
![]() СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
BBC |
|
|||
Unregistered |
planer,
В этих ссылках все, что нужно имеется. А дальше просто читай из файла, там записаны именно значения амплитуд, приводи их к размеру твоего экранчика и рисуй. Для проверки открой в CoolEdite тот же wav файл, проще для начала 8 битный моно, разверни его, найди самую первую точку, при щелчке мышью она покажет амплитуду. Далее открой файл в каком нибудь редакторе в бинарном виде, поставь указатель на 44 байта (сразу после заголовка) и посмотри следующий байт. Переведи его из 16-ричной в десятичную - значения должны совпасть. А дальше сделай это программно. Читать из файла надеюсь умеешь, иначе все это я объяснял зря. Если хочешь спектр ищи алгоритм БПФ. Спектр даже покрасивей выглядит, но придется разбираться с преобразованием Фурье. |
|||
|
||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: нет Всего: 54 |
Программно переводить из hex в dec? Ого! А нафига? Нафига переводить то? СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
BBC |
|
|||
Unregistered |
PILOT
Теперь я понял, что ты предлагаешь - это не лишено смысла и в winampe на маленьком экранчике будет нормально выглядеть. У меня же экранчик довольно большой и выводятся туда гармонические сигналы, где малейшие искажения сразу видны. А по состоянию сигнала оператор принимает решение о работоспособности аппаратуры. По этому я повторюсь мне необходима точная передача сигнала. А для того, чтобы отфильтровать ВЧ необходимо разложить в спектр, выкинуть все гармоники выше необходимой частоты среза и собрать обратно. |
|||
|
||||
Guest |
|
|||
Unregistered |
Читать надо внимательно - чтобы сравнить со значением в CoolEdite. Так мне кажется проще всего разобраться с форматом |
|||
|
||||
BBC |
|
|||
Unregistered |
planer -
Добрался до амплитуд? |
|||
|
||||
ИИС |
|
|||
Unregistered |
Все получилось как нельзя лучше. Мысль у меня была правильной! От отсчета до отсчета строю прямоугольные импульсы, получаю огибающую с прямоугольными вершинами. А дальше цифровой НЧ фильтр с частотой среза SampleRate/2 и получаю идеально ровную изначальную синусоиду. Аж сам не поверил!
PILOT- совет: сначала сам попробуй, а потом предлагай. Твои предложения не имеют абсолютно ни какой корреляции с моей реальной задачей. Не веришь, возьми из WAV с SampleRate==11025 аплитуды синусоиды 4300 кГ , примени как ты называешь ИНТЕГРИРОВАНИЕ ![]() |
|||
|
||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: нет Всего: 54 |
Ну изначальную синусоиду ты не получил, и не получишь - фильтр фазу крутанет.
ИИС: винить кого-то в том что ты не смог воспользоваться тем что тебе советовали никого не нужно. СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
BBC |
|
|||
Unregistered |
PILOT-
Это я в эйфории победы, так что извини. Конечно это не изначальный сигнал, но моей цели полностью удовлетворяет. А так за общение спосибо, было интересно - честно! |
|||
|
||||
protivnik_sleva |
|
|||
Unregistered |
![]() ![]() ![]() да, действительно как рисовать вроде понятно... а вот откуда брать значения амплитуды??? хочу тоже кулэдитовскую такую волну красивую, но из mp3шки напрямую!!! не декодируя... или это бред? вроде mp3DirectCut быстренько так всё режет... |
|||
|
||||
Guest |
|
|||
Unregistered |
А на наших компах все так быстренько и работает. Вот лет пять назад подождать нужно было.
Я с mp3 не разбирался, но на сколько знаю звук там хоть и упакованный, но блоками. Можно даже проверить - резануть кусок файла, он все равно играет. А посему читаешь блок, преобразуешь порцию и вперед. Кстати исходники конвертеров wav-mp3 и обратно в инете встречал, но сам не разбирался, посему дальше не подскажу. А по wav если чего там не клеится спрашивайте, чего знаю, подскажу. |
|||
|
||||
BBC |
|
|||
Unregistered |
Прошу прощения подписаться забыл: -BBC- |
|||
|
||||
PILOT |
|
|||
![]() производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: нет Всего: 54 |
Конечно блоками, т.к. функция (последовательность дискрет) аппроксимирована рядом Фурье, естественно хранить коэффициенты этой аппроксимации гораздо приятней.
Ну и само собой, что всю последовательность дискрет не аппроксимируешь, поэтому аппроксимируют кусками... но тут возникает оооочень неприятная вещь... а именно склейка, в местах соединения кусков не должно быть резких скачков, иначе получается "клик". С этим борются кросс-фейдом. Итог: формат mp3 простой формат - последовательность коэффициентов и параметров, но где в файле какие разделы я не знаю. СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
planer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.3.2005 Репутация: нет Всего: нет |
Товарищи, возникла новая проблема
![]() Я с помощью Direct Show выстраиваю ряд фильтров для проигрывания двух файлов (Mp3) source filter1---> MPEG-I Stream Splitter1--->MPEG Layer-3 Decoder1--->Default DirectSound Device1 source filter2---> MPEG-I Stream Splitter2 ---> MPEG Layer-3 Decode2--->Default DirectSound Device2 причем поскольку файла у меня 2, то и графа с набором таких фильтров 2. Если просто так запустить оба графа, то все нормально проигрывается, но если начать регулировку громкости, то появляются проблемы: т.е. если громкость неодинаковая, то воспроизведение сопровождается щелчками (шуршанием). Я так полагаю, что проблема состоит в том, что они поочередно перехватывают друг у друга устройство воспроизведения (что и вызывает щелчки). Подскажите, плиз, как построить фильтры так, чтобы было что-то типа: source filter1 ---> MPEG-I Stream Splitter1 ---> MPEG Layer-3 Decoder1 ---> Default DirectSound Device source filter2 ---> MPEG-I Stream Splitter2 ---> MPEG Layer-3 Decoder2 Т.е. чтобы сначала файлы декодировались и ОБЪЕДИНЯЛИСЬ, а затем отправлялись на воспроизведение. (Понятное дело, что фильтры должны быть не обязательно такими, главное - чтобы Mp3 читали) Кстати, возможно я и не прав с причиной неполадок, так что сами понимаете, что я от вас еще хочу... Это сообщение отредактировал(а) planer - 6.4.2005, 10:35 |
|||
|
||||
Visitor |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 29.5.2006 Репутация: нет Всего: нет |
Всем привет.
Простите, что это не ответ на ваш вопрос, а есть сам вопрос но дело вот в чем: Стоит задача, написать программу которая анализирует wav с помощью Фурье (построения графика). Подскажите пожалуста, где можно найти книгу по визуализации звука желательно с 0? В принципе теорию я понял, а вот что касается написания программы - вот тут я и застрял. Причем получении звуковых данных из файла дело простое, а вот манипуляция с данными (БФП или ДПФ) - я никак освоить не могу. Всем заранее спасибо, Visitor. |
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |