C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
вопрос знатокам, программка
marconi
Отправлено: 25.06.2004, 15:19


Станционный диспетчер

Группа: Участник
Сообщений: 86



Добрый день,вечер всем. Подскажите (не надо исходников) с чего начать. Хочу программу для настройки гитары. На вход звуковой карты -инструмент. Далее сравнение тональности с тоном заданным для каждой струны. выше, ниже.
Георгий
Отправлено: 25.06.2004, 21:22


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



хороший вопрос — "с чего начать"

я бы начал с рассмотрения потока данных:
аналоговый вход звуковой карты -> дискретные выборки (48kHz) -> преобразование фурье -> набор гармоник и их амплитуд -> перевод гармоник в тон (я не музыкант, поэтому это только догадка) -> сравнение с заданным тоном и соответствующее сообщение пользователю

что бы это сделать нужно:
1. уметь работать со звуковой картой (DirectSound?)
2. разобраться с Фурье

Ну как? Похоже на то, с чего начать можно?
exp
Отправлено: 25.06.2004, 22:54


Мастер участка

Группа: Участник
Сообщений: 304



Недавно экспериментировал с преобразованием Фурье.
Самое главное там в MainUnit.cpp  — Там в разделе User procedures
спрятано прямое и обратное преобразование Фурье (Не FFT) в комплексной форме. Временная сложность О(n^2) /* что плохо :-( */
и Complex.h — Здесь класс, над которым работает преобразование.

Преобразования производятся по формулам:

S[j] = 1/sqrt(n)*sum(f[k]*exp(-i*w*k*j),k=0..(n-1))
F[j] = sum(S[j]*exp(-i*w*k*j), k=0..(n-1));

Здесь i — не индекс, а мнимая единица.
w = 2*Pi/n;

Таблично заданная функция запихивается в массив значений Complex *f. Результат преобразования — массив Complex *S.

Модуль числа S[m] — амплитуда m-той гармоники.
Модуль отношения S[m].у/S[m].x  — тангенс начальной фазы m-той гармоники.

Вроде все...

Убедительная просьба критическим взором окинуть класс и сказать, в каких местах я проявляю задоручие.

Отредактировано exp — 26/06/2004, 00:13
exp
Отправлено: 25.06.2004, 22:57


Мастер участка

Группа: Участник
Сообщений: 304



Тьфу ты... Присоединить забыл.
Вот...

User Attached Image Скачать файл
AutoExams_for_TIS.zip


marconi
Отправлено: 26.06.2004, 07:22


Станционный диспетчер

Группа: Участник
Сообщений: 86



QUOTE (Георгий @ 25/06/2004, 22:24)
хороший вопрос — "с чего начать"



что бы это сделать нужно:
1. уметь работать со звуковой картой (DirectSound?)
2. разобраться с Фурье

Ну как? Похоже на то, с чего начать можно?

Ну гармоники в счет наверно можно не брать. Допустим какая то струна наприер вторая (я то же не музыкант) будет "СИ" и должна иметь частоту 700 Гц. Так сравнить её со стандартной частотой 700 Гц.
Учитывать гармоники это уже "темный лес". Такую штуку я видел в виде
простой коробочки собранной на 2 микросхемах, где был вход для гитары и 2 светодиода частота "ниже" и "выше".Ну это было чисто физическое устройство(может не так сказал). Да попробую начать со звуковой карты.
Георгий
Отправлено: 26.06.2004, 12:04


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



QUOTE
Учитывать гармоники это уже "темный лес".

а вдруг потом захотят не просто гитары настраивать, а еще и чистоту звука оценивать?

Отредактировано Георгий — 26/06/2004, 13:06
marconi
Отправлено: 26.06.2004, 13:43


Станционный диспетчер

Группа: Участник
Сообщений: 86



Да тут точно без спецов в музыке не обойтись, кто знает как они там настраивают.Попалась ссылка на программу для настройки гитары. Я посоветовал другу(он хороший музыкант) потом скачал и говорит что там 6 клавиш соответствующих своей струне. Ничего, никуда не подключается жмешь клавишу на экране, слышишь звук, сравниваешь со струной. Туфта говорит. Хорошо ,очередное спасибо всем.

Отредактировано marconi — 26/06/2004, 14:47
Георгий
Отправлено: 25.08.2004, 22:37


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



програмку удалось сделать или обошлись уже готовыми решениями?

Вернуться в Вопросы программирования в C++Builder