Hasilkan white noise

15

Tantangannya adalah: menghasilkan file audio yang terbuat dari white noise.
Persyaratan dan instruksi:

  • Program Anda harus menghasilkan file audio yang hanya mengandung white noise, yang berarti intensitasnya sama untuk semua frekuensi (masuk akal) dan bukan nol [lihat contoh plot ];
  • Seseorang harus dapat memutar file audio pada versi terbaru VLC [pada saat menulis jawaban Anda];
  • Program ini tidak memerlukan keacakan yang kuat secara kriptografis, randfungsi atau membaca /dev/randtidak apa-apa;
  • Program harus dapat menghasilkan audio setidaknya 1 jam, setidaknya secara teori (artinya batasan sistem seperti file maksimum tidak berlaku);
  • Skor Anda adalah jumlah byte dalam kode sumber Anda, ditambah semua bonus yang berlaku;
  • Menggunakan pihak ketiga, perpustakaan eksternal tidak apa-apa;
  • Program harus bekerja tanpa akses ke Internet.

Bonusnya adalah:

  • -15%: Bolehkan untuk menentukan format file audio (setidaknya dua pilihan; jumlah pilihan yang mungkin tidak mengubah skor);
  • -10%: Izinkan untuk menentukan durasi file audio;
  • -5%: Izinkan untuk menentukan bitrate file audio.

Pengaturan dapat disimpan dalam variabel, file, atau diberikan sebagai parameter baris perintah, pilihan Anda. Persentase dihitung dari jumlah byte asli, sebelum bonus diterapkan.

Giulio Muscarello
sumber
Masalah spesifikasi tampaknya menggambarkan tantangan kode colfing, tetapi tag mengatakan sebaliknya.
undergroundmonorail
Aduh! Saya akan memperbaikinya.
Giulio Muscarello
Mungkin tantangannya harus direvisi agar hanya mengizinkan "perpustakaan pihak ketiga yang ada" dan bukan "perpustakaan apa pun".
jpmc26
Apakah Anda akan menjadi tetap pada kebisingan menjadi putih? Jika Anda benar-benar ingin memverifikasi: autocorrelogram-nya harus memiliki lonjakan yang jelas di sekitar nol, dan hampir tidak ada pada keterlambatan lain. Jika Anda tidak akan menjadi stickler, saya mengatakan bahwa tidak ada gunanya untuk menentukan bahwa itu adalah white noise. Katakan saja kebisingan.
Tim Seguine
Bagaimana dengan WebAudioAPI? Saya mengkodekan program js, yang memainkan white noise
Евгений Новиков

Jawaban:

4

MATLAB, 25

wavwrite(rand(8e3,1),'a')

menulis file WAV baru ke disk yang disebut a. Ini memiliki tingkat sampel 8 kHz dan 16 bit per sampel dalam format integer yang ditandatangani. Data sumber didistribusikan secara seragam pada interval [0,1], yang dipetakan ke interval [0,32767]setelah konversi ke format integer.

MATLAB, 28 - 4 (10% + 5%) = 24

Saya tidak yakin apa yang dimaksud OP tentang bagaimana pengaturan dapat disimpan dalam variabel, tetapi saya menafsirkannya dengan cara yang menguntungkan untuk kasus ini. Berasumsi bahwa:

  • Kecepatan bit yang diinginkan (dalam bit / detik) disediakan oleh pengguna dalam variabel b. Bit per sampel dikode keras pada 16.

  • Durasi file yang diinginkan (dalam sampel) diberikan dalam variabel d.

Hasilnya adalah:

wavwrite(rand(d,1),b/16,'a')

MATLAB, 16 - 4 (15% + 10%) = 12

Menambahkan lapisan kebatilan dalam mengejar bonus, saya membuat asumsi lain: fungsi yang diinginkan untuk digunakan untuk menampilkan file harus ditentukan dalam variabel f . Kemudian kode tersebut disederhanakan menjadi:

f(rand(d,1),'a')

Nilai yang diizinkan untuk fungsi ini adalah:

f = @wavwrite

atau

f = @auwrite

Setiap fungsi akan menyebabkan cuplikan di atas untuk menulis file dengan format yang sesuai (WAV atau .au) pada laju sampel 8 kHz dengan durasi yang ditentukan. Saya melepas bonus untuk spesifikasi bitrate di sini, karena auwritestandarnya adalah 8 bit per sampel, bukan 16 seperti wavwritehalnya. Saya tidak melihat cara untuk menyelaraskan keduanya tanpa menggunakan lebih banyak karakter.

Jason R
sumber
10

Bash, 34

dd if=/dev/sda of=file.wav count=1

Jika Anda tidak ingin 'keacakan' hard drive, (jauh lebih lambat)

dd if=/dev/random of=file.wav count=9

SPIN, 28

word x=0
repeat
 word[?x]=?x
Dokter
sumber
4
Entah bagaimana saya tidak berpikir file header bisa sepenuhnya acak / sama dengan sektor pertama hard disk drive
John Dvorak
1
Dokter Herr mungkin benar, jika test harness adalah VLC. VLC cukup memaafkan.
Jonathan Van Matre
1
Anda telah menghasilkan noise, tetapi apakah itu white noise?
Stephen Melvin
1
/ dev / random juga ada di Mac, yay! Sayangnya iTunes tidak dapat memutar file wav yang dihasilkan. Bukannya saya bisa mengeluh - saya memilih VLc karena pengampunan dan banyak codec asli.
Giulio Muscarello
1
Anda dapat menyimpan lima karakter dengan menjalankan perintah saat direktori kerja /dev.
David Richerby
4

Mathematica 52 - 5 = 47

gmengekspor file .wav derau putih sdetik dan 8000 bps.

g@s_:=Export["p.wav",RandomReal@{-1,1}~Play~{t,0,s}]

Contoh: file white noise 6 detik diekspor.

g[6]

p.wav

DavidC
sumber
4

Supercollider, 89 - 10% = 80,1 byte

Sayangnya, meskipun sengaja dibuat untuk generasi suara / audio, bahasa ini tidak akan menang di sini. Tapi ini penampilan pertama Supercollider di Code Golf, jadi itu keren!

Kiriman ini hilang terutama karena pengaturan perekaman dan mewujudkannya adalah proses verbal karena desain klien / server bahasa ini. Namun, ini adalah bahasa yang keren dengan banyak daya dalam kode yang sangat sedikit ketika Anda memintanya hal hal yang lebih kompleks daripada sekadar white noise.

Durasi file diatur dengan mengubah nilai wait (). Saya bisa memasukkannya ke dalam variabel, tetapi benar-benar tidak ada gunanya karena Supercollider tidak memiliki stdio untuk berbicara tentang. Interaktivitas dalam memanipulasi kode langsung saat server masih diputar. Intinya, IDE adalah I / O (kecuali jika Anda membangun UI untuk kreasi Anda).

Ini versi golfnya:

{WhiteNoise.ar(1)}.play;s.prepareForRecord;Routine.run{s.record;wait(99);s.stopRecording}

Berikut adalah versi golf dengan opsi untuk merekam dalam aiff atau wav, dan tentukan format sampel (int16, int8, dan float adalah semua opsi). Sayangnya, bahkan dengan semua bonus, versi di atas tarif lebih baik. Ini akan menjadi 139 - 30% = 97,3 byte.

s.recSampleFormat='int16';s.recHeaderFormat='wav';{WhiteNoise.ar(1)}.play;s.prepareForRecord;Routine.run{s.record;wait(99);s.stopRecording}

Dan ini adalah versi yang terakhir dari yang tidak diserang, sehingga Anda dapat melihat apa yang terjadi.

s.recSampleFormat='int16';
s.recHeaderFormat='wav';

{WhiteNoise.ar(1)}.play;
s.prepareForRecord;

Routine.run{
    s.record;
    wait(99);
    s.stopRecording
}
Jonathan Van Matre
sumber
satu suara untuk penggunaan Supercollider. Ada banyak teka-teki lain yang akan HEBAT untuknya. Lihat musik dan audio
Bukan berarti Charles
4

Bash + ALSA, skor: 44 (52 karakter - (10% + 5%) bonus)

Lebih panjang dari bashjawaban yang lain , tetapi menerima durasi dan bitrate. Juga menambahkan tajuk yang cukup benar ke file, sehingga harus cukup portabel:

arecord -r$2|head -c44;head -c$[$2*$1] /dev/urandom

Simpan sebagai skrip, chmod +xdan jalankan:

$ ./wav.sh 1 44100 > c.wav
Recording WAVE 'stdin' : Unsigned 8 bit, Rate 44100 Hz, Mono
$ 

Catatan, output .wav adalah untuk stdout, sehingga harus diarahkan ke file.

Trauma Digital
sumber
Anda dapat menyimpan sekitar 1,20 karakter dengan membaca / dev / acak alih-alih / dev / urandom, karena kecepatan bukanlah keharusan.
Giulio Muscarello
1
output ke stdin ?
user253751
0

C 127 115 byte

#define H htonl
main(c){for(write(1,(int[]){H(779316836),H(24),-1,H(2),H(8000),H(1)},24);;write(1,&c,1))c=rand();}

Mayoritas kode menulis tajuk untuk file * .au. Ini mencetak file suara pseudorandom ke standar keluar.

Tingkat sampel dapat disesuaikan dengan mengubah 8000 .

Durasi dapat disesuaikan dengan memukul ctrl-ckapan pun Anda ingin berhenti :-)

plafon
sumber
0

JavaScript, 167 byte

PERHATIAN: Kurangi volume sebelum dijalankan. Kebisingan putih itu jahat

Jangan menghasilkan file, mungkin bukan yang diharapkan.

-4 Bytes retas kebisingan pemutaran di saluran kiri saja

c=new AudioContext()
n=c.createScriptProcessor(s=512)
n.connect(c.destination)
n.onaudioprocess=e=>{a=s;while(a--){e.outputBuffer.getChannelData(0)[a]=Math.random()}}

Евгений Новиков
sumber