Коды мелодий на нокиа 3310

Коды мелодий на нокиа 3310

Любителям всего старого, но безумно интересного, добрый вечер!

Помните такой телефон — Nokia 3310? Разумеется, помните! А такую штуку как синтезатор мелодий в нем? Тоже помните, отлично. А по старым, теплым и ламповым мелодиям скучаете? Вот и я скучаю. А еще мне на глаза попался сайтик с более чем сотней нотных листов для этого редактора. И что я должен был оставить эту прелесть без внимания? Нет уж. Что я сделал? Правильно! Взял и написал точно такой же генератор мелодий, который позволяет на выходе получить Wave — файл с мелодией. Интересно, что из этого получилось? Тогда прошу под кат.

Nokia Composer был встроен в целую кучу телефонов, подобных Nokia 3310. Кроме 7 нот, он позволял записать 5 диезов, указать октаву и длительность в частях. А еще были ноты, которые не звучали — паузы. То есть «нота» в Composer’e была действительно нотой.

Сама запись ноты для Composer’a выглядела так:

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

Давайте напишем скрипт, который будет принимать ноту, как она есть и возвращать кортеж параметров.

(пишем на Python 2.7, да)

Во! То есть, сначала мы переводим ее в ВЕРХНИЙ РЕГИСТР, а затем — с помощью регулярных выражений разбираем на составляющие. Отдельно проверяем наличие точки (увеличиваем в 1.5 раза) и учитываем паузу.

Готото!
Теперь если передать функции, например, 16C2, на выходе получим (2, C, 2) то есть длительность в долях, ноту и октаву.

Что? Откуда взялось число 32? Это просто
Оригинальный Nokia Composer позволял установить длительность ноты как 1/32 «полной» ноты. При этом для него существуют еще и 1/16, 1/8, 1 / 4, 1 /2 и 1 длительности. То есть каждая следующая длительность отличается от предыдущей ровно в 2 раза. Тогда мы можем сделать вот что:

Возьмем 1/32 ноты как «единичную ноту». Тогда 1/16 — это уже 2 единичных ноты, 1/8 — 4 и так далее. Тогда мы можем взять и поделить 32 на полученную длительность.

С этим разобрались. Теперь осталось понять, как мы будем все это дело превращать в Wav — файл.

Если очень грубо — в Wave файле, кроме заголовка записаны напряжения, которые подаются на динамик. Если чуть точнее — части напряжений от максимального. То есть, если в двухбайтовом фрейме записано число 32765 — это означает, что нужно подать максимальное напряжение. Изменяя уровни напряжений с течением времени, мы можем добиться колебаний мембраны динамика. А если эти колебания будут в нужном нам диапазоне… Правильно! Мы услышим звук определенной частоты.

Теперь, о том, как это сделать.

Давайте напряжем память и… вспомним школьный курс физики! Примерно ту часть, в которой говорится о гармонических колебаниях.

Если очень просто: гармонические колебания — тип колебаний, колеблющаяся величина которых изменяется по закону синуса (ну или косинуса, как хотите)

Общая формула этого безобразия выглядит как:

При этом циклическая частота это

Вспомнили? Отлично! Теперь надо понять — зачем.

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

32765 — Фрейм у нас двухбайтовый, поэтому максимальное значение амплитуды ровно 32765. VOL — переменная, задающая громкость. Изменяется в диапазоне от 0 (полная тишина) до 1 (орет как на площади)

6.28 — это всего-навсего 2*Pi. Можно каждый раз высчитывать, но мы ж не звери.

FREQ — А это то, ради чего все и затевалось — нужная нам частота.

i/44100 — время, относительно начала отсчета. Почему мы делим на 44100? А потому что это частота дискретизации выходного файла (ну это я так придумал. Можно и меньше. Качество будет ниже). За секунду проходит 44100 отсчетов, поэтому и делим. Надеюсь, получилось объяснить

Ну вот. Один фрейм мы задавать научились. Теперь нужно сделать так, чтобы это все работало. То есть, помимо частоты задать еще и длительность.

А раз уж частота фиксированная… Ага! Обернем в цикл.

Опять непонятности. Откуда взялось TIME/10*441? Из моего воображения. Нет, серьезно. Это я так решил, что минимальное время звучания — 0.001 секунда. Как я уже говорил — один отсчет (при данной частоте дискретизации) это 1/44100 секунды. Соответственно, 0.001 секунда это 44.1 отсчета. А 44.1 = 441/10. А если надо задать N миллисекунд… домножим, ага. Вот мы и получаем то, что написали (TIME — это как раз таки время в миллисекундах, да)

Так ну и обернем все это дело функцию, надеюсь никто не против?

Читайте также:  Как установить программу вайбер на телефон

Во! Теперь мы можем генерировать звук абсолютно любой частоты.

Осталось записать то, что получилось в wave — файл.

Для работы с Wave в Python (по крайней мере в 2.7) есть прелестный модуль с незабываемым названием — Wave. А для работы со всяческими структурами — struct (вообще, до определенного момента, Python — безумно логичный язык).

После некоторых плясок с бубном и прочих извращений получилась вот такая функция:

(про нее рассказывать не буду, потому как во — первых все понятно, а во — вторых — не будем отдаляться от темы)

Ну вот. Теперь можно сгенерировать звук!
Пробуем.

Полная громкость, 4 килогерца, 5 секунд.
Посмотрим что получилось?

Вот так это звучит:

А вот так выглядит:

Ну, в общем — то, что хотели, то и получили. Звук, правда довольно неприятный.

Кстати, если мне не изменяет память, что в старой библиотеке для Turbo Pascal звук задавался не синусоидой, а меандром. На самом деле достаточно просто изменять напряжение на динамике. Просто синусоида симпатичнее, чем меандр или пила.

Ну вот. Теперь у нас есть функция генерирующая звук нужной частоты и длительности и функция, записывающая то, что мы наделали в настоящий файл.

Теперь нужно научиться записывать ноты.

Чистая (инструментально не окрашенная) нота — это звук определенной частоты.

Диез чистой ноты — звук, с частотой на полтона выше чистой ноты

Бе — моль — звук с частотой на полтона ниже чистой ноты. Бе — моли оригинальный Composer (еще помните, что мы там хотели написать? Отлично!) задавать не дает, поэтому с бе — молями работать не будем. Ну их.

Октава — если упрощенно, это множитель частоты ноты. То есть частота Ре второй октавы вдвое выше той же Ре первой октавы.

Найдем на просторах интернета таблицу нот и их частот

И сделаем из нее словарь.

(Вообще, наверно, правильнее писать C#, а не #C, но как правило все мелодии для Composer’a указывались именно в таком формате)

А теперь напишем еще одну функцию, генерирующую звук определенной ноты

Так, тут надо еще кое — что дорассказать.

С первой частью все понятно — значение нужной частоты берется из словаря, домножается на октаву и пишется в список.

Зачем нужна вторая?

Очень просто. Если желаемая длительность не кратна периоду синусоиды, то в момент времени T1 на динамик может подаваться большое напряжение, а в T1+1 уже ничего подаваться не будет. На мой медвежий слух, это звучит как внезапно оборвавшаяся фраза убитого товарища — неприятно. Поэтому мы доводим нашу синусоиду до ближайшего нуля. При высокой частоте дискретизации заметно это будет мало, а на слух будет выглядеть как та же обрывающаяся фраза товарища, если на глазах мертвеющий (но вопящий) товарищ падает в колодец. Тоже не Бог весть что, но для генерации Нокиевских мелодий сгодится.

Теперь осталось написать функцию, которая будет принимать список нот и поэлементно скармливать его генератору.

Приблизительно вот так.

Снова что — то непонятно? Это нормально, я тоже ничего не понимаю, сейчас разберемся.

BPM — это количество ударов в минуту. Грубо говоря, это «скорость игры». Это самое BPM равно количеству четвертных нот за одну минуту. То есть одна четвертная нота должна играться 60/BPM секунд. А поскольку, мы решили, что длительность единичной ноты у нас это 1/32 — это значение равно 60/32*4/BPM = 7.5/BPM. Звучит одна четвертная нота ровно 1000 миллисекунд (композиторы почему — то так придумали), а потом этот результат домножается еще и на количество таких 1/32 нот.

Когда функция отработает в списке Frame окажется готовый файл, который останется только записать.

Ну и поскольку мне лень писать GUI я люблю консольные интерфейсы, напишем обработчик последовательности нот, который принимает эту последовательность, BPM и имя выходного файла в списке аргументов и скармливает функции Append_Notes()

Теперь осталось только передать программе исходные данные и забрать готовую мелодию.

Читайте также:  Выходы на видеокарте gtx 1060

Вгоняем в генератор…

И забираем результат:

По — моему неплохо.

Еще примеров? Легко!

Хотите сами писать? Попробуйте!

Пропустите через генератор и посмотрите что получится (А кто-то может и на глаз узнает).

Надеюсь, вам понравилось!

Искренне Ваш, слушающий монофонического Моцарта, GrakovNe

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

ALTE DOCUMENTE

Секретные коды к Nokia 3310

*#06# показывает IMEI код

*#0000# — определение версии прошивки.
*#746025625# остановка Sim-Clock (режим позволяющий экономить заряд батареи)

*#3110# for checking the phone’s software (SW) — called firmware revision information. Внимание, использование этих кодов может привести к некорректной работе вашего телефона. Используйте эти коды, только если вы полностью уверены. Вл&# 242g617c 1072;делец сайта не несёт никакой ответственности за возможный причинённый ущерб вашему телефону.

EFR *3370#, отмена #3370# — улучшает качество звука и приёма но быстрее садит батарею
EFR — Enhanced Full Rate , система для улучшенного качества вызова в телефонах GSM, за быстрой разрядки батареи (около 5 %).EFR использует улучшенное кодирование, чтобы улучшить качество вызова, не расширяя полосу
частот.

HRM *4720# , отмена #4720# — уменьшает качество приёма но увеличивает время разряда батареи
HFR — Half Rate — продлевает жизнь батареи где-то процентов на 30, за счет уменьшения примерно в половину полосы частот

*#war0anty# (*#92702689#) — служебная информация: дата изготовления, серийный номер, дата покупки, был ли ремонт и когда. Выход — выключение и включение аппарата.

Команды в специальном меню :
6232 ОК показывает месяц и год выпуска
7332 ОК показывает дату последнего изменения в программе
7832 ОК показывает дату продажи (если введен)
37832 ОК можно ввести дату продажи MMYY (осторожно! потом нельзя изменить)
9268 ОК показывает серийный номер (IMEI)

может быть блокирована 4 видами :
SPROVIDER-LOCK — 1
NETWORK-LOCK — 2
COUNTRY-LOCK — 3
SIMCARD-LOCK — 4
Для проверки статуса этих вводится строка:
# pw+ (MASTERCODE)+( y )#, где
— p = нажать * 3 раза
— w = нажать * 4 раза (в оригинале наоборот w — 3 раза, p — 4)
— + = нажать * 2 раза
— МАSTERCODE = именно та штука, которой Ваш аппарат. Но для проверки статуса вводится 1234567890
— y = номер от 1 до 4
Пример: #pw+1234567890+1# — телефон должен выдать о состоянии SPLOCK, но еще раз отмечу моя 3310 выдает ответ на все 4 запроса, наверное этот ответ на SIMCARD-LOCK

Описание версий прошивок
Изменения от версии 05.79 до 05.87
— SIM ATK:

— Появилась возможность "мягко" останавливать кнопкой "OK" команду SIM ATK " Play Tone "
— Улучшенные функциональные возможности, при редактирование данных в SIM ATK при помощи
команды " Get Input "

— Некоторые из знаков Российских шрифтов отображались как "квадратик". Теперь подобные знаки
отображаются правильно
— В Unicode разделительный знак параграфа (0x2029) отображался как "квадратики" при чтении
полученного сообщения. Теперь этот символ обращается как некоторое возвращение
(символ новой строки)

— Символы словарей Т9 Арабского и Английского не смешаны
— Добавлена Эстонская, Латвийская и Литовская поддержка T9
— все типы календарных примечаний от других телефонов Nokia теперь возможно получать и
сохранять как напоминания
— имен в языках , Суахили, , Индонезийский, Сербский и
— Вариант звонка " Frog " в " Croak "
— Возможность использовать больше 30-ти символов в строках USSD
— поддержка новых видов флэш-памяти

— Исправлена проблема: если хотя бы один Юникод-символ был внесен в SMS-сообщение,
тогда все сообщение конвертировалось в Юникод автоматически
— Счетчик в SMS-сообщениях ведет обратный отсчет постоянно, не обращая внимания
что используется: Юникод или GSM символы
— Усовершенствована служба получения сообщений о доставке отправлений

сообщении, не смотря на то,
что используется: Юникод или GSM символы

— Обновлены языковые пакеты C, D, K и Q
— Русский язык вновь введен в языковой пакет L
— Создан языковой пакет T, включающий следующие языки: английский, французский, африкаанс,
зулу, кхоса , суахили и

— Получение ответов при "запросе справки" будет происходить даже во время блокировки

  • — Из языкового пакета L убраны и добавлены в пакет E русский Т9-словарь и ввод
    — Добавлены некоторые отсутствующие русские символы (например, ранее при входе во время и дату
    вместо символов появлялись знаки вопроса)
    — Добавлены недостающие знаки в венгерский язык
    — Иврит и арабский: в меню "Звонки" появился пункт "Стереть последние звонки"
    — Иврит и арабский: некоторые слова не отображались при наборе
    — Улучшен прием Визитной карточки при получении с длинным именем (номером)
    — Надпись "Сообщение не может быть отображено" больше не появляется при получении SMS-сообщения
    длиной 256 символов
    — Функция прокрутки отсутсвовала при активации SMS T9
    — Улучшения в "Чате": курсор исчезал, при удачной отправке сообщения, и пользователь нажимал "OK"
    или "Назад" для возвращения в чат-лист
    — Изменение звонка при выборе профиля "Мой стиль" (" Nokia tune " на " Get cool ")
    — Улучшен перенос слов при написании их в Латинице и
  • — Добавлен РУССКИЙ Т9-словарь
    — Поддержка SIM-карт с памятью на 45 SMS
    — Возможность установки различных мелодий на входящие SMS-сообщения
    — Удаление SMS на выбор (прочитанные, принятые, исходящие)
    — Автоблокировка клавиатуры тедефона по истечении определенного времени (задается в настройках)
    — Управление профилями (автоматическое включение) в зависимости от времени
    — Добавлено меню "Графика" (графический редактор)
    — Поддержка юникода для SIM ATK
    — Обновлен список названий операторов
  • — Добавлены новые Т9-словари: арабский, венгерский и словацкий
    — Словарь / SMS:
Читайте также:  Как нарисовать стрелки в ворде 2007

— Вирус, приходящий на телефон (SMS с подозрительным заголовком), может быть только удален
— Чат: исправлено местоположение курсора в имени ( нике )
— Иврит: улучшены поиск и шаблоны
— Возможность написания больше, чем одной заглавной буквы в слове (тексте)
— Русский язык: возможность нормального сочетания шрифта Unicode с латинскими буквами в одном
SMS сообщении
— Графическое сообщение: убран пустой экран после звонка (сообщения)
— Улучшен счетчик редактора смайликов

— Возможность смены телефонной линии (клавишей #) только во время ожидания вызова
— Возможность написания телефонного номера со знаком + (номер будет понятен телефону)
— Во время стирания Вами всех записей из телефонной книги, входящий звонок, тем не менее, будет
принят и отобразится на экране
— Возможность посмотреть любой номер из Телефонной книги при заблокированной клавиатуре, но
набрать его нельзя
— Добавлена информация о пустых ячейках памяти при копировании между SIM-картой и телефоном
(уровень защиты: Memory )
— Возможность просмотра (прокрутки) в Телефонной книге записей с пробелами как для латинских,
так и для китайских имен
— Блокировка больше не может быть разблокирована специальным сочетание клавиш

— В состоянии "Дремлет" цифровые (буквенные) клавиши становятся клавишами "Прием звонка"
— Возможен во время ввода Вами нового PIN-кода
— Знак "Евро" при пересылки в графическом сообщении успешно принимается другими телефонами
— Откорректирован счетчик переполнения (языковой пакет G) в Напоминаниях и Телефонной книге
— Исправлено выравнивание в Секундомере и редакторе объединенных цен при прерванной зарядке

— Откорректирована дата при приеме напоминания
— Теперь при сообщении на экране "подождите пока пользователь сотрет текст" ждет, чтобы
пользователь стер текст (ранее стирание производилось автоматически через 5 секунд)
— Увеличена длина текста на экране (ранее она была слишком коротка для отсылки SMS)
— Улучшение качества виброзвонка
— NITZ (автоматическая настройка (обновление) Часов/Даты): Время будет настроено даже тогда,
когда пользователь не настраивал часы

  • — Возможность пользователю самостоятельно удалять созданные SIM-картой SMS сообщения
    — Обновлен список названий операторов

— Новые T9-словари: чешский, польский, иврит
— Текст пользовательского интерфйса (меню) на новых языках
— Украинская (ввода T9 нет)
— Китайский язык
— Исправлен перевод с английского на другие языки некоторых слов в меню телефона

— В телефонной книге возможно использовать смешанный регистр (‘ Abc ‘)
— Исправлен порядок алфавитной сортировки, когда вначале имени стоит пробел
— Поиск в телефонной книге теперь начинается сверху списка
— Исправлена ошибка навигации по телефонной книге в китайском языке
— При сортировке пробелы (пустые места) игнорируются

числа и знаки
— Телефон зависал или перезагружался при посылке SMS, если отсутствовал правильный
Номер Центра сообщений

— Вибрация в Composer останавливается при приеме SMS
— Вибрация включена, при создании тона
— Больше невозможно отправлять полученные тоны

— Калькулятор: Валютный курс теперь сделан с более высокой точностью
— Клавиша Clear теперь работает должным образом в проигрыше мелодии
— Сочетание клавиш ( Shortcut ): отсутствовала возможность перейти в меню Reminder и
Tone с помощью сочетания клавиш
— Общее обновление списка названий оператора и текста пользовательского интерфейса

  • — Устранена проблема «Вставьте СИМ-карту» (‘ Insert SIM’) актуальная ранее для улучшенных 32К SIM карт
    — Исправлен ‘Верхний регистр АВС’ в языковом пакете с китайским языком
    — Функция ‘ Multi Sim Lock ‘ включена в данную версию ПО
    — Дополнена возможность: ввод подчеркнутого текста
Ссылка на основную публикацию
Ключ для word windows 10
Рано или поздно любой пользователь может столкнуться с проблемой поиска ключа Office. Конечно, если лицензия на него приобретена, то таких...
Калибровка монитора macbook pro
Сервисный центр MacPlus (ремонт Apple) раскрывает секреты калибровки дисплея iMac и Macbook Вы замечали, что одни и те же изображения...
Калькулятор градусов и минут сложение и вычитание
Калькулятор, поддерживающий основные арифметические действия над выражениями с градусами. Создан по запросу пользователя. Этот калькулятор выполняет арифметические действия над градусами....
Ключ для эксель 365 лицензионный ключ бесплатно
Еще несколько лет назад компаня Майкрософт планировала свой пакет продавать вместе уже с компьютерами, как сейчас происходит с операционной системой...
Adblock detector