Tulis program untuk memainkan sajak anak-anak Inggris yang populer.
(File ini dilisensikan di bawah lisensi Creative Commons Attribution-Share Alike 3.0 Unported . Attribution: Helix84 di Wikipedia bahasa Inggris ; Blahedo di Wikipedia bahasa Inggris .)
Beberapa artikel Wikipedia yang mungkin bermanfaat:
- Twinkle Twinkle Little Star (memiliki klip audio seperti apa output program Anda seharusnya)
- Simbol musik modern (untuk belajar tentang notasi musik yang digunakan di atas)
- Catatan # Catatan frekuensi (hertz) (rumus untuk menghitung frekuensi setiap catatan)
Beberapa pedoman untuk pengiriman Anda:
Program Anda harus menggunakan kartu suara komputer. Jika bahasa pemrograman Anda tidak memiliki akses mudah ke perangkat keras audio, program Anda harus membuat file output dalam beberapa format standar seperti WAV atau MIDI.
Program Anda harus benar-benar menghasilkan outputnya. Misalnya, menyematkan file Ogg Vorbis dari Wikipedia tidak akan diizinkan.
Kualitas audio harus dapat diterima. Paling tidak, lagu itu harus mudah dikenali. Lebih disukai, itu seharusnya terdengar bagus juga.
Fokusnya harus pada ukuran kode, kualitas suara, atau keduanya (jelaskan yang mana yang Anda putuskan). Solusi elegan juga akan bagus. Selamat bersenang-senang!
Ini adalah kode-golf , sehingga kode terpendek menang
Jawaban:
QBasic (56)
Fokus adalah pada kenang-kenangan :)
(Tidak punya QBasic untuk menguji ini)
sumber
JavaScript (
214212211 karakter)Buka Safari, Opera, atau Google Chrome ke JavaScript Shell , lalu masukkan kode di bawah ini:
Tidak ditambang untuk keterbacaan (meskipun itu mungkin sulit untuk dipahami):
Dengan beberapa karakter lagi, ini dapat bekerja di Firefox juga, tetapi Anda dapat mengubah
audio/wav
bagian untuk setidaknya menyimpan file WAV.sumber
open(...)
menjadiAudio(...).play()
(8 karakter lebih banyak) agar dapat menggunakan pemutar audio bawaan Firefox.C # (Panjang: LOL)
Jadi, apa yang saya lakukan di sini adalah menerapkan dukungan untuk menghasilkan file .wav dari string yang digunakan untuk solusi QBasic di C # (oktaf tunggal, tanpa disengaja). Penekanan pada:
unsafe
blok kodesumber
FromDigits["LOL",36]==28101
Itu tidak terlihat seperti LOL <sub> 36 </sub> byte ...Python (259)
sumber
import ttls
?C, 277 karakter
Perl, 203 karakter
Mudah, OSS 's
/dev/dsp
default untuk 8kHz mono u8; semua yang saya lakukan di sini adalah membuka perangkat dan menulis sampel yang dihitung.sumber
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
Kode golf:
Tidak disatukan, dengan komentar:
Bukan membawakan lagu dengan suara terbesar, tetapi berhasil.
sumber
n{
bukann {
?C - 520
Menabrak.
Mengapa menggunakan perangkat keras abad lalu seperti speaker dan headphone? Bagian kode yang luar biasa ini memungkinkan Anda memutar lagu di perangkat modern: floppy drive!
Tidak ada persyaratan khusus:
-lm
/dev/fd0
, jadi tandai perangkat atau jalankan sebagai superuserTekuk aturan sedikit, tapi mari kita pertimbangkan floppy drive sebagai perangkat suara, dan pengendali IDE kartu suara terintegrasi.
sumber
HyperCard 2.2 - 113
Penggunaan: Mulai HyperCard, ketik ⌘M untuk membuka Kotak Pesan, tempel kode di atas, dan tekan enter.
harpsichord
dapat diganti denganflute
atauboing
untuk mendapatkan suara yang berbeda.sumber
harpsichord
->flute
-6 menghapus jarak antara instrumen dan kutipan -1 total -7C, 96 karakter
Menghasilkan data audio mono mentah 8-bit mentah dengan gaya bytebeat klasik . Kecepatan sampel yang disarankan untuk pemutaran antara 8 dan 16 kHz; mengubah laju sampel mengubah tempo dan nada.
Untuk mengkompilasi dan bermain di Linux, simpan kode di atas sebagai
twinkle.c
dan jalankan perintah berikut:Beberapa catatan tentang cara kerja kode:
Trik umum yang digunakan untuk komposisi bytebeat seperti ini adalah
putchar()
mengambil nilai integer tetapi hanya mencetak delapan bit yang rendah. Jadi, diputchar(t)
manat
penghitung yang meningkat, menghasilkan gelombang gigi gergaji, dan frekuensi gelombang dapat diubah dengan mengalikannyat
dengan nilai yang sesuai.!!(t>>9&7|!(-t>>12&7))
menghasilkan pola catatan 6 + 1 berulang. Secara khusus,!!(t>>9&7)
mengevaluasi0
kapan sajat>>9 & 7 == 0
dan1
sebaliknya. Dengan demikian, ini menghasilkan celah 512-sampel dalam bentuk gelombang setiap 4.096 sampel, sedangkan!(-t>>12&7)
menghilangkan setiap kesenjangan kedelapan tersebut.96+"#d|dOE3#dOE3dOE3"[t>>13&15]
menghasilkan melodi: kode ASCII dari setiap karakter dalam string plus 96 memberikan frekuensi relatif dari nada yang sesuai. Sebenarnya, nilainya adalah perkiraan frekuensi dalam Hz dari catatan pitch konser di 3 / oktaf kecil, yaitu dengan A yang sesuai dengan 220. Namun, karena nada dasar yang digunakan untuk mengalikan nilai-nilai ini adalah sekitar 64 Hz (bila dimainkan pada 16 kHz , atau 32 Hz saat dimainkan pada 8 kHz), kita perlu menurunkan hasilnya hingga lima oktaf>>5
untuk mendapatkan frekuensi kembali ke kisaran yang masuk akal.Ps. Jika Anda ingin mencoba kode ini pada pemutar bytebeat berbasis-JavaScript, ganti
[t>>13&15]
dengan.charCodeAt(t>>13&15)
.sumber
Python
317305301Ini solusi saya, hanya menggunakan pustaka python standar:
Dan ini dia dengan lebih banyak ruang kosong untuk dibaca:
sumber
Mathematica, 86 karakter
sumber
Arduino, 688
Pasang bel pada output 11. Saya berkonsentrasi terutama pada kualitas , tetapi juga pada panjang kode.
sumber
"ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc "
hapus spasi?int beats[] =
hapus ruang?for (long
hapus ruang?11, LOW
hapus ruang?note, int
hapus ruang?i], duration
hapus ruang?11, OUTPUT
hapus ruang?ffeeddc "
adalah untuk beberapa jenis keterlambatan, yang Anda tidak perlu pada akhirnya, danbeats[] =
tidak memiliki alasan untuk memiliki ruang. Juga, Anda harus membuat versi yang berkonsentrasi pada panjang kode, hanya untuk itu saja!bash + say + gunzip, 136 byte
say
, tentu saja, menjadi perintah text-to-speech OS X. Ini ... konyol Ya, mari kita pergi dengan dorky.117 byte, tentu saja, aliran gzip yang mengandung karakter yang tidak patut. Berikut ini adalah xxd dump dari skrip termasuk karakter-karakter tersebut:
Penjelasan
117 byte adalah skrip berikut yang di-gzip:
Itu benar, saya hanya membuat banyak
say
suara yang berbeda mengatakan "o." Untuk mencari tahu yang mana, saya menulis naskah menggunakan aubionotes untuk mendapatkan perkiraan cepat dan kotor dari setiap nada suara, kemudian melakukan banyak percobaan dan kesalahan menemukan yang terdengar paling benar.Saya mempertimbangkan untuk mencoba golf ini secara manual, tetapi ada begitu banyak pengulangan yang saya pikir Zopfli akan membuatnya lebih pendek, jadi saya mengambil jalan keluar yang mudah.
sumber
SmileBASIC, 45 byte
sumber
Powershell,
120117 byte[Console]::beep
, perhatikan label dan frekuensi yang terinspirasi oleh IsziIde utama :
A
,C
,D
,E
,F
,G
.double duration
.$_-band7
) dari masing-masing menggunakan catatan sebagai indeks dalam array frekuensi (A->1
,C->3
,D->4
...)(0,110,0,65,73,82,87,98)[$_-band7]*4
sebagai gantinya Iszi(0,440,0,262,294,330,349,392)[$_-band7]
.[console]::Beep
bukan alat musik yang paling akurat, sehingga bisa sedikit palsu :)Penjelasan : Untuk setiap karakter dari string melodi
ccggaaGffeeddCggffeeDggffeeDccggaaGffeeddC
, skrip:[console]::beep
untuk memutar catatansumber