коды для синтезатора мелодий nokia
нужны мелодии для синтезатора мелодий на нокиа желательно цифрами, но можно и нотами
Сайт: Benny Benassi: Satisfaction
38*0878**0930994*440390878**093*04030403039078**0930994*440390878**093*040304030
Темп 125 Слушать
Дискотека Авария: Новогодняя
2*0281#7**1*#239281#06**0499#78028*19#58**#69#7819*#
Темп 125.
«Мурка»
68#6#96886#7969#58#49#4884#4929#0828*#29#2882#4929#2882#4990
948#42#028492#092#1#7**6#1*#79**0868#6#1*#7**6#59#4884#299#0
Темп 125 Слушать
Queen: The Show Must Go On
6865#6906865#59#48#49#086865#69058#6719*#28799**08818*#2879**0781*#21#2321#7**7864999#
Темп 125.
Depeche Mode: Das model
58199*088288#21290868**#590858199*088288#21290868**#590
8299*#2088818886999**#08881888*290818291821999
Темп 140.
«Мобила» из к-ф Бумер
38*590958390968565656567909
Темп 140.
Тема из к/ф. «Бригада»
588#2*#1#329#28#7**1*#2#3928#5999**#5888#2*#1#3299#188#7**69#784999#5888#2*#1#329#28#7
**1*#2#3928#499**#08858#68#719*#78**599#088588#76#5#49#599#
Темп 90
ВВ «Весна»
688#1*199#28#18#1#196**#44#29*#4828#2#19#19688**#1*199#28#18#1#196**#44#29*#28#1#16**#6
Темп 112
Агата Кристи «Опиум для никого»
58*29*#287**59085829*#287**590858555#545972*058**29*#287**59085829*#287**59058555#5459908
Темп 100
Вирус «весна»
2*68**#49*28#212968**#29*#2816**#4968#1*22699#**
Темп 120
Генералы песчаных карьеров
245654329684859994886584999388548399928845654329219688218699958816869992884565432968 485999488654354394
Темп 180
Коды для синтезатора мелодий nokia
Мелодии для телефонов Nokia. Катят всем моделям, где есть «Синтезатор мелодий». Нужно всего лишь внимательно ввести в синтезаторе нижеизложенные коды, выбрать темп, который указан под каждой мелодией и сохранить.
Список мал. Скоро, благодаря Вам, будет НАМНОГО больше! (см. внизу страницы)
Benny Benassi: Satisfaction
38*0878**0930994*440390878**093*04030403039078**0930994*440390878**093*040304030
Темп 125 Слушать
Дискотека Авария: Новогодняя
2*0281#7**1*#239281#06**0499#78028*19#58**#69#7819*#
Темп 125.
«Мурка»
68#6#96886#7969#58#49#4884#4929#0828*#29#2882#4929#2882#4990
948#42#028492#092#1#7**6#1*#79**0868#6#1*#7**6#59#4884#299#0
Темп 125 Слушать
Queen: The Show Must Go On
6865#6906865#59#48#49#086865#69058#6719*#28799**08818*#2879**0781*#21#2321#7**7864999#
Темп 125.
Depeche Mode: Das model
58199*088288#21290868**#590858199*088288#21290868**#590
8299*#2088818886999**#08881888*290818291821999
Темп 140.
«Мобила» из к-ф Бумер
38*590958390968565656567909
Темп 140.
Тема из к/ф. «Бригада»
588#2*#1#329#28#7**1*#2#3928#5999**#5888#2*#1#3299#188#7**69#784999#5888#2*#1#329#28#7
**1*#2#3928#499**#08858#68#719*#78**599#088588#76#5#49#599#
Темп 90
ВВ «Весна»
688#1*199#28#18#1#196**#44#29*#4828#2#19#19688**#1*199#28#18#1#196**#44#29*#28#1#16**#6
Темп 112
Агата Кристи «Опиум для никого»
58*29*#287**59085829*#287**590858555#545972*058**29*#287**59085829*#287**59058555#5459908
Темп 100
Вирус «весна»
2*68**#49*28#212968**#29*#2816**#4968#1*22699#**
Темп 120
Генералы песчаных карьеров
245654329684859994886584999388548399928845654329219688218699958816869992884565432968 485999488654354394
Темп 180
Коды для синтезатора мелодий nokia
Benny Benassi: Satisfaction
38*0878**0930994*440390878**093*04030403039078**0930994*440390878**093*040304030
Темп 125 Слушать
Дискотека Авария: Новогодняя
2*0281#7**1*#239281#06**0499#78028*19#58**#69#7819*#
Темп 125.
«Мурка»
68#6#96886#7969#58#49#4884#4929#0828*#29#2882#4929#2882#4990
948#42#028492#092#1#7**6#1*#79**0868#6#1*#7**6#59#4884#299#0
Темп 125 Слушать
Queen: The Show Must Go On
6865#6906865#59#48#49#086865#69058#6719*#28799**08818*#2879**0781*#21#2321#7**7864999#
Темп 125.
Depeche Mode: Das model
58199*088288#21290868**#590858199*088288#21290868**#590
8299*#2088818886999**#08881888*290818291821999
Темп 140.
«Мобила» из к-ф Бумер
38*590958390968565656567909
Темп 140.
Тема из к/ф. «Бригада»
588#2*#1#329#28#7**1*#2#3928#5999**#5888#2*#1#3299#188#7**69#784999#5888#2*#1#329#28#7
**1*#2#3928#499**#08858#68#719*#78**599#088588#76#5#49#599#
Темп 90
ВВ «Весна»
688#1*199#28#18#1#196**#44#29*#4828#2#19#19688**#1*199#28#18#1#196**#44#29*#28#1#16**#6
Темп 112
Агата Кристи «Опиум для никого»
58*29*#287**59085829*#287**590858555#545972*058**29*#287**59085829*#287**59058555#5459908
Темп 100
Вирус «весна»
2*68**#49*28#212968**#29*#2816**#4968#1*22699#**
Темп 120
Генералы песчаных карьеров
245654329684859994886584999388548399928845654329219688218699958816869992884565432968 485999488654354394
Темп 180
Забытая музыка или немного о Nokia 3310, PC-Seaker’е и генерации MIDI файлов (ч1)
Здесь мы немного поговорим о формате мелодий (RTTL) в старых моделях телефонов, о воспроизведении таких мелодий с помощью обычного PC-Speaker’а компьютера, а так же о создании (генерации) MIDI файлов. Все мои мысли я буду подкреплять кодом на языке Pascal.
Сразу оговорюсь, что эта заметка скорее всего не представляет для большинства уже никакого практического интереса и создана автором скорее для себя, на память так сказать… Но хватит лирики, начнем.
Теория.
Я думаю, что многие еще помнят, как сидя на галерке в школе или институте перепечатывали из телефона товарищей мелодии вида “8e,16d,16b4,16a4,16b4,8a4,16a4,16a#4”. Этот так называемый RTTL формат записи мелодий. Подробно описывать его здесь смысла нет, поскольку описание полностью доступно в интернете, но для дальнейшего понимания простейший пример мы рассмотрим. Итак, возьмем такую RTTL мелодию:
Как можно заметить, формат имеет вид
[название:длительность,октава,скорость в минуту(BPM):сама мелодия].
Нам понадобятся следующие параметры:
“d=4” Длительность ноты по умолчанию. Это значит, что в записи самой мелодии, когда мы захотим проиграть ноту a “ля” длительностью 4, нам не обязательно будет записывать ее как “4a”. Достаточно будет записать ее просто как “a”. Здесь же отмечу, что если сравнивать длительность RTTL и длительность ноты в музыкальном понимании, то идет простое соответствие – 1 / длительность RTTL. Таким образом, “d=4” в записи RTTL означает, что мы играем ноты по умолчанию, с длительностью “одна четвертая”. Если d=6, то “одна шестая” и так далее.
“o=5” Октава по умолчанию. Из теории музыки вспомним, что октава – это удвоенная частота между одинаковыми нотами. Так, если нота “ля” четвертой октавы имеет частоту 440 Гц, то та же нота “ля” пятой октавы будет иметь частоту 880 Гц. Ровно так же, как и с длительностью, в дальнейшей записи нам нет необходимости записывать ноту a “ля” пятой октавы, как “a5”. Достаточно просто записать ее как “a” и мы сыграем ноту “ля” пятой октавы с длительностью одна четвертая. Таким образом получается, что в нашем случае запись “a” будет равнозначна записи “4a5”.
“b=160”. Темп, или скорость в минуту (BPM). Чтобы вычислить миллисекунды, которые должна звучать нота, я воспользовался такой формулой: ((60000 / b) / d) * 8, где b – наш темп, а d – длительность ноты. Почему так, я уже признаться и сам забыл. Но это работает 🙂
Дальше начинается сама мелодия. Из описания следует, что формат записи нот в общем случае такой:
[длительность нота октава доп. знак].
С теорией на этом закончим, если остались вопросы, еще раз порекомендую почитать описание RTTL формата. Переходим к практике.
PC-Speaker
Для начала, будем выводить нашу мелодию для простоты на обычный PC-Speaker. В большинстве языков программирования для вывода звука на спикер нам нужно знать всего два параметра – частота и задержка в миллисекундах. Так, в Virtual Pascal существует процедура
Var
Frequency : Array [ 1..8 * 12 ] of word ;
Procedure InitFreqTable; <Процедура инициализации таблицы частот>
Const
HerzOfFirst = 32.703195258 ;
Begin
tmpReal1 := HerzOfFirst; <начнем с первой ноты C первой октавы>
tmpReal2 := exp ( ln ( 2.0 ) / 12.0 ) ; <постоянная, с которой изменяется частота от ноты к ноте>
for i := 1 to 8 * 12 do <12 нот на октаву, 8 октав>
begin
Frequency [ i ] := round ( tmpReal1 ) ;
tmpReal1 := tmpReal1 * tmpReal2;
end ;
End
Таким нехитрым способом мы реализовали проигрыватель RTTL мелодий на PC-Speaker. Полный исходный текст программы, а так же скомпилированная версия, доступны здесь: rghost.ru/2230394 Я использовал для компиляции Virtual Pascal, но я думаю что без проблем должен собраться и в Free Pascal.
В следующей статье поговорим о создании конвертера RTTL 2 MIDI в целом и создании и работе с MIDI файлами в частности. Удачного дня!
Синтезатор мелодий Nokia Composer в 512 байтах
Немного ностальгии в нашем новом переводе — пробуем написать Nokia Composer и сочинить собственную мелодию.
Кто-то из читателей пользовался стареньким Nokia, например, моделями 3310 или 3210? Вы должны помнить его прекрасную функцию — возможность сочинять собственные рингтоны прямо на клавиатуре телефона. Расставляя ноты и паузы в нужном порядке, можно было воспроизвести популярную мелодию из динамика телефона и даже поделиться творением с друзьями! Если вы пропустили ту эпоху, вот как это выглядело:
Не впечатлило? Просто поверьте мне, тогда это казалось действительно крутым, особенно для тех, кто увлекался музыкой.
Музыкальная нотация (нотная запись) и формат, используемые в Nokia Composer, известны как RTTTL (Ring Tone Text Transfer Language). RTTL до сих пор широко используется любителями для воспроизведения монофонических мелодий на Arduino и др.
RTTTL позволяет писать музыку только для одного голоса, ноты можно играть только последовательно, без аккордов и полифонии. Однако это ограничение оказалось убойной фичей, поскольку такой формат легко писать и читать, легко анализировать и воспроизводить.
В этой статье мы попытаемся создать RTTTL-проигрыватель на JavaScript, добавив для интереса немного код-гольфинга и математических приемов, чтобы сделать код как можно короче.
Парсинг RTTTL
Для RTTTL применяется формальная грамматика. RTTL-формат — строка, состоящая из трех частей: название мелодии, ее характеристики, такие как темп (BPM — beats per minute, то есть количество долей в минуту), октава и длительность ноты, а также сам код мелодии. Однако мы будем имитировать поведение самого Nokia Composer, распарсим только часть мелодии и рассмотрим темп BPM как отдельный входной параметр. Название мелодии и ее служебные характеристики оставлены за рамками этой статьи.
Мелодия — это просто последовательность нот / пауз, разделенная запятыми с дополнительными пробелами. Каждая нота состоит из длительности (2 / 4 / 8 / 16 / 32 / 64), высоты (c / d / e / f / g / a / b), опционально знака «диез» (#) и количества октав (от 1 до 3, так как поддерживаются только три октавы).
Самый простой способ — использовать регулярные выражения. Новые браузеры поставляются с очень удобной функцией matchAll, которая возвращает набор всех совпадений в строке:
Первое, что нужно выяснить о каждой ноте — как преобразовать ее в частоту звуковых волн. Конечно, мы можем создать HashMap для всех семи букв, обозначающих ноты. Но поскольку эти буквы расположены последовательно, их должно быть проще рассматривать как числа. Для каждой буквы-ноты мы находим соответствующий числовой код символа (код ASCII). Для «A» это будет 0x41, а для «a» — 0x61. Для «B / b» это будет 0x42 / 0x62, для «C / c» — 0x43 / 0x63 и так далее:
Нам, вероятно, стоит пропустить старшие биты, мы будем использовать только k&7 в качестве индекса ноты (a=1, c=2,…, g=7). А что дальше? Следующий этап не очень приятный, так как он связан с теорией музыки. Если у нас всего 7 нот, то мы считаем их как все 12. Это происходит потому, что диез / бемоль ноты неравномерно спрятаны между обычными нотами:
Как можно заметить, индекс ноты в октаве увеличивается быстрее, чем код ноты (k&7). Кроме того, он увеличивается нелинейно: расстояние между E и F или между B и C составляет 1 полутон, а не 2, как между остальными нотами.
Интуитивно мы можем попробовать умножить (k&7) на 12/7 (12 полутонов и 7 нот):
Если мы посмотрим на эти числа без цифр после запятой, мы сразу заметим, что они нелинейны, как мы и ожидали:
Но не совсем… «Полутоновое» расстояние должно быть между B / C и E / F, а не между C / D. Попробуем другие коэффициенты (подчеркиванием указаны полутоны):
Понятно, что значения 1.8 и 1.5 не подходят: у первого только один полутон, а у второго — слишком много. Два других, 1.6 и 1.7, похоже, нам подходят: 1.7 дает мажорную гамму G-A-BC-D-EF, а 1.6 дает мажорную гамму A-B-CD-E-F-G. Как раз то, что нам нужно!
Теперь нам нужно немного изменить значения так, чтобы C было равно 0, D было 2, E было 4, F было 5 и так далее. Мы должны сместить на 4 полутона, но вычитание 4 сделает ноту A ниже ноты C, поэтому вместо этого мы добавляем 8 и вычисляем по модулю 12, если значение выходит за октаву:
Мы также должны принять во внимание знак «диез», который ловится группой m[3] регулярного выражения. Если он присутствует, следует увеличить значение ноты на 1 полутон:
Наконец, мы должны использовать правильную октаву. Октавы уже сохранены в виде чисел в группе регулярных выражений m[5]. Согласно теории музыки, каждая октава — это 12 семинот, поэтому мы можем умножить число октавы на 12 и добавить к значению ноты:
Clamping
Что будет, если кто-то укажет количество октав как 10 или 1000? Это может привести к ультразвуку! Нам следует разрешить только правильный набор значений для подобных параметров. Ограничение числа между двумя другими обычно называется «clamping». В современном JS есть специальная функция Math.clamp(x, low, high), которая, однако, пока недоступна в большинстве браузеров. Самая простая альтернатива — использовать:
Но поскольку мы стараемся максимально сократить наш код, можно заново изобрести колесо и отказаться от использования математических функций. Мы используем значение по умолчанию x=0, чтобы clamping работал и с undefined-значениями:
Темп и длительность ноты
Мы рассчитываем, что BPM будет передан в качестве параметра функции out play(). Нам остается только валидировать его:
Теперь, чтобы вычислить, сколько нота должна длиться в секундах, мы можем получить ее музыкальную продолжительность (целая / половинная / четвертная /…), которая хранится в группе регулярного выражения m[1]. Используем следующую формулу:
Если мы объединим эти формулы в одну и ограничим продолжительность ноты, мы получим:
Также не стоит забывать и про возможность указания нот с точками, которые увеличивает длину текущей ноты на 50%. У нас есть группа m[2], значением которой может быть точка . или undefined. Применяя тот же метод, который мы использовали ранее для знака «диез», получаем:
Теперь мы можем рассчитывать номер и продолжительность для каждой ноты. Пора воспользоваться API WebAudio, чтобы сыграть мелодию.
WEBAUDIO
Нам нужны только 3 части из всего API WebAudio: аудиоконтекст, осциллятор для обработки звуковой волны и gain-нода для включения / выключения звука. Я буду использовать прямоугольный осциллятор, чтобы мелодия напоминала тот самый ужасный звонок старых телефонов:
Этот код сам по себе еще не создаст музыку, но, так как мы распарсили нашу RTTTL-мелодию, мы сможем указать WebAudio, какую ноту играть, когда, с какой частотой и как долго.
Все ноды WebAudio имеют специальный метод setValueAtTime, который планирует событие изменения значения (частота или усиление узла).
Если вы помните, ранее в статье у нас уже был код ASCII для ноты, сохраненный как k, индекс ноты как n, и у нас была duration (продолжительность) ноты в секундах. Теперь для каждой ноты мы можем сделать следующее:
Это всё. Наша программа play() теперь может воспроизводить целые мелодии, записанные в нотации RTTTL. Вот полный код с небольшими уточнениями, такими как использование v в качестве ярлыка для setValueAtTime или использование однобуквенных переменных (C=контекст, z=осциллятор, потому что он производит похожий звук, g=усиление, q=bpm, c=clamp):
При минификации с помощью terser этот код занимает всего 417 байт. Это все еще ниже поставленного порога в 512 байт. Почему бы нам не добавить функцию stop() для прерывания воспроизведения:
Получается все еще около 445 байт. Если вы вставите этот код в консоль разработчика, вы сможете воспроизвести RTTTL и остановить воспроизведение, вызвав JS функции play() и stop().
Я думаю, добавление небольшого UI для нашего синтезатора сделает момент создания музыки еще более приятным. На этом этапе я бы предложил забыть о код-гольфинге. Можно создать крошечный редактор для RTTTL-мелодий без сохранения байтов, используя обычный HTML и CSS и включая минифицированный скрипт только для воспроизведения.
Я решил не размещать здесь код, так как это довольно скучно. Вы можете найти его на github. Также вы можете попробовать демо-версию здесь: https://zserge.com/nokia-composer/.
Если муза покинула вас и писать музыку совсем не хочется, попробуйте несколько существующих песен и насладитесь знакомым звуком:
Надеюсь, вам понравилась эта статья. Вы можете следить за новостями на Github, в Twitter или подписываться через rss.