Автор Тема: Гитарный МИДИ контроллер  (Прочитано 10834 раз)

0 Пользователей и 1 Гость просматривают эту тему.

tvar

  • Гость
Гитарный МИДИ контроллер
« : Января 22, 2008, 03:54:44 pm »
Решил значить попробывать сделать такой девайс. Просто для интереса. Принцип действия:
1 оцифровка гитраного сигнала,
2 решиние быстрого преобразование Фурье,
3 формирование МИДИ сообщений об взятых нотах их громкости.
Для чего это нужно? Многим музыкантам-любителям творящим музыку на домашнем компе пригодилось бы, не нужно с гитары преучиваться на клавиши.
По приблизительным расчетам. Ресурсов AVR контроллера Atmega 16  должно хватить. Но опыта в сотворении таких девайсов у меня нет. Прошу поддержать советами.
PS: сильно не пинать.

AlKoR

  • Сообщений: 1896
  • GTLab - forever!
    • ICQ клиент - 350457696
    • Просмотр профиля
    • E-mail
Re: Гитарный МИДИ контроллер
« Ответ #1 : Января 22, 2008, 04:21:20 pm »
Не думаю, что такое под силу написать для меги16, - обработка огибающей сигнала, вычисление частоты, преобразование в ноты, да еще и передача по миди ... Даже комп толком не сможет преобразовать просто сигнал в ноты . В конце концов, есть миди датчики для гитары
Я - официальный воен категории "В" :)
хранилище гитарных схем
http://guitarschems.ex6.ru/index.php

tvar

  • Гость
Re: Гитарный МИДИ контроллер
« Ответ #2 : Января 22, 2008, 07:19:34 pm »
МИДИ датчики то конечно в природе есть, ни кто не спорит. Но вопрос сколько они стоят. А вот если такое же замутить буквально на коленке. А опыт программирования PIC и AVR у меня довольно обширный. Единственное кто-нибудь помог бы разобраться с преобразованием Фурье и хватило вычислительных мощей у AVR.

AlKoR

  • Сообщений: 1896
  • GTLab - forever!
    • ICQ клиент - 350457696
    • Просмотр профиля
    • E-mail
Re: Гитарный МИДИ контроллер
« Ответ #3 : Января 22, 2008, 08:15:58 pm »
Тогда - вперед и с песней ! У меня опыта программирования мало, около года - учебы в основном, пока набираю практический опыт.
Я - официальный воен категории "В" :)
хранилище гитарных схем
http://guitarschems.ex6.ru/index.php

shn

  • Гость
Re: Гитарный МИДИ контроллер
« Ответ #4 : Января 22, 2008, 10:03:07 pm »
tvar, я этим вопросом себе уже 2 года голову морочу. Фурье не покатит. Сейчас объясню вкратце почему.
1) БПФ (быстрое дискретное преобр. Фурье) дает только спектр с кратными частотами. В целом это не проблема, если ты оцифруешь сигнал с частотой допустим 44.1 кГц, то БПФ даст тебе надежный спектр до 11 кГц. Вроде как неплохо. Но МК не потянет такое преобразование - не всякий комп тянет, не говоря уж о МК.
Хорошо, есть вариант - уменьшить частоту преобразования. В конце концов, казалось бы, нам лишь ноту нужно выделить, а не частоту ее измерять с точностью до герца, и не спектр весь нужен, а только нота, не так ли? Но тут проблема в том, чтобы получить достаточную разрешающую способность. И тут повторюсь, что Фурье дает спектр с кратными частотами, а это означает, что минимальная частота преобразования должна быть порядка 1 Гц (а то и меньше!), чтобы отчетливо отличать, например, ноту ми от ми-диез на басовой струне. Если вспомнить, что диапазон нот гитары от 80 Гц до 1280 Гц (от ми на открытой шестой струне, до 24 лада на первой), то частота дискретизации ограничена снизу 2*1280 = 2560 Гц. Конечно, не 44.1 кГц, но все равно - это весьма много.
Но это не главный недостаток Фурье... а главный ниже.

2) Фурье-анализ дает "усредненный" спектр за какое-то время. Иными словами, тут действует "соотношение неопределенностей Гайзенберга" :-), а именно - чем меньше время, по которому берется БПФ, тем "размазаннее" будет спектр, и тем больше вероятность ошибки в определении ноты. А если увеличивать время - будет расти и задержка между игрой на инструменте и сигналом.
Приведу пример. Если хочется получить спектр с точностью до 2 Гц, то интегрирование в БПФ нужно производить по интервалу времени 1/(2 Гц) = 0.5 секунды! (это оценочно) Сами понимаете, такая задержка в сигнале никому не понравится.

Так что БПФ непригодно для таких целей, необходимы другие алгоритмы.

У меня есть идеи (корреляционный анализ в основном), но они тоже завязаны на интегрировании, так что дадут задержку. Но есть надежды иметь задержку порядка 15 мс, что уже лучше, но тоже не фонтан.

Ты не думай, я не к тому, чтобы идею и желание отбить, просто думай... не все так просто :-)
« Последнее редактирование: Января 22, 2008, 10:04:29 pm от shn »

shn

  • Гость
Re: Гитарный МИДИ контроллер
« Ответ #5 : Января 22, 2008, 10:08:22 pm »
Сорри, в терминологии выше ошибся. Когда я считал "частоту дискретизации в 2560 Гц", я имел ввиду, конечно, общее число семплов. Но поскольку в расчете берется минимальная частота в 1Гц, то эти цифры совпадают :-)

Alex_SG

  • Сообщений: 3068
    • Просмотр профиля
    • E-mail
Re: Гитарный МИДИ контроллер
« Ответ #6 : Января 23, 2008, 04:40:24 am »
БПФ на современном контроллере не проблема. даже старенькие филлипсы LPC21xx справляются. если взять ядро ARM7 или 9 то вообще без проблем.
но вот на счет алгоритма - вопрос спорный.
или иметь очень большую частоту сэмплирования, чтобы иметь достаточно данных для БПФ (нам же надо все 6 звучащих струн обрабатывать - не по одной струне дергаем), либо думать над алгоритмом...

shn

  • Гость
Re: Гитарный МИДИ контроллер
« Ответ #7 : Января 23, 2008, 07:39:49 am »
Цитировать
но вот на счет алгоритма - вопрос спорный.
или иметь очень большую частоту сэмплирования, чтобы иметь достаточно данных для БПФ (нам же надо все 6 звучащих струн обрабатывать - не по одной струне дергаем), либо думать над алгоритмом...

В том-то и дело, что большая частота семплирования не поможет. У нас фиксированные частоты спектра (ноты определенных октав), а потому и период времени, по которому нужно выполнять БПФ, фиксирован. Число семплов на этом периоде задаст лишь верхнюю граничную частоту спектра. Ну будет она 44.1 кГц.. да хоть все 192 кГц, от этого не легче.

А то, что современные МК потянут (ARM7) - я не сильно компетентен в этом вопросе на данный момент :-), поэтому это было ИМХО. ARM7 (эх... лежат у меня второй год уже, ждут своей участи 4 МК от Аналогов...) может и потянет.

Alex_SG

  • Сообщений: 3068
    • Просмотр профиля
    • E-mail
Re: Гитарный МИДИ контроллер
« Ответ #8 : Января 23, 2008, 07:56:49 am »
если МК от Аналогов это ADUC, то по мнению наших програмеров это сильно неудачный проц.
мы пользуем Atmel sam7s

shn

  • Гость
Re: Гитарный МИДИ контроллер
« Ответ #9 : Января 23, 2008, 08:09:10 am »
Да, именно он :-)
Да мне они нахаляву достались, просто заказал Samples от "нефиг делать".
Все хочу сделать "что-нибудь серьезное", а, как хорошо известно, пока четкой задачи не поставишь, ничего и не сделаешь. Потому и валяются теперь без дела.
Мне все знакомые рекомендуют Atmel. У меня вопрос (сорри за офф-топ) - чем их шить?

Alex_SG

  • Сообщений: 3068
    • Просмотр профиля
    • E-mail
Re: Гитарный МИДИ контроллер
« Ответ #10 : Января 23, 2008, 09:24:41 am »
есть куча програматоров. поищи например WIGLER. работает как из под IAR так и с другими прогами-програматорами.

kholonkin

  • Сообщений: 4352
    • ICQ клиент - 406512389
    • Просмотр профиля
Re: Гитарный МИДИ контроллер
« Ответ #11 : Января 23, 2008, 12:51:10 pm »
Тут еще вроде есть и такой ньюансик, для получения более детального спектра необходимо увеличивать время снятия сигнала.
Т.е. что бы получить разрешение в 1 Гц, сигнал надо цифровать 1 сек. + обработка всего этого дела.

Что то мне кажется, что фигня получается.

ПС. Если не прав, поправьте.

shn

  • Гость
Re: Гитарный МИДИ контроллер
« Ответ #12 : Января 23, 2008, 02:43:05 pm »
kholonkin, все правильно, читай выше ;-)

Цитировать
2) Фурье-анализ дает "усредненный" спектр за какое-то время. Иными словами, тут действует "соотношение неопределенностей Гайзенберга" :-), а именно - чем меньше время, по которому берется БПФ, тем "размазаннее" будет спектр, и тем больше вероятность ошибки в определении ноты. А если увеличивать время - будет расти и задержка между игрой на инструменте и сигналом.
Приведу пример. Если хочется получить спектр с точностью до 2 Гц, то интегрирование в БПФ нужно производить по интервалу времени 1/(2 Гц) = 0.5 секунды! (это оценочно) Сами понимаете, такая задержка в сигнале никому не понравится.
« Последнее редактирование: Января 23, 2008, 02:44:02 pm от shn »

tvar

  • Гость
Re: Гитарный МИДИ контроллер
« Ответ #13 : Января 23, 2008, 03:39:36 pm »
Сегодня наточил нужную софтину. Пока весь проект будет существовать виртуально в Протеусе 7 версии, она у меня самая продвинутая. Писать буду на С. Заюзаю компилятор ICC. Сегодня два часа убил на то что бы обе проги понимали друг друга. В итоге добился того чего хотел: Протеус позволяет вести отладку по шагам, того что родит ICC.
Если все это кому-то интерсно могу объяснить подробнее.
На сегодня пока все.

jager

  • Сообщений: 543
  • GTLab - forever!
    • ICQ клиент - 147601708
    • Просмотр профиля
    • E-mail
Re: Гитарный МИДИ контроллер
« Ответ #14 : Января 23, 2008, 10:00:51 pm »
Я, окнечно, не большой дока в мидях и програмировании, но может мои мысли вам помогут, сам как-то парился над этим вопросом.
Первая такова: Зачем парится над FFT и прочими сложными ужасами, если нам всего-лишь надо мерять частоту с какой-то разрешающей способностью по времени и частоте? Самый простой метод - как в радиолокации, измерение скорости по Доплеру  - куча полосовых фильтров ) кто зазвенел, тот и нота ))
Вторая мысля: измерить численное значение частоты, а потом уже представить его как ноту можно так: Считаем количество пересечений нуля(или другого порогового значения) за единицу времени, которую надо выбрать такой, чтобы не было большой задержки, желательно уместиться в 1 мс. Пока писал , понял что таким образом можно померять только не ниже 500 Гц...
Короче говоря, вот... Может, мои блуждания по этому вопросу кого-нить натолкнут на правильный путь )
« Последнее редактирование: Января 23, 2008, 10:01:28 pm от jager »
[size=9]-Хвендер Чамп 5с1, Хвендер Чамп 5е1, Engl mod2, tomato etc-
-Гитарные девайсы-[/size]

shn

  • Гость
Re: Гитарный МИДИ контроллер
« Ответ #15 : Января 24, 2008, 02:28:09 pm »
2 Jager.
Первая мысль имеет право на существование, но она тоже приведет к задержкам - чем выше добротность контура (а для того, чтобы различать ноты, нужна добротность фильтров порядка 50-100), тем дольше в ней растут колебания (линейно).
Вторая мысля - не выйдет. Если бы гитарный сигнал был хоть как-то похож на синус или подобное :-)... А так - количество пересечений нуля гораздо больше, чем один раз в полпериода.

Да, и еще мысля моя - какие бы ни были ухищрения, задержки все равно не избежать. Более того, минимальная величина задержки - период (может быть, полпериода) самого длинноволнового сигнала, т.е. 1/80 с для гитары.
На вопрос "почему" отвечу: понятие "нота", или, другими словами, "частота" не имеет никакого смысла в какой-то изолированной точке, либо малой ее окрестности. Иными словами, нота только тогда будет нотой, когда она прозвучит какое-то время (несколько периодов). Человеческое ухо именно так воспринимает сигнал. Не буду вдаваться в подробности, как и почему, приведу лишь пример: в момент извлечения ноты (атаки) вы слышите только щелчок, а ноту мозг определяет только спустя некоторое время. И дело тут не только в том, что "у атаки спектр насыщенный" (что тоже надо понимать с оговоркой), а в том, что мозг не может определить высоту ноты сразу. Более того, у людей с нетренированным слухом 100%-но возникают проблемы при определении нот в скоростном соло (особенно с теппингом), для них такое соло - просто "пиликание", "запил", в котором они не слышат нот.

Такова природа и физика, против нее не попрешь. Это я к тому, что в принципе нереально построить какое-либо устройство, которое будет определять ноту сразу. Задержка будет обязательно. Если вам это не нравится - ищите другие пути, например, миди-датчики.

VAT

  • Сообщений: 1453
    • Просмотр профиля
    • E-mail
Re: Гитарный МИДИ контроллер
« Ответ #16 : Января 26, 2008, 03:19:17 pm »
Немного оффтоп. А кто нибудь юзал фирменный миди-контроллер? Тема навеяла идею о подарке такой штуки. Конечно реальные инструменты она не заменяет, но может помочь для экспресс подбора правильного инструмента. Если покупать - то надо максимум завтра.
Интересно как работают фирменные устройства в реальном времени.. задача и правда нетривиальная. Взять самую низкую струну - ~80 Гц = 12мс период. Но есть куча гармоник в первый момент.. Может если просчитать частоты гармоник, то можно вычислить породившую их исходную частоту? Например если в спектре есть частоты 1000,1100,1200,1300 Гц - то исходная частота понятно - 100Гц. Однако разобраться с гармониками можно за меньший период времени.
Какая вообще задержка допустима? Я вот прикинул если два музыканта находятся на расстоянии 1,5м то сыграться они могут с точностью 10мс.

shn

  • Гость
Re: Гитарный МИДИ контроллер
« Ответ #17 : Января 26, 2008, 07:44:55 pm »
10 мс - вполне допустимо.

А насчет двух музыкантов - все-таки не 10 мс, а чуть меньше 5 :-). Но это теоретический предел, реально расходимость выше. Если, правда, дирижера нет :-)

А насчет анализа по высшим гармоникам - есть рациональное зерно... Надо подумать в эту сторону.

VAT

  • Сообщений: 1453
    • Просмотр профиля
    • E-mail
Re: Гитарный МИДИ контроллер
« Ответ #18 : Января 27, 2008, 08:15:16 am »
shn:
если 1й издает звук, то второй через 5мс его слышит и синхронно издает свой звук, звук 2го летит к 1му еще 5мс. В итоге 1й музыкант слышит что 2й отстает на 10мс, а второму кажется что все абсолютно синхронно.

shn

  • Гость
Re: Гитарный МИДИ контроллер
« Ответ #19 : Января 27, 2008, 08:40:14 am »
Цитировать
shn:
если 1й издает звук, то второй через 5мс его слышит и синхронно издает свой звук, звук 2го летит к 1му еще 5мс. В итоге 1й музыкант слышит что 2й отстает на 10мс, а второму кажется что все абсолютно синхронно.

Ну это только первому кажется, что 10 мс :-). На самом деле два музыканта играют с задержкой в 5 мс (и третий зритель, стоящий в x метрах от обоих, будет слышать, что один остает от другого на 5 мс, а не 10).

Ну да ладно, это офф-топ пошел.

А по теме - нужно изучать процессы, происходящие во время атаки струны. Кому-то может показаться, что "мол, чего там изучать-то", но на самом деле процессы весьма сложные, которые не укладываются в простую (т.е. линейную) теорию струны.
Сдам завтра последний экзамен, и займусь расчетами.

Главное - понять, что происходит со спектром в начальный момент (я имею ввиду не Фурье-спектр, а спектр разложения по собственным функциям струны). Для этого нужно хорошо "промоделировать" границы струны - места крепления на порожках. В нулевом приближении струна фиксирована жестко, и это приводит к известным результатам относительно спектра частот (основной тон и гармоники). Однако такое описание, во-первых, не может никак описать атаку струны, а во-вторых, неправильно описывает затухание струны - в случае линейной модели затухание всех гармоник происходит одинаково, что противоречит опыту: всем известно, что если дернуть басовую "ми", то через некоторое время будет звучать только основной тон с минимум гармоник, а не все гармоники в том же соотношении, что и в "начале" ноты.