Tạo tiếng ồn trắng


15

Thách thức là: tạo ra một tệp âm thanh làm bằng tiếng ồn trắng.
Yêu cầu và hướng dẫn:

  • Chương trình của bạn phải tạo một tệp âm thanh chỉ chứa tiếng ồn trắng, nghĩa là cường độ của nó là giống nhau cho tất cả các tần số (hợp lý) và khác không [xem ví dụ âm mưu ];
  • Người ta phải có thể phát tệp âm thanh trên phiên bản VLC mới nhất [tại thời điểm viết câu trả lời của bạn];
  • Chương trình không cần tính ngẫu nhiên, randchức năng hoặc đọc từ mã hóa/dev/rand là ổn;
  • Chương trình phải có khả năng tạo ra ít nhất 1 giờ âm thanh, ít nhất là trên lý thuyết (có nghĩa là các giới hạn hệ thống như kích thước tệp tối đa không áp dụng);
  • Điểm của bạn là số byte trong mã nguồn của bạn, cộng với tất cả các phần thưởng được áp dụng;
  • Sử dụng bất kỳ bên thứ ba, thư viện bên ngoài là được;
  • Chương trình phải hoạt động mà không cần truy cập Internet.

Tiền thưởng là:

  • -15%: Cho phép chỉ định định dạng của tệp âm thanh (ít nhất hai lựa chọn; số lượng lựa chọn có thể không thay đổi điểm số);
  • -10%: Cho phép chỉ định thời lượng của tệp âm thanh;
  • -5%: Cho phép chỉ định tốc độ bit của tệp âm thanh.

Các cài đặt có thể được lưu trữ trong các biến, tệp hoặc được cung cấp dưới dạng tham số dòng lệnh, tùy bạn chọn. Tỷ lệ phần trăm được tính từ số byte ban đầu, trước khi bất kỳ phần thưởng nào được áp dụng.


Thông số kỹ thuật có vẻ như đang mô tả một thách thức mã hóa, nhưng các thẻ lại nói khác.
undergroundmonorail

Rất tiếc! Tôi sẽ sửa nó.
Giulio Muscarello

Có lẽ thách thức nên được sửa đổi để chỉ cho phép "thư viện bên thứ ba hiện tại" thay vì "bất kỳ thư viện".
jpmc26

Bạn sẽ trở thành một người gắn bó với tiếng ồn là màu trắng? Nếu bạn thực sự muốn xác minh: bản đồ tự động của nó sẽ có một mức tăng rõ ràng xung quanh 0 và hầu như không có bất kỳ độ trễ nào khác. Nếu bạn sẽ không trở thành một stickler, tôi nói rằng thật vô nghĩa khi xác định rằng đó là tiếng ồn trắng. Chỉ cần nói ồn ào.
Tim Seguine

WebAudioAPI thì sao? Tôi mã chương trình js, đóng tiếng ồn trắng
Евгений Новиков

Câu trả lời:


4

MATLAB, 25

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

ghi một tệp WAV mới vào đĩa được gọi a. Nó có tốc độ mẫu là 8 kHz và 16 bit cho mỗi mẫu ở định dạng số nguyên đã ký. Dữ liệu nguồn được phân phối đồng đều trên khoảng [0,1], được ánh xạ tới khoảng [0,32767]sau khi chuyển đổi sang định dạng số nguyên.

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

Tôi không chắc OP có ý nghĩa gì về cách cài đặt có thể được lưu trữ trong các biến, nhưng tôi đã diễn giải nó theo cách có lợi cho trường hợp này. Giả sử rằng:

  • Tốc độ bit mong muốn (tính bằng bit / giây) được cung cấp bởi người dùng trong biến b. Các bit trên mỗi mẫu được mã hóa cứng ở 16.

  • Thời lượng mong muốn của tệp (trong các mẫu) được đưa ra trong biến d.

Kết quả là:

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

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

Thêm một lớp nhếch nhác khác để theo đuổi tiền thưởng, tôi đưa ra một giả định khác: chức năng mong muốn sử dụng để xuất tệp nên được chỉ định trong biến f. Sau đó, mã đơn giản hóa để:

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

Các giá trị cho phép của hàm là:

f = @wavwrite

hoặc là

f = @auwrite

Mỗi chức năng sẽ khiến đoạn mã trên viết ra một tệp có định dạng phù hợp (WAV hoặc .au) với tốc độ mẫu là 8 kHz với thời lượng được chỉ định. Tôi đã gỡ bỏ phần thưởng cho đặc điểm kỹ thuật của bitrate ở đây, vì auwritemặc định là 8 bit cho mỗi mẫu thay vì 16 như thế wavwrite. Tôi không thấy cách nào để hòa hợp cả hai mà không sử dụng nhiều nhân vật.


10

Bash, 34

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

Nếu bạn không muốn ổ cứng 'ngẫu nhiên', (chậm hơn rất nhiều)

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

SPIN, 28

word x=0
repeat
 word[?x]=?x

4
Bằng cách nào đó tôi không nghĩ rằng tiêu đề tệp có thể hoàn toàn ngẫu nhiên / giống như ổ đĩa cứng khu vực đầu tiên
John Dvorak

1
Herr Doctor có thể đúng, nếu khai thác thử nghiệm là VLC. VLC là khá tha thứ.
Jonathan Van Matre

1
Bạn đã tạo ra tiếng ồn, nhưng nó có phải là tiếng ồn trắng?
Stephen Melvin

1
/ dev / ngẫu nhiên cũng tồn tại trên máy Mac, yay! Thật không may, iTunes không thể phát tệp wav kết quả. Không phải là tôi có thể phàn nàn - tôi đã chọn VLc vì sự tha thứ của nó và vô số codec bản địa.
Giulio Muscarello

1
Bạn có thể lưu năm ký tự bằng cách thực hiện lệnh trong khi thư mục làm việc là /dev.
David Richerby

4

Toán học 52 - 5 = 47

gxuất một tập tin .wav tiếng ồn trắng của sgiây và 8000 bps.

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

Ví dụ: tệp tiếng ồn trắng 6 giây được xuất.

g[6]

p.wav


4

Supercollider, 89 - 10% = 80,1 byte

Đáng buồn thay, mặc dù được cố tình tạo ra để tạo ra âm thanh / âm thanh, ngôn ngữ này sẽ không giành được ở đây. Nhưng đây là lần đầu tiên Supercollider xuất hiện trên Code Golf, thật tuyệt!

Việc gửi này mất chủ yếu vì thiết lập ghi âm và thực hiện nó là một quá trình dài dòng do thiết kế máy khách / máy chủ của ngôn ngữ này. Tuy nhiên, đó là một ngôn ngữ tuyệt vời với rất nhiều sức mạnh trong rất ít mã khi bạn yêu cầu nó làm những việc phức tạp hơn chỉ là tiếng ồn trắng.

Thời lượng tệp được đặt bằng cách thay đổi giá trị Wait (). Tôi có thể đặt nó trong một biến, nhưng thực sự không có lý do gì vì Supercollider không có ý kiến ​​gì để nói. Sự tương tác là trong việc thao túng mã trực tiếp trong khi máy chủ vẫn đang phát. Về cơ bản, IDE I / O (trừ khi bạn xây dựng giao diện người dùng cho sáng tạo của mình).

Đây là phiên bản chơi gôn:

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

Đây là phiên bản được đánh gôn với tùy chọn ghi bằng aiff hoặc wav và chỉ định định dạng mẫu (int16, int8 và float đều là các tùy chọn). Thật không may, ngay cả với tất cả các phần thưởng, phiên bản trên giá vé tốt hơn. Đây sẽ là 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}

Và đây là phiên bản chưa được chỉnh sửa của phần sau, vì vậy bạn có thể thấy những gì đang diễn ra.

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

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

Routine.run{
    s.record;
    wait(99);
    s.stopRecording
}

một phiếu bầu cho việc sử dụng Supercollider. Có rất nhiều câu đố khác mà nó TUYỆT VỜI. Kiểm tra âm nhạcâm thanh
Không phải Charles

4

Bash + ALSA, điểm: 44 (52 ký tự - (10% + 5%) tiền thưởng)

Dài hơn bashcâu trả lời khác , nhưng chấp nhận thời lượng và bitrate. Đồng thời thêm một tiêu đề hợp lý chính xác vào tệp, do đó nên có khả năng di động hợp lý:

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

Lưu dưới dạng tập lệnh, chmod +xnó và chạy:

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

Lưu ý, đầu ra .wav là thiết bị xuất chuẩn, vì vậy nó phải được chuyển hướng đến một tệp.


Bạn có thể lưu khoảng 1,20 ký tự bằng cách đọc / dev / ngẫu nhiên thay vì / dev / urandom, vì tốc độ không phải là một yêu cầu.
Giulio Muscarello

1
đầu ra là để stdin ?
dùng253751

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();}

Phần lớn mã viết tiêu đề cho tệp * .au. Điều này in một tập tin âm thanh giả cho tiêu chuẩn.

Tỷ lệ mẫu có thể được điều chỉnh bằng cách thay đổi 8000.

Thời lượng có thể được điều chỉnh bằng cách nhấn ctrl-cbất cứ khi nào bạn muốn dừng :-)


0

JavaScript, 167 byte

THẬN TRỌNG: Giảm âm lượng trước khi chạy. Tiếng ồn trắng là khó chịu

Đừng tạo tập tin, có thể không như mong đợi.

-4 byte hack phát tiếng ồn trên kênh trái

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()}}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.