Люди написали много вещей, позволяющих визуализировать одну вещь как другую. Теперь я предлагаю возможность переводить буквы на музыку! Ваша задача - написать программу, которая берет текстовый файл и выводит звуковой файл, в котором каждая буква преобразуется в конкретную заметку C3-C8
.
Отказ от ответственности - я не ожидаю, что музыка будет звучать хорошо, но я надеюсь удивиться.
Характеристики
- Вы берете имя файла в виде строки, а BPM (ударов в минуту) как int
- Вы делаете прописные
A
быть примечаниеC3
- И поднимитесь на полшага для каждого персонажа после в следующем порядке:
ABCDEFGHIJKLMNOPQRSTUVWXYZ ()-,;.'"abcdefghijklmnopqrstuvwxyz
- Да, не каждый символ будет использоваться, поскольку он охватывает слишком много октав.
- Вы переводите каждый символ в файле таким образом
- Положите заметки вместе в данном BPM как квартальные заметки
- Либо сохраните как звуковой файл (я думаю, что midi будет самым простым, но все в порядке), либо воспроизведите его
- Любой вменяемый формат ввода в порядке
- Нет стандартных лазеек
- Это код-гольф, поэтому выигрывает самый короткий код в байтах !
Бонусы
- Разрешить транспонирование вывода - 50 байтов
- Позволяет накладывать несколько дорожек друг на друга, принимая несколько файлов - 75 байт
- Соедините последовательные буквы в одну более длинную ноту - 50 байтов
Изменить: Ух, у нас отрицательные оценки. Я объявлю победителя в субботу.
Ответы:
MATLAB, 159-50-50-75 = -16
Пример ввода
Образец вывода
Генерирует чистые синусоидальные звуковые волны, очень прикольные (пилообразный также возможен, с еще лучшим счетом, но это звучит немного ... слишком прикольно). Работает как функция, поэтому ожидает, что это массив символов (
['abc';'def']
) с одной строкой на каждый трек. Я думаю, что это подпадает под «любой нормальный формат ввода» , но если общее мнение заключается в том, что мне нужно прочитать файл, я думаю, что я могу изменить его. Вводi
- это текстовые дорожки (одинаковой длины),b
ударов в минуту иt
транспонирования (подача 0 для не транспонированных). Он смешивает два синуса в один, компенсируя вход синуса, поэтому я получил все три бонуса, что дало мне отрицательный результат.Версия с использованием входного файла: 211-175 = 36
Входной аргумент
i
теперь представляет имя файла, остальные параметры без изменений. Может не работать на более новых выпусках, потому что я получаю предупреждение, котороеtextread
скоро может быть объявлено устаревшим. РЕДАКТИРОВАТЬ: текстовое чтение, очевидно, автоматически распадается на пробелы, поэтому я исправил это. Кроме того, я думаю, что мог случайно связать некоторых пришельцев со странными звуками, издаваемыми во время тестирования.Какую версию вы предпочитаете? :)
источник
.mat
файлы имеют нормальный формат ввода. Создайте файл .mat с переменной 'i', содержащей ваш текст. Затем добавьтеload(i);
в начале строки 2 верхней версии. Оценка: -16 + 8 =-8
. Я сделаю это, когда ваш комментарий получит больше голосов, чем мой, или когда у ОП есть мнение :)Snap ! - 401 - 75 = 326
Попробуйте это онлайн здесь.
Я использую этот метод подсчета байтов для программы.
Я добавил воспроизведение нескольких звуков одновременно.
Базовая структура такая же, как и в оригинале (см. Ниже), но с добавлением
launch{}
.launch{}
запускает новый поток с кодом внутри, учитывая параллелизм.Код в виде текста:
Оригинальный код, 308.
Счастливчик! есть встроенная игра MIDI.;)
К сожалению, у него нет
indexOf
функции, поэтому мне нужно сделать внешний вызов JavaScript, что довольно дорого.repeat () (#)
Блок поставляется из библиотеки итераций.Код можно записать в виде текста, вот так я получаю 308 байт:
источник
-1
отindexOf
? Прямо сейчас это выглядит, как будто его нет в строке, он делает миди номер 47.Mathematica, 219 - 50 - 75 - 50 = 44
Принимает список входных файлов, BPM и количество полушагов для транспонирования в качестве входных данных и воспроизводит звук (от пианино любой другой инструмент занял бы больше байтов.) Звучит неплохо!
источник
JavaScript (ES6) 377 - 50 - 50 - 75 = 202
Во-первых, вот исполняемый фрагмент, который использует
<input>
поля вместо чтения файла:А теперь актуальная запись:
Три аргумента представляют собой массив строк filepath для одновременного воспроизведения, количество нот в минуту и количество полушагов для транспонирования всех входных данных.
С пробелами и комментариями:
источник