В качестве аудио выведите следующую выдержку из канона Пахельбеля в D:
правила
- Может использоваться любой формат / кодировка, если кодек существовал до создания этой задачи
- Можно использовать любой инструмент (настоящий инструмент, синтез MIDI и т. Д.)
- Темп должен быть 65 ударов в минуту (как указано в нотах) - если вы не можете получить ровно 65 ударов в минуту, вы можете использовать любой темп в пределах (включительно) диапазона 64,75 - 65,25
- Ноты в концертной подаче
- Необходимо использовать настройку равного темперамента (в частности, 12-ET с A4 = 440 Гц)
Для справки приведем фрагмент кода, который будет воспроизводить отрывок:
Ответы:
JavaScript (ES7),
249242241 байтСпасибо @Neil и @PatrickRoberts за некоторую экономию байтов!
объяснение
Обозначения упакованы в строку, где каждый символ представляет собой одну заметку в виде базовой цифры 36. Значения записных определяются по формуле ,
(19 - pitch) * time + 1
гдеpitch
есть число полутонов меньше , чем A5 иtime
является1
для шестнадцатого или20
для дрожи. В0
конце останавливаетсяfor
цикл.Темп составляет
65,22 ударов в минуту.Правка: сейчас ровно 65 ударов в минуту, еще на 2 байта .Это объяснение / демонстрация использует
Math.pow
вместо**
совместимости браузера. Он также устанавливает усиление осцилляторов.3
так, чтобы финальный аккорд не заставлял ваши уши кровоточить (усиление по умолчанию -1
).Вы можете нажать кнопку выше, чтобы протестировать ее в любом браузере, который поддерживает HTML5 Web Audio API .
источник
880*2**(-~-n%20/12)
должен сэкономить вам несколько байтов.-~-
, изменив формат упаковки заметок (+ 1
формула есть только потому, что мне нужно0
остановитьfor
цикл, и мне было лень об этом много думать, прежде чем я отправлю сообщение).c=new AudioContext;
сwith(new AudioContext)
и отвернув два вхожденияc.
в программе.<<
его, он бы к целому числу.Mathematica,
212152139135 байтовВыводит
Sound
объект, который воспроизводит Canon Pachelbel в D при нажатии кнопки Play. Инструмент представляет собой MIDI-инструмент № 41 "Скрипка".Аудио
Нажми на меня!
объяснение
Найдите буквенные числа каждого символа в строке («a» -> 1, «b» -> 2 и т. Д.), Обернутые символом a
List
. (Эта строка представляет Канон Пахельбеля в D)Установите
s
дляSoundNote
функции, чей инструмент # 41. Установите длительность 1 и отобразите эту функцию на каждый элемент вList
(таким образом создаваяSoundNote
примитивные объекты).Сделайте последнюю триаду. (Продолжительность
16
предназначена для того, чтобы сделать последнюю ноту в 16 раз длиннее - целая нота в шестнадцать раз больше шестнадцатой ноты.)Сделайте
Sound
объект18.5
длиной в секунды (потому что темп составляет 65 ударов в минуту [5 тактов 4/4 с темпом 65 ударов в минуту = приблизительно 18,5 секунд]).126-байтовая версия, не конкурирующая
Не конкурирует, потому что выходные данные содержат две шестнадцатые ноты вместо восьмой ноты, и разделение весьма заметно.
источник
Bubblegum , 203 байта
Попробуйте онлайн!
Это hexdump (обратный с
xxd -r
) исходного кода. MIDI-файл, который он создает, выглядит следующим образом (также hexdump):источник
BBC BASIC, 141 ASCII символов (65.217BPM)
Пересмотрено с учетом ограничения по темпу. Обновлю объяснение позже.
BBC BASIC, 123 символа ASCII (неконкурирует как 60BPM)
Скачать переводчик можно по адресу http://www.bbcbasic.co.uk/bbcwin/download.html.
Воспроизведение песни непосредственно при запуске.
Ungolfed
объяснение
j
флаг, указывающий, находимся ли мы в первых 4 тактах или в финальном аккорде. ИСТИНА-1
в BBC BASIC.SOUND
Оператор принимает 4 параметра:КАНАЛ: для первых 4 тактов это канал 1. Для 3-х нот аккорда в 5-м такте номера каналов равны 201, 202 и 203 шестнадцатеричным (513,514 и 515 десятичных.) Это означает, что играть на каналах 1,2 и 3, начальное значение 2 означает одновременное воспроизведение 2 нот на других каналах (т. Е. Воспроизведение аккорда 3 нот).
ОБЪЕМ: Задано как отрицательное значение, потому что положительные значения представляют другие эффекты (звуковые огибающие.). Установите на -9 (будет до -15, что является самым громким.)
PITCH: для этой мелодии диапазон от D4 = 108 до A5 = 184. Каждый целочисленный шаг составляет 1/4 полутона. Значения сохраняются в виде кодов ASCII в диапазоне от 54 до 92 и дублируются для восстановления правильного значения. 1/8 примечания сохраняются как дубликаты 1/16 примечания. Финальный аккорд сохраняется в виде трех отдельных тонов, а длина ноты варьируется до всей ноты, как показано ниже.
ПРОДОЛЖИТЕЛЬНОСТЬ: в 1/20 секунды. Длительность 1/16 ноты составляет 5/20 секунды, поэтому 60 1/4 ноты в минуту (недостаточно разрешения, чтобы сделать темп более точным.) Вся нота составляет 5 - (- 75) = 80 единиц (4 секунды). ) длинная.
источник
Befunge, 242 байта
Мелодия записывается на стандартный вывод в формате файла MIDI. Вам нужно будет перенаправить этот вывод в файл .mid , чтобы воспроизвести отрывок.
Попробуйте онлайн! Хотя я не думаю, что в настоящее время возможно сохранить вывод таким образом, чтобы он сохранял двоичную целостность данных.
объяснение
Первая строка важна только для жестко закодированного MIDI-заголовка, который выводится в начале второй строки. Оставшаяся часть второй строки кодирует последовательность нот как их значения MIDI, которые обычно являются ASCII. В третьей строке записываются MIDI-команды для воспроизведения этих нот, причем длительность вычисляется автоматически (каждая нота является полуквалом, если только i% 14 == 0). Последний аккорд обрабатывается как особый случай в строках 4 и 5 (так как для этого требуется одновременное нажатие нескольких клавиш), а в шестой строке записывается окончательный маркер конца MIDI-трека.
источник
C
248 228 210 198 193191 байтВ результате получается последовательность из 8-битных беззнаковых сэмплов, предназначенная для воспроизведения со скоростью 8000 сэмплов в секунду. Если у вас более старая установка UNIX / Linux, вы можете перенаправить вывод в
/dev/audio
. В некоторых новых дистрибутивах Linux вам может потребоваться передать вывод в проигрыватель командной строки ALSAaplay
источник
SmileBASIC, 115 байт
Использование хорошего инструмента стоило 4 дополнительных байта :)
источник
JavaScript (ES6) с использованием WAV.js , 325 байт
источник