Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: [3/4 OFF] Софтовый тюнер или Ау, девелоперы :-)
Форум Guitar.ru > Общение > Разговоры на гитарную тему
LizardKing
Всем привет, а девелоперам особенно! :-) Поясните, плиз, как устроен софтовый тюнер (ну, наверное, и тюнер вообще). Как я понимаю, тюнер должен отображать ноту, которую я дернул на гитаре, анализируя кусочек звукового потока и вычленять оттуда значение наиболее часто встречающейся амплитуды. Количество повторов примерно равных амлитуд и будет "герцность" искомой ноты, т.е. если какая-та амлитуда встретилась примерно 440 раз в секундном фрагменте, то, значицца, мы дернули ноту "Ля" и т.д. Но в этом случае нужно записывать СЕКУНДУ звука, что для тюнера неприемлимо. Если пропорционально уменьшить время записи фрагмента, увеличиться "оперативность" тюнера, но также возрастет и ошибка (причем латентность все равно будет нехилая). Народ! Мож, я, конечно, чушь пишу, но не будьте так строги - объясните убогому, чего в Датском королевстве наперекосяк? P.S. При анализе пользовался FFT, т.е. в математике уж не совсем ламер, хотя... ;-) ВСЕМ ЗАРАНЕЕ ОГРОМНОЕ ЛИЗАРДКИНГОВСКОЕ СПАСИБО!
Andy
зачем ты можешь насчитать 220 колебаний в 0.5 сек 110 колебаний в 0.25 сек и т.д. поступающий сигнал сразу и непрерывно раскладывается в ряды. наверное кстати поэтому иногда вначале они показывают ноту на октаву выше реальной. какой отрезок времени при этом берется даже не знаю, но по опыту задержки показаний тюнера ~ 0.2..0.5 сек. этого достаточно для анализа (не менее 110 циклов попадает) и зачем кстати тюнеру такая оперативность менее 0.5 сек. все равно струну нужно строить не по первым мгновениям звучания, а когда натяжение спадет
LizardKing
110 колебаний в 0.25 сек - это же все-таки не факт, что в 1 сек будет 440! Наверное... Но сам принцип-то верный или как?
Andy
принцип верный думаю здесь можно почитать об этом больше http://forum.sources.ru/index.php?showtopic=9061
LizardKing
Спасибо! Щаз гляну.
Schneider
При поступлении звука нужно раскладывать в ряд Фурье и смотреть частоту самой низкой гармоники. Это и даст ноту (насколько я помню физику волн). В общем, я никогда такими вещами не занимался, но в голове сейчас появилась идея типа того: звук поступает дискретно (с частотой к примеру 44100 раз в секунду). Соответственно эти числа (амплитуда колебаний интенсивности звуковой волны, я так понимаю) запихиваем в некий массив по порядку, и отдельным потоком по таймеру делаем FFT (оно же БПФ :)), анализируем его, выявляем искомую гармонику и отображаем его. Я мог наврать в понятиях и в математике :) Но на алгоритме это не должно сильно сказаться, так что надеюсь будет работать. Главное с потоками грамотно оптимизировать все. Кстати, а звук каким макаром считывается? Это ведь тоже влияет, и причем существенно, на латентность.
LizardKing
Шнайдер - я так и делал, алгоритм рабочий, но чета фигня какая-та получалась. Лан, попробую еще, мож просто руки с мозгами из одного места растут :-\ Звук рекордил WinAPI'шными функциями. Через Direct не пробовал пока. Ок, всем спасибо :-) буду пробовать еще!
Schneider
Попробуй через Direct Sound. Там все просто по идее (я с ним правда не работал, но DX вообще штука несложная), но эффективно и универсально. Я так понимаю, основная проблема - это скорость?
LizardKing
Именно. Большой фрагмент - большая точность, но низкая скорость обновления (срабатывания) и наоборот. Вот. Нуна компромисс искать. Попробую. Вообще как-то начал копать Директ и нашел там много интересных вещей (типа панорамирования, возможности запуска нескольких независимых источников и т.д.). А вообще директ предназначен в первую очередь для воспроизведения звука, а не для записи.
LizardKing
P.S. Коли уж оффтоп так разросся, добавлю СУБоффтоп - сегондя заказал в МузДетали уж очень приглянувшуюся мне акустику Skylark :-) чуть ли не самая дешевая, но что-то зацепила она меня :-) вот так люди влюбляются... наверное :-)
Sam (OverHead)
Schneider: Кстати, а звук каким макаром считывается? Это ведь тоже влияет, и причем существенно, на латентность. Ну, если взять за истину то что для более-менее достоверного определения частоты, нужно как минимум 0.25 сек, то думаю пофигу каким макром считывается :) Думаю, любая, самая захудалая карта даже через Windows Wave Mapper способна нормально без косяков выдавать 250 миллисекундные буфферы.
Schneider
OverHead: Ну, если взять за истину то что для более-менее достоверного определения частоты, нужно как минимум 0.25 сек, то думаю пофигу каким макром считывается :) Думаю, любая, самая захудалая карта даже через Windows Wave Mapper способна нормально без косяков выдавать 250 миллисекундные буфферы. Из этого по-твоему следует, что задержка тюнера меньше 250 миллисекунд не получится, так что ли? :) Здесь нужно имхо уменьшать сильно размер буффера для уменьшения латентности (т.е. времени на "разгон"), и вот тут уже будет важно, через что считывать звук, т.к. увеличивается число обращений к устройству. В принципе пользователю в течении первой секунды необязательно видеть совсем в копеечку правильную и адекватную ноту, ему важно видеть хотя бы что-нибудь, главное чтобы результат показывался оперативно и без тормозов. А уж тут могут быть проблемы всякого рода.
Sam (OverHead)
Тоже правда.
janson
Я тут был, читал... Понял только цифры: 440, 220, 110 и 44100 =))
Димка
Мож я чего не понимаю но мне кажется что не факт что нота ля должна определяться именно по 440 Гц. Там же ещё гармоники идут. Тебе надо как в спектроанализаторе наверное самую "громкую" гармонику выделять - это и будет твоя нота.
Димка
ваще зайди на www.sourceforge.net может там есть исходники тюнера. очень не исключено!
LizardKing
janson +1 Димка Угу, гляну. Времени вот пока нет, это я для себя с тюнером решил разобраться, на работе совсем другая конопля :-}}
janson
LizardKing (Уфа): "на работе совсем другая конопля :-}}" А-а-а-а... вот почему такая тема появилась!!! =))
Димка
Да, там тюнеров дофига... http://sourceforge.net/search/?type_of_search=soft&words=tuner
LizardKing
janson Дык :-) завод химпромный :-) у нас тут зайцы по территории бегают непуганые... одного заколбасили, так он в темноте светился :-)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2026 IPS, Inc.