Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2011, 22:56   #1
aram111
 
Регистрация: 04.10.2011
Сообщений: 6
По умолчанию Получение нот из waf формата

Мне дан файл ваф формата я должен получить ноты из которых он составлен. Это моя дипломная, но я не знаю как это сделать и с чего начать. Я знаю, что как то при помощи преобразование фурье отрезка должен делать но как именно, Пожалуйста подскажите какой то алгоритм, или хотя бы как начать или дайте какие то ссылки или книги где можно подробнее прочитать про это.
aram111 вне форума Ответить с цитированием
Старый 04.10.2011, 23:25   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, не "WAF" - а WAV - (это сокращённое от английского wave (волна)).
а во-вторых, поздравляю, Вы себе выбрали весьма непростую тему диплома.
Цитата:
получить ноты из которых он составлен
wav файл не состоит из нот.

Цитата:
что как то при помощи преобразование фурье
более того, в общем случае задача вообще не решается. Ну запишите, например, свой голос(речь) в формате WAV. Полученный звуковой файл, по вашему, тоже будет "состоять из нот"?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.10.2011, 23:32   #3
aram111
 
Регистрация: 04.10.2011
Сообщений: 6
По умолчанию

Ну во первых тему не я выбирал а руководитель , и хотя я ее могу поменять мне бы хотелось знать как можно решить эту задачу, чтоб решить браться за нее или нет.

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

И у вас есть какие то идеи как это можно сделать или откуда мне начать ?

Последний раз редактировалось aram111; 04.10.2011 в 23:56.
aram111 вне форума Ответить с цитированием
Старый 05.10.2011, 00:10   #4
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

Ну в кратце. Для начала нужно получить из WAV файла данные звуковой волны. Чаще всего в WAV формате данные храняться в несжатом виде, хотя могут быть и в сжатом (тут решаёте сами делать ли декодировние сжатых данных, или возможно поискать какуюнибуть стороннюю библиотеку для декодирования). Кроме того нужно учитывать что частота дескритизации и количество бит также могут варьироваться. Данные нужно разбить на небольшые отрезки. Дальше к каждому отрезку нужно применить какоенибуть из преобразований Фурье (например Быстрое преобразование Фурье). В результате вы получите комплексные амплитуды, которые нужно привести к вещественному виду (взять модуль от комплексной велечены) (вроде ещё есть вещественное преобразование фурье которое даёт даные в вещественном виде, но по нему мало информации, поищите и подумайте сами). В результате вы получите спекр частот в каждом отрезке записи. Дальше, как справедлио заметил Serge_Bliznykov, в общем случае задача получения нот довольно сложна, но если предположить в один момент времени играет только одна нота, можо попробовать найти самый низкочастотный пик на спектре выще какогонибуть заранее заданного уровня (его частота и будет определять ноту) также возможно на спектре скорее всего будут гормоники с кратными данной ноте частотами. (для вычисления частоты незабудте учтывать исходную частоту дескритезации в WAV файле) Ну а если несколько нот. То конечно всегда можно попробовать использовать нейронные сети и алгоритмы искуственного интеллекта. Возможно существуют и какиенибуть специальные алгоритмы мне неизвестные (т.к. с подобной задачей мне сталкиваться неприходилось).

Для начала можете попробовать записать файл со звуками нот (желательно на разных интсрументах). И откройте в какомнибуть звуковом редакторе который может показывать такой спектр (спектр это и есть результат получаемый после преобразования Фурье). Посмотрите как выглядят ноты. (Nero WaveEditor точно выдавал такой спектр, хотя и в не очень удобном виде, но я думаю существуют и получше редакторы, поищите сами)
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."

Последний раз редактировалось val_nnm; 05.10.2011 в 00:26.
val_nnm вне форума Ответить с цитированием
Старый 05.10.2011, 00:34   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

val_nnm, отличный пост!

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

Спасибо!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.10.2011, 01:50   #6
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от aram111 Посмотреть сообщение
для простого случая например для какой-от записи на пианино, потом только усложнить.
Я не стал бы называть фортепиано простым случаем в указанном смысле. Во-первых - многоголосье, во-вторых - ударный характер извлечения звука, что дает массу обертонов. Если говорить о простом (опять же, оговорюсь: в этом смысле) - то, может, соло на флейте подойдет (хотя, там тоже шумов достаточно). И мне почему-то кажется, что для диплома и этого будет достаточно. А самый простой случай, на самом деле - это запись проигрывания midi-файла на компе (или простой одноголосой клавиатурки).

Вообще, задача действительно сложная. Я даже не говорю про hard rock или металл.. Косвенным подтверждением тому то, что таких программ что-то не видно. Хотя постановка такой задачи витает в воздухе - мне (например) тоже это приходило в голову неоднократно )). А что - классно! Не надо подбирать: усышал хорошую песню, включил микрофон - получи ноты из принтера!..
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 05.10.2011, 04:13   #7
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

И ещё есть пару мысль по поводу алгоритма поиска первого пика. (учтите что эт только мои мысли, и они могут быть неправильными, или даже полной чушью).

Но если бы я писал такую программу. То для начала я бы пробовал искать первый пик в спектре следующим образом.
Я бы нашёл сначала максимальное значение спектра. (вполне вероятно что оно и окажеться основной частотой, но необязательно). взял бы от него этак 50% и нашел бы первую точка графика спектра пересекающую этот уровень. Дальше начиная с этой точки я бы попробовал использовать алгоритм "поиск с восхождением к вершине с эмуляцией отжига" (можете почитать в книге "Искуственный итнеллект. Современный подход. Второе издание" Стюарт Рассел, Питер Норвиг) Но начальную амплитуду отжига я бы поставил примерно 1/4 текущего значения частоты чтобы он неперескочил на следующую гормонику.
(но это только мои мысли и не более).

А по поводу многого нотного распозавания, (даже для 2 - 3 нот сигранных на одном и томже инструменте) это действительно очень сложная задача. Неговоря уже о hard rock где множество инструментов и ударные и голос (тут современными методами распознвание практически невозможно).

для 2-3 нот (для акордов) можно использовать какойнбуть алгоритм распознавания образов (ну или нейронную сеть). Но максимальная эффективнасть будет если программу заранее обучить на техже акордах, и на томже инструменте который вы будете распознавать. Ещё можно поискать чтонибуть из алгоритмов распознования речи.


Ну а вообще посмотрите на спектры сами, для разных инструментьв, какой инструмент даёт более чистый тон, и насколько сложно распознать разные сочетания нот.
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."

Последний раз редактировалось val_nnm; 05.10.2011 в 04:16.
val_nnm вне форума Ответить с цитированием
Старый 05.10.2011, 12:23   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

раз
два
три
четыре
пять
шесть
семь
восемь
...могу продолжать дальше, все разжевано уже, пользуемся поиском.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 05.10.2011, 20:35   #9
aram111
 
Регистрация: 04.10.2011
Сообщений: 6
По умолчанию

val_nnm спасибо большое, вы мне очень помогли, по крайней мере я имею теперь хоть какое то предстваление как надо делать и с чего начинать, но задача на самом деле кажется очень сложной и я наверно все таки поменяю тему.
aram111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с изменением формата даты при копировании из 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