Напишите программу для игры в популярный английский детский стишок.
(Этот файл лицензирован по лицензии Creative Commons Attribution-Share Alike 3.0 Unported . Атрибуция: Helix84 из англоязычной Википедии ; Blahedo из англоязычной Википедии .)
Некоторые статьи Википедии, которые могут быть полезны:
- Twinkle Twinkle Little Star (есть аудиоклип о том, как должен звучать вывод вашей программы)
- Современные музыкальные символы (чтобы узнать о музыкальной нотации, использованной выше)
- Note # Частота нот (герц) (формула для расчета частоты каждой ноты)
Некоторые рекомендации для вашего представления:
Ваша программа должна использовать звуковую карту компьютера. Если ваш язык программирования не имеет удобного доступа к аудиооборудованию, ваша программа должна создать выходной файл в каком-либо стандартном формате, например WAV или MIDI.
Ваша программа должна генерировать вывод. Например, встраивание файла Ogg Vorbis из Википедии будет запрещено.
Качество звука должно быть приемлемым. По крайней мере, песня должна быть легко узнаваемой. Желательно, чтобы это тоже звучало хорошо.
Акцент должен быть сделан на размере кода, качестве звука или на обоих (объясните, какой из них вы выбрали). Элегантные решения также были бы великолепны. Повеселись!
Это код-гольф , поэтому выигрывает самый короткий код
Ответы:
QBasic (56)
Основное внимание уделяется воспоминаниям :)
(Не имею QBasic, чтобы проверить это, хотя)
источник
JavaScript (
214212211 символов)Откройте Safari, Opera или Google Chrome для JavaScript Shell , затем введите код ниже:
Unminified для удобочитаемости (даже тогда это может быть трудно понять):
Еще с несколькими символами это может работать и в Firefox, но вы можете изменить
audio/wav
часть, чтобы, по крайней мере, сохранить файл WAV.источник
open(...)
наAudio(...).play()
(еще 8 символов), чтобы использовать работающий встроенный аудиоплеер Firefox.C # (длина: LOL)
Итак, здесь я реализовал поддержку создания файла .wav из строки, используемой для решения QBasic в C # (одна октава, без случайных ошибок). Акцент был сделан на:
unsafe
блоков кодаисточник
FromDigits["LOL",36]==28101
Это вовсе не похож LOL <суб> 36 </ суб> байт ...Python (259)
источник
import ttls
?C, 277 символов
Perl, 203 символа
Удобно, ОСС «s по
/dev/dsp
умолчанию 8KHZ монодинамики u8; все, что я здесь делаю - это открываю устройство и пишу вычисленные образцы.источник
j,f;main(i){char b[8000];f=open("/dev/dsp",1);for(i=24;i--;write(f,b,j))for(j=0;j<8000;j++)b[j]=(i%4&&j/400%20==9?1:1+sinf(j*powf(2,("@BDEGIG@BDEGBDEG@BDEGIG@"[i]-64)/12.)))*127;}
PowerShell: 207
Гольф-код:
Ungolfed, с комментариями:
Не самое звучное исполнение песни, но оно работает.
источник
n{
вместоn {
?С - 520
Удар.
Зачем использовать аппаратные средства прошлого века, такие как динамики и наушники? Этот превосходный фрагмент кода позволяет воспроизводить песню на современном оборудовании: на флоппи-дисководе!
Никаких особых требований:
-lm
/dev/fd0
, поэтому либо заклейте устройство, либо запустите от имени суперпользователяНемного нарушаем правила, но давайте на секунду посмотрим на дисковод гибких дисков, а на контроллер IDE - встроенную звуковую карту.
источник
HyperCard 2.2 - 113
Использование: Запустите HyperCard, введите ⌘M, чтобы открыть окно сообщения, вставьте указанный выше код и нажмите клавишу ввода.
harpsichord
может быть замененflute
или,boing
чтобы получить различные звуки.источник
harpsichord
->flute
-6 убрать пробел между инструментом и кавычками -1 всего -7С, 96 символов
Создает необработанные 8-битные беззнаковые монофонические аудиоданные в классическом стиле байтбита . Рекомендуемая частота дискретизации для воспроизведения составляет от 8 до 16 кГц; изменение частоты дискретизации меняет темп и высоту звука.
Чтобы скомпилировать и играть в Linux, сохраните приведенный выше код как
twinkle.c
и выполните следующие команды:Некоторые замечания о том, как работает код:
Общий трюк, используемый для композиций байтбита, подобных этому, заключается в том, что
putchar()
принимает целочисленное значение, но печатает только младшие восемь битов. Таким образом,putchar(t)
гдеt
увеличивается счетчик, генерируется пилообразная волна, и частоту волны можно изменить путем умноженияt
на подходящее значение.!!(t>>9&7|!(-t>>12&7))
производит повторяющийся шаблон 6 + 1 ноты. В частности,!!(t>>9&7)
оценивает,0
когдаt>>9 & 7 == 0
и когда в1
противном случае. Таким образом, он генерирует 512 выборочных пробелов в осциллограмме каждые 4096 выборок, в то время как!(-t>>12&7)
устраняет каждую восьмую такой разрыв.96+"#d|dOE3#dOE3dOE3"[t>>13&15]
генерирует мелодию: код ASCII каждого символа в строке плюс 96 дает относительную частоту соответствующей ноты. Фактически, значения являются приблизительными частотами в Гц нот для концертного тона в 3-й / малой октаве, то есть с А, соответствующим 220. Однако, поскольку базовый тон, на который умножаются эти значения, составляет около 64 Гц (при воспроизведении на частоте 16 кГц) или 32 Гц при воспроизведении с частотой 8 кГц), нам нужно уменьшить результат на пять октав,>>5
чтобы вернуть частоту в разумный диапазон.Ps. Если вы хотите попробовать этот код в проигрывателе байт-битов на основе JavaScript, замените его
[t>>13&15]
на.charCodeAt(t>>13&15)
.источник
питон
317305301Это мое решение, использующее только стандартные библиотеки Python:
И вот с еще одним пробелом для удобства чтения:
источник
Mathematica, 86 символов
источник
Ардуино, 688
Подключите зуммер на выходе 11. Я сосредоточился в основном на качестве , но и на длине кода.
источник
"ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc "
убрать пробел?int beats[] =
убрать пробел?for (long
убрать пробел?11, LOW
убрать пробел?note, int
убрать пробел?i], duration
убрать пробел?11, OUTPUT
убрать пробел?ffeeddc "
это для какой-то задержки, которая вам не нужна в конце, иbeats[] =
нет никаких причин, чтобы иметь место. Кроме того, вы должны сделать версию, концентрирующуюся на длине кода, просто ради этого!bash + say + gunzip, 136 байт
say
Конечно, это команда преобразования текста в речь OS X. Это ... придурок. Да, пошли с придурком.117 байтов - это, конечно, поток gzip, содержащий непечатаемые символы. Вот дамп сценария xxd, включающий эти символы:
объяснение
117 байтов - это следующий скрипт:
Это верно, я только что сделал несколько разных
say
голосов, чтобы сказать "о". Чтобы выяснить, какие из них, я написал сценарий, используя aubionotes, чтобы получить быструю и грязную оценку высоты звука каждого голоса, а затем сделал много проб и ошибок, чтобы найти те, которые звучат в основном правильно.Я подумывал попытаться сыграть в гольф вручную, но повторений было так много, что я решил, что Зопфли сделает это быстрее, поэтому я выбрал легкий путь.
источник
SmileBASIC, 45 байт
источник
Powershell,
120117 байт[Console]::beep
, обратите внимание на лейблы и частоты, вдохновленные IsziОсновная идея :
A
,C
,D
,E
,F
,G
.double duration
.$_-band7
) каждой ноты использования в качестве индекса в массиве частот (A->1
,C->3
,D->4
...)(0,110,0,65,73,82,87,98)[$_-band7]*4
вместо Iszi's(0,440,0,262,294,330,349,392)[$_-band7]
.[console]::Beep
это не самый точный музыкальный инструмент, поэтому он может слегка подделать :)Объяснение : Для каждого символа из строки мелодии
ccggaaGffeeddCggffeeDggffeeDccggaaGffeeddC
скрипт:[console]::beep
сыграть нотуисточник