![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 04.10.2011
Сообщений: 6
|
![]()
Мне дан файл ваф формата я должен получить ноты из которых он составлен. Это моя дипломная, но я не знаю как это сделать и с чего начать. Я знаю, что как то при помощи преобразование фурье отрезка должен делать но как именно, Пожалуйста подскажите какой то алгоритм, или хотя бы как начать или дайте какие то ссылки или книги где можно подробнее прочитать про это.
|
![]() |
![]() |
![]() |
#2 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
во-первых, не "WAF" - а WAV - (это сокращённое от английского wave (волна)).
а во-вторых, поздравляю, Вы себе выбрали весьма непростую тему диплома. Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#3 |
Регистрация: 04.10.2011
Сообщений: 6
|
![]()
Ну во первых тему не я выбирал а руководитель , и хотя я ее могу поменять мне бы хотелось знать как можно решить эту задачу, чтоб решить браться за нее или нет.
во-вторых ясно что не нужно в общем случаи решить, для начало стоить решить для простого случая например для какой-от записи на пианино, потом только усложнить. И у вас есть какие то идеи как это можно сделать или откуда мне начать ? Последний раз редактировалось aram111; 04.10.2011 в 23:56. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 18.10.2009
Сообщений: 185
|
![]()
Ну в кратце. Для начала нужно получить из WAV файла данные звуковой волны. Чаще всего в WAV формате данные храняться в несжатом виде, хотя могут быть и в сжатом (тут решаёте сами делать ли декодировние сжатых данных, или возможно поискать какуюнибуть стороннюю библиотеку для декодирования). Кроме того нужно учитывать что частота дескритизации и количество бит также могут варьироваться. Данные нужно разбить на небольшые отрезки. Дальше к каждому отрезку нужно применить какоенибуть из преобразований Фурье (например Быстрое преобразование Фурье). В результате вы получите комплексные амплитуды, которые нужно привести к вещественному виду (взять модуль от комплексной велечены) (вроде ещё есть вещественное преобразование фурье которое даёт даные в вещественном виде, но по нему мало информации, поищите и подумайте сами). В результате вы получите спекр частот в каждом отрезке записи. Дальше, как справедлио заметил Serge_Bliznykov, в общем случае задача получения нот довольно сложна, но если предположить в один момент времени играет только одна нота, можо попробовать найти самый низкочастотный пик на спектре выще какогонибуть заранее заданного уровня (его частота и будет определять ноту) также возможно на спектре скорее всего будут гормоники с кратными данной ноте частотами. (для вычисления частоты незабудте учтывать исходную частоту дескритезации в WAV файле) Ну а если несколько нот. То конечно всегда можно попробовать использовать нейронные сети и алгоритмы искуственного интеллекта. Возможно существуют и какиенибуть специальные алгоритмы мне неизвестные (т.к. с подобной задачей мне сталкиваться неприходилось).
Для начала можете попробовать записать файл со звуками нот (желательно на разных интсрументах). И откройте в какомнибуть звуковом редакторе который может показывать такой спектр (спектр это и есть результат получаемый после преобразования Фурье). Посмотрите как выглядят ноты. (Nero WaveEditor точно выдавал такой спектр, хотя и в не очень удобном виде, но я думаю существуют и получше редакторы, поищите сами)
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает." Последний раз редактировалось val_nnm; 05.10.2011 в 00:26. |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
val_nnm, отличный пост!
Даже мне это было интересно и познавательно почитать (я и сейчас не смог бы реализовать описанное программно, но зато смутные представления о том, как полученные амплитуды свести к нотам стали менее смутными). Спасибо! |
![]() |
![]() |
![]() |
#6 | |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
![]() Цитата:
Вообще, задача действительно сложная. Я даже не говорю про hard rock или металл.. Косвенным подтверждением тому то, что таких программ что-то не видно. Хотя постановка такой задачи витает в воздухе - мне (например) тоже это приходило в голову неоднократно )). А что - классно! Не надо подбирать: усышал хорошую песню, включил микрофон - получи ноты из принтера!..
Предпочитаю на "ты".
|
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 18.10.2009
Сообщений: 185
|
![]()
И ещё есть пару мысль по поводу алгоритма поиска первого пика. (учтите что эт только мои мысли, и они могут быть неправильными, или даже полной чушью).
Но если бы я писал такую программу. То для начала я бы пробовал искать первый пик в спектре следующим образом. Я бы нашёл сначала максимальное значение спектра. (вполне вероятно что оно и окажеться основной частотой, но необязательно). взял бы от него этак 50% и нашел бы первую точка графика спектра пересекающую этот уровень. Дальше начиная с этой точки я бы попробовал использовать алгоритм "поиск с восхождением к вершине с эмуляцией отжига" (можете почитать в книге "Искуственный итнеллект. Современный подход. Второе издание" Стюарт Рассел, Питер Норвиг) Но начальную амплитуду отжига я бы поставил примерно 1/4 текущего значения частоты чтобы он неперескочил на следующую гормонику. (но это только мои мысли и не более). А по поводу многого нотного распозавания, (даже для 2 - 3 нот сигранных на одном и томже инструменте) это действительно очень сложная задача. Неговоря уже о hard rock где множество инструментов и ударные и голос (тут современными методами распознвание практически невозможно). для 2-3 нот (для акордов) можно использовать какойнбуть алгоритм распознавания образов (ну или нейронную сеть). Но максимальная эффективнасть будет если программу заранее обучить на техже акордах, и на томже инструменте который вы будете распознавать. Ещё можно поискать чтонибуть из алгоритмов распознования речи. Ну а вообще посмотрите на спектры сами, для разных инструментьв, какой инструмент даёт более чистый тон, и насколько сложно распознать разные сочетания нот.
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает." Последний раз редактировалось val_nnm; 05.10.2011 в 04:16. |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
раз
два три четыре пять шесть семь восемь ...могу продолжать дальше, все разжевано уже, пользуемся поиском.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#9 |
Регистрация: 04.10.2011
Сообщений: 6
|
![]()
val_nnm спасибо большое, вы мне очень помогли, по крайней мере я имею теперь хоть какое то предстваление как надо делать и с чего начинать, но задача на самом деле кажется очень сложной и я наверно все таки поменяю тему.
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
проблема с изменением формата даты при копировании из CSV формата в эксель | mars56 | Microsoft Office Excel | 4 | 16.03.2010 09:50 |
Пример кода для воспроизведения нот - частоты нот для 80-ти клавишного пианино | mutabor | Свободное общение | 8 | 09.01.2010 23:48 |
Выбор формата | Volt | Общие вопросы Delphi | 9 | 30.12.2008 22:40 |
Изменение формата | DRAGGER | Фриланс | 6 | 14.10.2008 19:36 |
Воспроизведение Midi-нот | desperado | Общие вопросы Delphi | 2 | 26.06.2007 13:22 |