На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Delphi+FFT+BASS+Ноты
    Всем доброго времени суток.. Раньше никогда не работал со звуком, ну разве что с MMSystem... Видел множество алгоритмов БПФ, но если честно не могу их осилить без посторонней помощи (знаю что таких тем много) и сам БПФ у меня вроде бы адекватно работает. Но у меня проблема в другом.

    1. Подскажите пожалуйста, как мне узнать какая нота проигрываются на данный момент. Понимаю что нота зависит от частоте колебаний, но что есть что - не могу понять. Т.е. с мат. точки зрения я знаю что такое амплитуда и период... но как это все работает в FFT алгоритмах затрудняюсь понять.

    2. Даже если получится опредилить ноту сыгранную на одной струне (электрогитара), то как правильно нужно будет разбирать FFT где играет аккорд (две и более нот).

    Прикрепляю пример с исходником, звук берется с LineIn входа.
    Прикреплённый файлПрикреплённый файлПроект.7z (174,48 Кбайт, скачиваний: 458)

    И пример с BASSом, где идет анализ MP3.
    Прикреплённый файлПрикреплённый файлSampleVis.7z (117,94 Кбайт, скачиваний: 408)

    По какому примеру вам будет удобнее подсказать, по такому и подскажите..а я там уже сам постараюсь разобраться...Хотя планирую работать не с MP3 а с линейным входом, но еще не понял как в BASS брать с него в реал-тайм звук.

    Буду очень благодарен за любую помощь. :rose:
    Сообщение отредактировано: eXtr0gen -
      Какая конечная цель проекта?
        Сделать наглядную визуализацию игры на музыкальном инструменте подключенному по линейному входу... Будь то бас гитара, электроскрипка или синтезатор. Т.е. отображение динамики, акцентов, музыкальных интервалов и т.п. А на деле - 2D движок Andorra с системой частиц, которая будет анимированна на графике где X - ноты, а Y октавы.

        А вот сама таблица частот нот... только я не знаю, где и как вытащить эти частоты для сравнения в FFT..
        Прикреплённый файлПрикреплённый файлtabl.gif (14,53 Кбайт, скачиваний: 2408)
        Сообщение отредактировано: eXtr0gen -
          Нужен миди-датчик или миди-инструмент.
          Выдрать нотную последовательность и частично динамику из аудио в принципе возможно для случая одноголосия.
          Вы взяли сложную задачу, а со звуком, как вы говорите, вообще не работали. Трудно вам что-то конкретное присоветовать.
          Возьмите для начала аудиоредактор, например, cooledit, позаписывайте звук гитары: отдельно звучащей струны, две-три струны, поиграйте. Посмотрите как выглядит и изменяется спектр. Наглядное представление полезно. Некоторые вопросы отпадут, появятся другие. Аналогичный спектр будет у вас после FFT. Математика математикой, но необходимо понимать, что именно вы собираетесь анализировать, а вы пока этого вообще не представляете.
          Имхо.
            Prince Спасибо за честный ответ... Я примерно так же думал про одноголосие и многоголосие.. там анализ сложный нужно делать... Ну, буду эксперементировать, anything - thanks...
              Визуализация необходима для каких-то практических целей или "для красоты"?
              Задачу (для начала?) можно упростить. Если разбить непрерывный спектр на интервалы, центры которых совпадают с частотами звукоряда и анализировать уровень звука в каждом интервале, а потом отобразить их в выбранной вами системе координат: октава-нота - получится в общем-то нечто подобное задуманному. Только будет отображаться не нотный состав а гармонический состав. Скажем, вместо одной ноты будет отображаться 5-9, по числу "обнаруженных" гармоник.
                Prince И для красоты и для практических целей.. для тренировки игры крайне желательно видеть динамику игры.. (громкость и силу атаки), длительности нот и сами ноты... играя и наблюдая - намного быстрее получится обжить гриф...

                Цитата Prince @
                Если разбить непрерывный спектр на интервалы, центры которых совпадают с частотами звукоряда и анализировать уровень звука в каждом интервале, а потом отобразить их в выбранной вами системе координат: октава-нота - получится в общем-то нечто подобное задуманному. Только будет отображаться не нотный состав а гармонический состав. Скажем, вместо одной ноты будет отображаться 5-9, по числу "обнаруженных" гармоник.

                Видимо это мне и нужно :)
                А как такое можно сделать и где можно вытянуть данные в FFT с частотами?
                  Какие я вижу проблемы данного подхода:
                  1. Для нормального разбора нижних частот понадобится большой фрейм для FFT.
                  2. Полного качественного реалтайма не получится, программа будет реагировать с задержкой на рамер FFT-фрейма.
                  3. Пики атак и длительность нот также будут определятся дискретно по той же причине.

                  Ну а разного рода алгоритмы можешь посмотреть здесь:

                  http://musicdsp.org/archive.php?classid=2

                  Спектр FFT представляет собой линейное представление веса частот.
                  Т.е. если надо найти вес 220 герц, то искать надо где-то в районе (Размер фрейма) * 220 / (Частота дискретизации сигнала). Из данной формулы видно, что если размер фрейма очень маленький, то низкие частоты просто сольются в несколько значений спектра.

                  В общем дерзай, флаг, как говорится, в руки :-)
                    Оооо!!))
                    Полезная информация :)
                    Значит не я один интересуюсь данным вопросом :)
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,1119 ]   [ 20 queries used ]   [ Generated: 25.04.24, 02:17 GMT ]