Цитата
2
midi2piano, новая, продвинутая версия от Эдитора (теперь работает правильно!)
Автор
Editor TEH Chaos-neutral
, 15 Sep 2016 22:45
Сообщений в теме: 62
#41
Отправлено 19 December 2016 - 23:23
UPD: А Эдитор таки малаца, эта утилита сама по себе довольно удобная. Правда, насчет ужимания строк не могу судить, возможно я скармливал слишком длинный файл, но в 50-строчный лимит результат не уместился.
#42
Отправлено 19 December 2016 - 23:30
Вообще, теоретически, возможно и дальше увеличивать степень сжатия если попробовать находить наименьший общее наименьшее кратное по длительностям. Однако это, к сожалению, ломается одной простой и совершенно уебанской вещью: ограничение по BPM. До 1500. В случае с нотами BPM придется домножать на столь большое число, что оно просто не влезет. В пределе я могу разве что ЧИСЛЕННО найти все возможные способы записать мелодию и найти самый плотный среди них.
К примеру если теоретическая мелодия состоит из длительностей, скажем, 4.5 и 6.5 (каждая запись занимает 3 символа в строке, всего можно 50 символов), то умножением на 0.2 оно сначала становится 0.9 и 1.2, затем умножением на 10 это будет 9 и 12 -- уже всего 1 и 2 символа. Разделив это на три можно получить 3 и 4 и это несокращаемо. Таким образом мы сократили длину это мелодии в 3 раза, с 6 символов на длительности до 2. Нахождения такой цепи умножений для целой мелодии - нетривиальная задача, не имеющая простого решения.
К примеру если теоретическая мелодия состоит из длительностей, скажем, 4.5 и 6.5 (каждая запись занимает 3 символа в строке, всего можно 50 символов), то умножением на 0.2 оно сначала становится 0.9 и 1.2, затем умножением на 10 это будет 9 и 12 -- уже всего 1 и 2 символа. Разделив это на три можно получить 3 и 4 и это несокращаемо. Таким образом мы сократили длину это мелодии в 3 раза, с 6 символов на длительности до 2. Нахождения такой цепи умножений для целой мелодии - нетривиальная задача, не имеющая простого решения.
#43
Отправлено 20 December 2016 - 00:57
Editor TEH Chaos-neutral (19 December 2016 - 23:23) писал:
Она была сделана под Грин, где у пианино лимит на 200 строк. Если нужно этот лимит уменьшить, то изменить переменную LINES_LIMIT. Никаких неумещений быть не должно, количество линий обрезается.
Тогда все в порядке, я это проверял на бейском пианино. дДа и в самом файле оказалось сразу 2 песни, так что его по идее надо раздербанивать напополам.
Скрытый текст
#44
Отправлено 23 December 2016 - 22:34
Когда ввожу "pip3.5 install easygui==0.96" командная строка не распознаёт "pip3.5" как исполняемую программу. Что я делаю не так?
#47
Отправлено 24 December 2016 - 16:17
Питон в PATH не добавлен.
Следуй 5 шагу
Следуй 5 шагу
#48
Отправлено 26 December 2016 - 20:01
Эдитор, Таукиты спиздили твой конвертер и упаковали его в экзешник для жалких смертных.
http://tauceti.ru/wiki/Music_Creation
http://tauceti.ru/wiki/Music_Creation
#49
Отправлено 27 December 2016 - 00:08
Это другой конвертор.
#51
Отправлено 13 March 2017 - 18:24
Таки всё же можно mp3/ogg перевести в midi. Не успел погуглить, есть ли готовые программы для этого, но это вполне реально. Да, у midi меньше состояний системы, чем у mp3, однако есть достаточно обширный математический аппарат для решения многих задач. Запись звука ведь по сути ничто иное, как запись напряжения на катушке микрофона, умноженная на некий коэффицент. Уверен, что можно найти таблицу соответствия между звуком и получаемыми значениями напряжения. А затем и между напряжением и определённой нотой. Эти ноты уже можно будет запихнуть в midi файл.
А ещё можно получить весь спектр амплитуд(нот) звуковой волны, если применить к её функции преобразование Фурье. Таким образом можно будет выделить практически весь набор нот в конкретный момент времени.
А ещё можно получить весь спектр амплитуд(нот) звуковой волны, если применить к её функции преобразование Фурье. Таким образом можно будет выделить практически весь набор нот в конкретный момент времени.
God bless Animus!
#52
Отправлено 13 March 2017 - 22:36
TRIGGERED
Во-первых, это зависит от микрофона.
Во-вторых, ты сосешь хуи.
Сделаю страшную подсказку: эта формула 16.35*2A/12 где A - порядковый номер ноты начиная с C0. (http://www.phy.mtu.e.../notefreqs.html)
Это все учитывая, что у нас равномерно темперированная система.
Нота A4 имеет частоту 440 гц, нота A3, например, 220 гг, A2 110 гц и так далее.
Есть только одна маленькая проблема: реальные инструменты (с тех, с которых записывают) выдают не идеальные волновые формы, а суперпозицию огромного числа волн. Если ещё аппроксимировать какая одна нота была воспроизведена на инструменте можно (то есть всего одна нота, что слабо реально если у тебя не электронный инструмент и/или идеальные условия), то вот несколько нот невозможно в принципе, потому что существует несколько способов их получить.
Если у тебя, допустим, есть число 15, то я тебе могу в натуральных числах написать огроменное количество разных способов его получить используя только неповторяющиеся натуральные числа и операцию сложения.
Так вот тут натуральные числа (что не имеет в данном смысле реального смысла) это для нас будут частоты волн (амплитуду и фазу брать не будем), а сложение - суперпозиция.
Если у нас есть конечная волна, например, частотой 440 гц, то я могу представить её как суперпозицию многих волн, причем вариантов бесконечно много (поскольку частота всегда положительна и является действительной).
Твоё преобразование Фурье действительно тебе позволит получить набор синусоидальных волн, которые в результате суперпозиции выдадут тебе конечную волну.
Только есть одна МААААЛЕНЬКАЯ проблема: в большинстве своем эти волны не будут соответствовать никакой ноте. То есть совсем.
Тебе нужно ограничить множество возможных частот до множества, где An = 16.35*2n/12 , где 0 <= n <= 123 и и теперь проблема становится гораздо веселее.
Даже если ты сможешь применить преобразование Фурье на твою конечную волну при таких условиях, это отнюдь не гарантирует, что конечная волна (нота) получилась именно таким образом. Не забывай, что преобразование Фурье не та вещь, которую ты применяешь, чтобы решить такую задачу. Суть его состоит как раз в том, чтобы некоторую периодическую функцию представить как сумму некоторого количества синусоидальных функций. Действительно ли эта волна получилась в результате сложения этих волн невозможно определить.
А, ещё есть проблема дискретизации: данные хранятся в цифровом формате, тогда как микрофон - аналоговое устройство (почти всегда). Твоя функция не будет непрерывной. Проблему можно исправить интерполяцией, но это не то, что нужно.
Цитата
Запись звука ведь по сути ничто иное, как запись напряжения на катушке микрофона, умноженная на некий коэффицент
Во-первых, это зависит от микрофона.
Во-вторых, ты сосешь хуи.
Цитата
Уверен, что можно найти таблицу соответствия между звуком и получаемыми значениями напряжения.
Это все учитывая, что у нас равномерно темперированная система.
Нота A4 имеет частоту 440 гц, нота A3, например, 220 гг, A2 110 гц и так далее.
Есть только одна маленькая проблема: реальные инструменты (с тех, с которых записывают) выдают не идеальные волновые формы, а суперпозицию огромного числа волн. Если ещё аппроксимировать какая одна нота была воспроизведена на инструменте можно (то есть всего одна нота, что слабо реально если у тебя не электронный инструмент и/или идеальные условия), то вот несколько нот невозможно в принципе, потому что существует несколько способов их получить.
Если у тебя, допустим, есть число 15, то я тебе могу в натуральных числах написать огроменное количество разных способов его получить используя только неповторяющиеся натуральные числа и операцию сложения.
Так вот тут натуральные числа (что не имеет в данном смысле реального смысла) это для нас будут частоты волн (амплитуду и фазу брать не будем), а сложение - суперпозиция.
Если у нас есть конечная волна, например, частотой 440 гц, то я могу представить её как суперпозицию многих волн, причем вариантов бесконечно много (поскольку частота всегда положительна и является действительной).
Твоё преобразование Фурье действительно тебе позволит получить набор синусоидальных волн, которые в результате суперпозиции выдадут тебе конечную волну.
Только есть одна МААААЛЕНЬКАЯ проблема: в большинстве своем эти волны не будут соответствовать никакой ноте. То есть совсем.
Тебе нужно ограничить множество возможных частот до множества, где An = 16.35*2n/12 , где 0 <= n <= 123 и и теперь проблема становится гораздо веселее.
Даже если ты сможешь применить преобразование Фурье на твою конечную волну при таких условиях, это отнюдь не гарантирует, что конечная волна (нота) получилась именно таким образом. Не забывай, что преобразование Фурье не та вещь, которую ты применяешь, чтобы решить такую задачу. Суть его состоит как раз в том, чтобы некоторую периодическую функцию представить как сумму некоторого количества синусоидальных функций. Действительно ли эта волна получилась в результате сложения этих волн невозможно определить.
А, ещё есть проблема дискретизации: данные хранятся в цифровом формате, тогда как микрофон - аналоговое устройство (почти всегда). Твоя функция не будет непрерывной. Проблему можно исправить интерполяцией, но это не то, что нужно.
#53
Отправлено 13 March 2017 - 23:13
Нихрена себе ты математику затянул.
#54
Отправлено 14 March 2017 - 13:15
Не всегда задачу можно решить красиво. Здесь определённо придётся использовать интерполяцию, мне показалось это слишком очевидным, чтобы что-то об этом написать. Ещё придётся выкинуть часть данных, которые не войдут в множество A. Да, это сильно скажется на точности результата, но высокая точность для этой задачи не нужна.
Я не спорю, что после преобразования Фурье в итоге будет огромное количество синусоидальных функций, суперпозиций которых может быть очень большое количество. Однако, во первых, midi нужны только целые ноты. Во вторых, при игре на реальных инструментах, в соответствии со сложившейся музыкальной традицией, люди играют также только целые ноты(если считать #/b за отдельные самостоятельные ноты). Из-за этого количество суперпозиций уменьшается, так как конкретный аккорд может быть составлен только из конкретного набора нот. Можно пойти ещё дальше и вспомнить, что в традиционной музыке считается, что аккорд всегда начинается с низкой и заканчивается высокой нотой.
Понятно, что даже со всем этим, результат перевода mp3 -> midi будет не очень точным. Но, это в любом случае быстрее и проще будет, чем самостоятельно в midi редакторе набирать какой-то трек. Допиливать всё равно придётся.
Я не спорю, что после преобразования Фурье в итоге будет огромное количество синусоидальных функций, суперпозиций которых может быть очень большое количество. Однако, во первых, midi нужны только целые ноты. Во вторых, при игре на реальных инструментах, в соответствии со сложившейся музыкальной традицией, люди играют также только целые ноты(если считать #/b за отдельные самостоятельные ноты). Из-за этого количество суперпозиций уменьшается, так как конкретный аккорд может быть составлен только из конкретного набора нот. Можно пойти ещё дальше и вспомнить, что в традиционной музыке считается, что аккорд всегда начинается с низкой и заканчивается высокой нотой.
Понятно, что даже со всем этим, результат перевода mp3 -> midi будет не очень точным. Но, это в любом случае быстрее и проще будет, чем самостоятельно в midi редакторе набирать какой-то трек. Допиливать всё равно придётся.
God bless Animus!
#58
Отправлено 15 March 2017 - 15:46
Цитата
Во вторых, при игре на реальных инструментах, в соответствии со сложившейся музыкальной традицией, люди играют также только целые ноты(если считать #/b за отдельные самостоятельные ноты).
Цитата
люди играют также только целые ноты
Цитата
Из-за этого количество суперпозиций уменьшается, так как конкретный аккорд может быть составлен только из конкретного набора нот.
А теперь представь что происходит, когда сразу много нот играет: у тебя появляется серьезная неопределенность. Не имея технических данных по используемому инструменту у тебя нет простого способа разложить какой-то звук на составляющие ноты. Это вполне реально, но слишком дорого в плане реализации и отнюдь не гарантирует, что найдутся именно ноты, которые использовались.
Если у тебя есть некоторый инструмент, способный выдавать идеальные ноты и к тому же бесконечное их количество (условно говоря), то да, он может воспроизвести любой инструмент который может существовать, но эта задача является вычислительно сложной (по факту NP), не разрешимой в сколько-нибудь разумное время для почти любого звука.
Размер такого файла после такой обработки может запросто перевалить за не то, что размер оригинального файла, так и за все мыслимые рамки.
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных