Orang telah menulis banyak hal yang memungkinkan satu hal divisualisasikan sebagai hal lain. Sekarang saya mengusulkan untuk dapat menerjemahkan surat ke musik! Tugas Anda untuk menulis sebuah program yang mengambil file teks dan menghasilkan file suara dengan setiap huruf dikonversi ke catatan tertentu C3-C8
.
Penafian - Saya sebenarnya tidak berharap musik terdengar bagus tapi saya berharap akan terkejut.
Spesifikasi
- Anda mengambil nama file sebagai string dan BPM (denyut per menit) sebagai int
- Anda membuat huruf besar
A
menjadi catatanC3
- Dan naik setengah langkah untuk setiap karakter setelah dalam urutan ini:
ABCDEFGHIJKLMNOPQRSTUVWXYZ ()-,;.'"abcdefghijklmnopqrstuvwxyz
- Ya, tidak setiap karakter akan digunakan karena rentang oktafnya terlalu banyak.
- Anda menerjemahkan setiap karakter dalam file dengan cara ini
- Letakkan not bersama di BPM yang diberikan sebagai not seperempat
- Baik menyimpan sebagai file suara (saya kira midi akan menjadi yang termudah, tetapi semuanya baik-baik saja) atau mainkan
- Setiap format input yang waras baik-baik saja
- Tidak ada celah standar
- Ini adalah kode-golf, jadi kode terpendek dalam byte menang!
Bonus
- Izinkan transposing output - 50 byte
- Izinkan beberapa trek ditumpangkan satu sama lain dengan mengambil beberapa file - 75 byte
- Gabung huruf berturut-turut menjadi satu catatan lagi - 50 byte
Sunting: Wow, kami memiliki skor negatif. Saya akan mengumumkan pemenang pada hari Sabtu.
Jawaban:
MATLAB, 159-50-50-75 = -16
Input sampel
Output sampel
Menghasilkan gelombang suara sinus murni, sangat funky (gigi gergaji juga dimungkinkan, dengan skor yang lebih baik, tapi itu terdengar agak ... terlalu funky). Berfungsi sebagai fungsi, jadi harapkan itu array karakter (
['abc';'def']
) dengan satu baris per 'lagu'. Saya pikir itu tercakup dalam 'format input yang waras' , tetapi jika konsensus umum adalah bahwa saya perlu membaca file, saya kira saya dapat mengubahnya. Inputi
adalah trek teks (dengan panjang yang sama),b
denyut per menit dant
transpos (pasokan 0 untuk tidak ditransposisikan). Ini memadukan dua sinus menjadi satu dengan mengimbangi input sinus, jadi saya mendapat ketiga bonus, memberi saya skor negatif.Versi menggunakan file input: 211-175 = 36
Argumen input
i
sekarang mewakili nama file, parameter lainnya tidak berubah. Mungkin tidak berfungsi pada rilis yang lebih baru karena saya mendapatkan peringatan yangtextread
mungkin akan segera usang. EDIT: textread tampaknya secara otomatis terpecah di spasi putih, jadi saya memperbaikinya. Juga, saya pikir saya mungkin secara tidak sengaja menghubungi beberapa alien dengan suara aneh yang dibuat saat pengujian.Versi mana yang Anda sukai? :)
sumber
.mat
file adalah format input yang waras. Buat file .mat dengan variabel 'i' yang memiliki teks Anda. Kemudian, tambahkanload(i);
di awal baris 2 dari versi teratas. Nilai: -16 + 8 =-8
. Saya akan melakukan ini ketika komentar Anda mendapat lebih banyak suara daripada komentar saya, atau ketika OP memiliki pendapat :)Jepret ! - 401 - 75 = 326
Cobalah online di sini.
Saya menggunakan metode ini menghitung byte untuk program ini.
Saya menambahkan memainkan beberapa suara sekaligus.
Struktur dasarnya sama dengan aslinya (lihat di bawah), tetapi dengan penambahan
launch{}
.launch{}
memulai utas baru dengan kode di dalamnya, memungkinkan untuk konkurensi.Kode sebagai teks:
Kode asli, 308.
Lucky Snap! memiliki MIDI bermain bawaan.;)
Sayangnya, itu tidak memiliki
indexOf
fungsi, jadi saya harus membuat panggilan JavaScript eksternal, yang cukup mahal.The
repeat () (#)
blok berasal dari perpustakaan iterasi.Kode ini dapat ditulis sebagai teks seperti ini, yang merupakan cara saya mendapatkan 308 byte:
sumber
-1
dariindexOf
? Saat ini sepertinya tidak ada dalam string, itu tidak midi nomor 47.Mathematica, 219 - 50 - 75 - 50 = 44
Mengambil daftar file input, BPM, dan jumlah setengah langkah untuk ditransposisikan sebagai input dan memainkan suara (dari piano, instrumen lain akan membutuhkan lebih banyak byte.) Tidak terdengar terlalu buruk!
sumber
JavaScript (ES6) 377 - 50 - 50 - 75 = 202
Pertama, inilah cuplikan runnable yang menggunakan
<input>
bidang alih-alih membaca file:Dan sekarang, entri yang sebenarnya:
Tiga argumen adalah array string filepath untuk dimainkan secara bersamaan, catatan per menit, dan jumlah setengah langkah untuk mengubah semua input.
Dengan spasi dan komentar:
sumber