Архив сообщества
2011 — 2019
Аватар Editor TEH Chaos-neutral

midi2piano, новая, продвинутая версия от Эдитора (теперь работает правильно!)

Автор: Editor TEH Chaos-neutral · 15.09.2016, 21:45 · 62 сообщений

Сообщений в теме: 62

Editor TEH Chaos-neutral#51

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 и и теперь проблема становится гораздо веселее.

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

А, ещё есть проблема дискретизации: данные хранятся в цифровом формате, тогда как микрофон - аналоговое устройство (почти всегда). Твоя функция не будет непрерывной. Проблему можно исправить интерполяцией, но это не то, что нужно.

Скопировать ссылку
qed#53

Не всегда задачу можно решить красиво. Здесь определённо придётся использовать интерполяцию, мне показалось это слишком очевидным, чтобы что-то об этом написать. Ещё придётся выкинуть часть данных, которые не войдут в множество A. Да, это сильно скажется на точности результата, но высокая точность для этой задачи не нужна.

Я не спорю, что после преобразования Фурье в итоге будет огромное количество синусоидальных функций, суперпозиций которых может быть очень большое количество. Однако, во первых, midi нужны только целые ноты. Во вторых, при игре на реальных инструментах, в соответствии со сложившейся музыкальной традицией, люди играют также только целые ноты(если считать #/b за отдельные самостоятельные ноты). Из-за этого количество суперпозиций уменьшается, так как конкретный аккорд может быть составлен только из конкретного набора нот. Можно пойти ещё дальше и вспомнить, что в традиционной музыке считается, что аккорд всегда начинается с низкой и заканчивается высокой нотой.

Понятно, что даже со всем этим, результат перевода mp3 -> midi будет не очень точным. Но, это в любом случае быстрее и проще будет, чем самостоятельно в midi редакторе набирать какой-то трек. Допиливать всё равно придётся.

Скопировать ссылку
alkoz#55
98sec (14 March 2017 - 13:17) писал:

Всё было сделано

Мы тут не ОГГ в МИДИ конверить пытаемся, и не ноты из МИДИ рендерим. Читать оп надо. Алсо, некрофил.

Скопировать ссылку
98sec#56
alkoz (14 March 2017 - 14:35) писал:

Мы тут не ОГГ в МИДИ конверить пытаемся, и не ноты из МИДИ рендерим. Читать оп надо. Алсо, некрофил.

Чуть выше обсуждали собственно конвертацию mp3(ogg)→midi

Скопировать ссылку
Editor TEH Chaos-neutral#57

Цитата

Во вторых, при игре на реальных инструментах, в соответствии со сложившейся музыкальной традицией, люди играют также только целые ноты(если считать #/b за отдельные самостоятельные ноты).

Цитата

люди играют также только целые ноты

ТЫ ЧЕ БЛЯТЬ ЕБАНУТЫЙ?!

Цитата

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

А теперь смотри в чем проблема: 100% инструментов (за исключением виртуальных) не выдают звук используя идеальные ноты, которые можно легко сократить до синусоид. Каждая нота в реальном инструменте представляет собой суперпозицию очень большого количества волн. Например, в том же A4 может быть немного A3, ещё меньше A2, а ещё и в разных фазах и с разными амплитудами.

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

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

Размер такого файла после такой обработки может запросто перевалить за не то, что размер оригинального файла, так и за все мыслимые рамки.

Скопировать ссылку
alkoz#58
98sec (15 March 2017 - 01:01) писал:

Чуть выше обсуждали собственно конвертацию mp3(ogg)→midi

Видишь, что ты наделал? Ты разбудил Эдитора.

Скопировать ссылку
98sec#59
alkoz (15 March 2017 - 06:17) писал:

Видишь, что ты наделал? Ты разбудил Эдитора.

Да он и спал то не особо глубоко.

Скопировать ссылку
Jarl#61
Editor TEH Chaos-neutral (17 August 2017 - 03:36) писал:

Всем кто этим пользуется -- перекачайте по ссылке из ОП-поста.

бэкдуров надеюсь доьавил?

Скопировать ссылку

Обратно в Разработка