Модераторы: Alexeis
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C,C++,C#,Delphi] Написать фильтр частот, Фильтр частот 
:(
    Опции темы
Nikolaiko
Дата 10.6.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 25.5.2007

Репутация: нет
Всего: нет



Здравствуйте. 
Мне нужно написать фильтр частот звукового сигнала.
Подробнее:
На вход компьютера будет подоваться звук в реальном времени. Например несложная мелодия с гитары. На одной струне. Нужно написать программу:
1. В которой можно задать диапазон частот которые нужно отсечь. Или наоборот задать те которые пропускать.
2. Эта программа будет принимать подающийся звук и воспроизводить его отсекая указанные частоты. 
3. Возможно если опция выбрана, то получающийся в результате отсчения звук - записывать. В файл.

Вопросы:
1. Какой язык выбрать? 
2. Какие функции использовать для этого?
3. Есть ли примеры (исходники) таких или похожих программ?

Я писал на С,С++,С# и Pascal (Object Pascal).  Но я никогда не работал со звуком, тем более с его записью или фильрацией.
PM MAIL   Вверх
black_priest
Дата 24.6.2007, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 19.3.2007
Где: Minsk

Репутация: нет
Всего: нет



Я для таких целей использовал бы (и использую) функции из Waveform Audio API (Mmsystem.h). С их помощью получаешь буфер, заполненный твоими оцифрованными звуковыми данными. А дальше цифровая обработка сигналов. Тут вариантов много, КИХ, БИХ фильтры, преобразования Фурье. Вобщем, тема на самом деле непростая, но осилить можно.
PM MAIL   Вверх
nedumat
Дата 7.10.2007, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 7.10.2007

Репутация: нет
Всего: нет



Цитата(Nikolaiko @  10.6.2007,  16:17 Найти цитируемый пост)
Здравствуйте. Мне нужно написать фильтр частот звукового сигнала.Подробнее:На вход компьютера будет подоваться звук в реальном времени. Например несложная мелодия с гитары. На одной струне. Нужно написать программу:1. В которой можно задать диапазон частот которые нужно отсечь. Или наоборот задать те которые пропускать.2. Эта программа будет принимать подающийся звук и воспроизводить его отсекая указанные частоты. 3. Возможно если опция выбрана, то получающийся в результате отсчения звук - записывать. В файл.Вопросы:1. Какой язык выбрать? 2. Какие функции использовать для этого?3. Есть ли примеры (исходники) таких или похожих программ?Я писал на С,С++,С# и Pascal (Object Pascal).  Но я никогда не работал со звуком, тем более с его записью или фильрацией.

язык С 
решение тут одно получить частотный спектор для этого - лучше  БПФ(быстрое преобразование Фурье). получили частотный спектр че надо убили, че не надо усилили (типа эквалайзер), затем  ОБПФ и все конец сообщения и теме.

PM MAIL   Вверх
bilbobagginz
Дата 15.4.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 1
Всего: 317



Nikolaiko, для начинающего дспишника (от DSP = ЦОС = цифровая обработка сигнала) есть очень удобный DirectSound. часть DirectX.
это один из наиболее эффективных на сегодня методов работы со звуком.
Для скорости желательно использовать C или C++.
посмотри какие готовые фильтры есть там. есть форумы посвященные этой теме, там есть много материала и примеров.
задача довольно типовая.

вот это ссылка на MSDN:
http://msdn.microsoft.com/en-us/library/bb219818(VS.85).aspx

вот это ссылка на форум "KVR audio"
на этом форуме есть огромная база добавок для разных музыкальных программ.
Часть этих добавок поставляется не только в бинарной форме, но и с исходниками.
Среди них есть разные типы, один из которых имеет модуль фильтра.

Выбери список DirectX добавок, выбери из них несколько таких, исходник которых доступен, 
посмотри, чтобы отзывы пользователей были хорошими, скачай, и изучай на здоровье.





Это сообщение отредактировал(а) bilbobagginz - 15.4.2009, 10:36


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
feanor59
Дата 27.9.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 24.1.2008
Где: Пермь

Репутация: нет
Всего: нет



дабы не постить темы. 
пишу фильтр. есть рабочий модуль бпф (кули-тьюки) с бинарными инверсиями, в общем как положено. преобразование в спектр и обратно работает как надо. но есть проблема с непосредственной фильтрацией. 
сейчас алгоритм таков:
из файла читается прямоугольное окно длины, к примеру, 4096.
бинарно инвертируется.
подаётся на вход бпф и на выходе получается спектр с 4096 характеристиками.
как я понял, из них значимыми являются только первые 2048, а вторая половина - зеркально повторяет 1ю и не несёт доп. инфы.
поэтому, пробегая от 0 до 2047, я зануляю те, чья частота удовлетворяет условию. +зануляется соответствующая характеристика во 2й половине (прибавляя 2048, получаю номер элемента из 2й половины).
частота текущего элемента вычисляется как Fs/i, где Fs - частота дискретизации аудио (44100), а i номер текущего элемента.
далее отредактированный вектор данных опять бинарно инвертируется и подаётся на вход бпф (комплексно сопряжённому).
выходные данные записываю в файл.
в итоге кроме, порой, серьёзных помех, спектральный анализ не показывает уменьшения уровня фильтруемых частот.
мб может кто подсказать, где косяк?
PM MAIL ICQ GTalk   Вверх
seatouch
  Дата 12.11.2011, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 27.11.2008

Репутация: нет
Всего: нет



Уважаемые программисты, добрый день!

Начал заниматься пианино и обнаружил, что нот многих великолепных аранжировок невозможно найти. 
Созрела амбициозная задача.
Написать программу которая будет делить звуковой поток (например wav файл) на множество коротких кусочков (например каждый длительностью 10 мс) и каждый этот кусочек пропускать через 108 фильтров. Каждый фильтр будет выделять одну ноту (Для информации здесь частоты нот http://vlastelingolosa.ru/news_9.html). Фильтр будет выделять не точную частоту, а диапазон в который входит нужная нота, и смотреть, что бы уровень сигнала был выше заданного.
В результате такой фильтрации можно получить файл содержащий инф. о том, в какое время сколько и каких нот звучат. Из него, не сложно будет понять, когда пианист нажимает ту или иную ноту (или аккорд).
Реальная ли это задача?
Если реальная, буду очень признателен за примерчик программы где звук.файл фильтруется заданным диапазоном частот (лучше на c/cpp или на java).
Большое спасибо!!!

Добавлено через 1 минуту и 53 секунды
Или может быть такая прога уже существует?
PM MAIL   Вверх
seatouch
  Дата 12.11.2011, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 27.11.2008

Репутация: нет
Всего: нет



По сути, надо написать 108 полосный эквалайзер, который пишет в выходной файл на какой полосе в какой момент времени уровень выше заданного.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Работа со звуком | Следующая тема »


 




[ Время генерации скрипта: 0.1186 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.