?

Log in

No account? Create an account

Previous Entry | Next Entry

Дорическое


Major Scaled #1 : Metallica - "Nothing Else Majeur" from major scaled on Vimeo.

Там еще 3 есть: Джанго, Дорз и R.E.M. Минорный лад сменен мажорным. Есть у кого-нибудь идеи, как такое может быть сделано (имея в виду математику преобразования, конечно)? Дискретную обработку сигналов вообще я понимаю.

Tags:

Comments

raiv_ixx
Jan. 25th, 2013 01:46 am (UTC)
Ну вообще - фурье, потом сдвиг частот, потом обратно фурье... ) Я бы так делал. Математика там не сверхсложная вроде, если на длину не заморачиваться. Полутона потеряются местами... Но в целом в задаче "выделить частоту, посчитать громкость и полученную картину применить к другой частоте" - не вижу ничего сверхъестественного, если обработка не идет на лету.
Матрица м на н, где м - частоты, а н - нарезка по времени. Тут кстати судя по не очень высокому качеству звука и точек было не так много... А дальше руками передвигать строки в матрице) Я думаю, что если выкинуть шумы мы получим пару десятков разных частот, не больше...

Ну и металлический звук отчасти намекает на потери от прямого - обратного фурье.

Edited at 2013-01-25 01:55 am (UTC)
fregimus
Jan. 25th, 2013 05:24 am (UTC)
Это не работает на практике, потому что музыкальный сигнал существенно нестационарный, а преобразование в частотный домен теряет некоторую часть временно́й информации. «Некоторая» часть оказывается слишком большой — именно это означает, что он нестационарный существенно. Иными словами, если надо получить высокое разрешение по частоте, это автоматически означает длинные окна преобразования, а все изменения на протяжении окна теряются: нельзя восстановить момент внутри окна, на котором случилось изменение.
raiv_ixx
Jan. 25th, 2013 02:36 pm (UTC)
Качество звука слышно что не лучшее. И возможно что они както это подогнали... По крайней мере с распознаванием голоса используется похожая на описанную мной техника, но там одна "дорожка", и при нескольких говорящих оно начинает безбожно глючить. Так что хз... Просто я сталкивался с преобразованиями голоса, а не музыкальных композиций, и специфики именно музыки я не знаю. Но с длинными окнами - возможно брать окна внахлест, чтобы получить высокое разрешение по частоте, и дальше както выделять изменения при сдвиге окна, и работать уже с ними. Математику процесса я себе пока слабо представляю, но если бы мне как программисту поставили подобную задачу, я бы копал именно туда.
fregimus
Jan. 25th, 2013 06:09 pm (UTC)
Совершенно верно, так и делают: окна складывают внахлест, и каждое еще умножают на функцию, равную 1 в середине окна и 0 по краям (“window function”), чтобы эффекты, связанные с нарезкой на окна, уменьшить. (Из математических соображений, обычно это функция sinc x = (sin x)/x).

Еще можно избежать ограничений, подняв частоту дискретизации — как бы пересчитать все не в 44.1 КГц, а в 44 МГц, например, в 1000 раз выше, так что каждый исходный отсчет дает 1000 отсчетов), затем обработать, а потом результат перевести обратно в низкую частоту дискретизации. Тут есть некоторые способы оптимизации, чтобы избежать прямого перевода и многократного увеличения данных, когда это делается «виртуально», в процессе вычисления (“multirate processing”); но, само собой, числа операций тут не уменьшишь, ресурс процессора тоже требуется тысячекратный.

Ну, и еще есть всякие сумасшедшие нелинейные методы, типа кепстрального анализа (буквы «спектрального» переставлены), которыми можно сигнал в логарифмической шкале по частоте кромсать, что для музыки естественнее. Этой математики я толком не понимаю.
raiv_ixx
Jan. 25th, 2013 08:32 pm (UTC)
ясненько)