Keluarkan kutipan berikut dari Pachelbel's Canon dalam D sebagai audio:
Aturan
- Format / pengodean apa pun dapat digunakan, asalkan ada codec sebelum penciptaan tantangan ini
- Semua instrumen (instrumen nyata, sintesis MIDI, dll.) Dapat digunakan
- Temponya harus 65 BPM (seperti yang tertulis di lembaran musik) - jika Anda tidak bisa mendapatkan 65 BPM, Anda dapat menggunakan tempo apa pun dalam kisaran (termasuk) 64.75 - 65.25
- Lembaran musik ada di nada konser
- Penyeteman temperamen yang sama harus digunakan (khususnya 12-ET dengan A4 = 440 Hz)
Untuk referensi, berikut ini adalah Stack Snippet yang akan memainkan kutipannya:
Jawaban:
JavaScript (ES7),
249242241 byteTerima kasih kepada @Neil dan @PatrickRoberts untuk beberapa penghematan byte!
Penjelasan
Notasi dikemas ke dalam string di mana setiap karakter adalah satu catatan sebagai basis-36 digit. Nilai-nilai catatan ditentukan oleh rumus
(19 - pitch) * time + 1
manapitch
adalah jumlah semitone kurang dari A5 dantime
adalah1
untuk seperenam belas atau20
untuk getaran a. Pada0
akhirnya menghentikanfor
loop.Tempo yang digunakan adalah
65.22bpm.Edit: tepatnya 65bpm sekarang, untuk 2 byte lebih .Penjelasan / demo ini digunakan
Math.pow
alih-alih**
untuk kompatibilitas browser. Ini juga mengatur penguatan osilator.3
sehingga akord akhir tidak membuat telinga Anda berdarah (gain standarnya adalah1
).Anda dapat menekan tombol di atas untuk mengujinya di browser apa pun yang mendukung HTML5 Web Audio API .
sumber
880*2**(-~-n%20/12)
harus menghemat beberapa byte.-~-
juga dengan mengubah format pengepakan catatan saya (+ 1
Rumusnya hanya ada di sana karena saya harus0
menghentikanfor
loop dan saya terlalu malas untuk memikirkannya sebelum saya memposting).c=new AudioContext;
denganwith(new AudioContext)
dan menghapus dua kejadianc.
dalam program ini.<<
akan melemparkannya ke integer.Mathematica,
212152139135 byteOutput
Sound
objek yang memainkan Pachelbel's Canon dalam D ketika tombol Play ditekan. Instrumennya adalah instrumen MIDI # 41 "Violin".Audio
Klik saya
Penjelasan
Temukan nomor huruf setiap karakter dalam string ("a" -> 1, "b" -> 2, dan seterusnya), dibungkus dengan a
List
. (String ini mewakili Canon Pachelbel dalam D)Setel
s
keSoundNote
fungsi yang instrumennya # 41. Atur durasi ke 1 dan petakan yang berfungsi untuk setiap elemen dalamList
(sehingga membuatSoundNote
objek primitif).Buat triad terakhir. (Durasi
16
ada di sana untuk membuat catatan terakhir 16 kali lebih lama - seluruh nada adalah enam belas kali nada keenam belas.)Buat sebuah
Sound
objek,18.5
detik panjang (karena tempo 65 bpm [5 ukuran 4/4 dengan tempo 65 bpm = sekitar 18,5 detik]).Versi 126 byte, tidak bersaing
Non-bersaing karena output berisi dua not keenam belas alih-alih not ke delapan, dan pemisahannya cukup mencolok.
sumber
Bubblegum , 203 byte
Cobalah online!
Ini adalah hexdump (terbalik dengan
xxd -r
) dari kode sumber. File MIDI yang dihasilkannya adalah sebagai berikut (juga hexdump):sumber
BBC BASIC, 141 karakter ASCII (65.217BPM)
Direvisi untuk mengakomodasi batas tempo. Akan memperbarui penjelasan nanti.
BBC BASIC, 123 karakter ASCII (tidak bersaing sebagai 60BPM)
Unduh juru bahasa di http://www.bbcbasic.co.uk/bbcwin/download.html
Memutar lagu langsung saat dijalankan.
Tidak disatukan
Penjelasan
j
adalah bendera yang menunjukkan apakah kita berada di 4 bar pertama atau akord terakhir. TRUE ada-1
di BBC BASIC.The
SOUND
pernyataan butuh 4 parameter:CHANNEL: untuk 4 bilah pertama ini adalah saluran 1. Untuk 3 nada chord di bilah ke-5, nomor salurannya adalah 201, 202 dan hex hex (513.514 dan 515 desimal.) Ini berarti bermain di saluran 1,2 dan 3, 2 makna awal diputar bersamaan dengan 2 nada pada saluran lain (yaitu memainkan nada 3 not).
VOLUME: Diberikan sebagai nilai negatif karena nilai positif mewakili efek lain (amplop suara). Set -9 (akan naik ke -15 yang paling keras.)
PITCH: Untuk nada ini, berkisar dari D4 = 108 hingga A5 = 184. Setiap langkah integer adalah 1/4 dari semitone. Nilai disimpan sebagai kode ASCII dalam kisaran 54 hingga 92 dan digandakan untuk menghasilkan kembali nilai yang benar. Catatan 1/8 disimpan sebagai duplikat catatan 1/16. Akor terakhir disimpan sebagai 3 nada terpisah dan panjang nada bervariasi untuk seluruh nada seperti di bawah ini.
DURASI: dalam 1/20 detik. Durasi 1/16 note adalah 5/20 detik sehingga 60 1/4 note per menit (ada resolusi yang tidak cukup untuk membuat tempo lebih tepat.) Keseluruhan note adalah 5 - (- 75) = 80 unit (4 detik) ) panjang.
sumber
Befunge, 242 byte
Lagu ini ditulis untuk stdout dalam format file MIDI. Anda harus mengarahkan keluaran itu ke file .mid untuk memutar kutipan.
Cobalah online! , meskipun saya pikir saat ini tidak mungkin untuk menyimpan output sedemikian rupa sehingga akan mempertahankan integritas data biner.
Penjelasan
Baris pertama sangat penting hanya header MIDI kode keras, yang merupakan output pada awal baris dua. Sisa baris dua mengkodekan urutan catatan sebagai nilai MIDI mereka, yang nyaman ASCII. Baris ketiga menuliskan perintah MIDI untuk memainkan catatan itu, dengan durasi yang dihitung secara otomatis (setiap nada adalah semiquaver kecuali i% 14 == 0). Akord terakhir ditangani sebagai case khusus pada jalur empat dan lima (karena itu membutuhkan beberapa tombol ditekan secara bersamaan), dan baris keenam menuliskan akhir MIDI akhir dari penanda trek.
sumber
C,
248 228 210 198 193191 byteIni menghasilkan urutan 8 bit sampel yang tidak ditandatangani yang dimaksudkan untuk dimainkan pada 8000 sampel per detik. Jika Anda memiliki pengaturan UNIX / Linux yang lebih lama, Anda dapat mengalihkan hasilnya
/dev/audio
. Pada beberapa distro Linux baru, Anda mungkin harus menyalurkan output ke pemutar baris perintah ALSAaplay
sumber
SmileBASIC, 115 byte
Menggunakan instrumen yang bagus bernilai 4 byte tambahan :)
sumber
JavaScript (ES6) menggunakan WAV.js , 325 byte
sumber