화이트 노이즈 생성


15

문제는 백색 잡음으로 만들어진 오디오 파일을 생성하는 것입니다.
요구 사항 및 지침 :

  • 프로그램은 백색 잡음 만 포함하는 오디오 파일을 생성해야합니다. 즉, 강도가 모든 (합리적인) 주파수와 0이 아닌 경우에 해당합니다 [예 플롯 참조 ].
  • [답을 쓸 때] 최신 버전의 VLC에서 오디오 파일을 재생할 수 있어야합니다.
  • 이 프로그램은 암호로 강력한 임의성, rand기능 또는 읽을 필요가 없습니다 /dev/rand.
  • 프로그램은 최소한 이론상으로 최소 1 시간의 오디오를 생성 할 수 있어야합니다 (최대 파일 크기와 같은 시스템 제한이 적용되지 않음).
  • 점수는 소스 코드의 바이트 수와 적용되는 모든 보너스입니다.
  • 어떤 사용하여 타사 외부 라이브러리는 괜찮습니다;
  • 프로그램은 인터넷에 액세스하지 않고 작동해야합니다.

보너스는 다음과 같습니다.

  • -15 % : 오디오 파일의 형식을 지정할 수 있습니다 (적어도 두 가지 선택, 가능한 선택 수는 점수를 변경하지 않음).
  • -10 % : 오디오 파일의 지속 시간을 지정할 수 있습니다.
  • -5 % : 오디오 파일의 비트 전송률을 지정할 수 있습니다.

설정은 변수, 파일로 저장하거나 원하는 명령 줄 매개 변수로 제공 할 수 있습니다. 보너스는 보너스가 적용되기 전에 원래 바이트 수에서 계산됩니다.


문제 사양은 코드 공동 작업 문제를 설명하는 것으로 보이지만 태그는 그렇지 않습니다.
undergroundmonorail

으악! 내가 고칠 게
Giulio Muscarello

아마도 "모든 라이브러리"대신 "기존의 타사 라이브러리"만 허용하도록 문제를 수정해야합니다.
jpmc26

하얀 소음이 들릴까? 당신이 정말로 확인하고 싶다면 : autocorrelogram은 0 주위에 명확한 스파이크가 있어야하며, 다른 지연에는 거의 아무것도 없어야합니다. 당신이 stickler가 아닌 경우, 나는 그것이 백색 잡음임을 지정하는 것은 무의미하다고 말합니다. 그냥 소음이라고
Tim Seguine

WebAudioAPI는 어떻습니까? 나는 화이트 노이즈를 재생하는 js 프로그램을 코딩했다
Евгений Новиков

답변:


4

MATLAB, 25

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

라는 디스크에 새 WAV 파일을 씁니다 a. 부호있는 정수 형식으로 샘플 당 8kHz의 샘플 속도와 샘플 당 16 비트를 갖습니다. 소스 데이터는 interval에 균일하게 분포되어 있으며 정수 형식으로 변환 한 후 [0,1]간격에 매핑 [0,32767]됩니다.

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

설정에 변수를 저장하는 방법에 대한 OP의 의미가 확실하지 않지만이 경우에 유리한 방식으로 해석했습니다. 가정 :

  • 원하는 비트 레이트 (비트 / 초)는 변수에서 사용자에 의해 제공됩니다 b. 샘플 당 비트는 16으로 하드 코딩됩니다.

  • 파일의 원하는 지속 시간 (샘플)은 variable에 제공 d됩니다.

결과는 다음과 같습니다.

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

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

보너스를 추구하여 다른 슬리 어 레이어를 추가하면서 다른 가정을합니다. 파일을 출력하는 데 사용할 함수는 variable에 지정해야합니다 f. 그런 다음 코드는 다음을 단순화합니다.

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

기능에 허용되는 값은 다음과 같습니다.

f = @wavwrite

또는

f = @auwrite

각 함수는 위의 스 니펫 .au이 지정된 지속 시간으로 8kHz의 샘플 속도로 적절한 형식 (WAV 또는 ) 의 파일을 작성하게합니다 . 여기서는 auwrite16 비트 대신 샘플 당 8 비트로 기본 설정되어 있기 때문에 비트 레이트 지정에 대한 보너스를 제거했습니다 wavwrite. 더 많은 캐릭터를 사용하지 않고 둘을 조화시키는 방법을 찾지 못했습니다.


10

배쉬, 34

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

하드 드라이브 '무작위성'을 원하지 않으면 (훨씬 느리게)

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

스핀, 28

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

4
어떻게해서 든 파일 헤더가 하드 디스크 드라이브의 첫 번째 섹터와 완전히 임의적이거나 동일 할 수는 없다고 생각합니다
John Dvorak

1
테스트 하네스가 VLC 인 경우 Herr Doctor가 옳을 수 있습니다. VLC는 꽤 용서합니다.
Jonathan Van Matre

1
노이즈가 발생했지만 흰색 노이즈입니까?
Stephen Melvin

1
/ dev / random은 Mac에도 존재합니다. 불행히도 iTunes는 결과 wav 파일을 재생할 수 없습니다. 내가 불평 할 수있는 것은 아닙니다 .VLc는 용서와 다양한 기본 코덱으로 인해 VLc를 선택했습니다.
Giulio Muscarello

1
작업 디렉토리가있는 동안 명령을 실행하여 5자를 저장할 수 있습니다 /dev.
David Richerby

4

매스 매 티카 52-5 = 47

gs초 및 8000bps의 백색 노이즈 .wav 파일을 내 보냅니다 .

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

예 : 6 초 화이트 노이즈 파일을 내 보냅니다.

g[6]

p.wav


4

수퍼 콜 라이더, 89-10 % = 80.1 바이트

안타깝게도 소리 / 오디오 생성을 위해 의도적으로 만들어 졌음에도 불구하고이 언어는 여기서 이길 수 없습니다. 그러나 그것은 Code Golf에서 Supercollider의 첫 등장이므로 멋지다!

이 언어는 클라이언트 / 서버 디자인으로 인해 기록을 설정하고 실행하는 것이 장황한 과정이기 때문에이 제출물은 주로 손실됩니다. 그러나 단순한 백색 잡음보다 복잡한 작업을 할 때 매우 작은 코드로 많은 힘을 가진 멋진 언어입니다 .

파일 길이는 wait () 값을 변경하여 설정됩니다. 나는 그것을 변수에 넣을 수는 있지만 Supercollider가 이야기 할 stdio가 없기 때문에 그 점을 지적 할 필요가 없습니다. 상호 작용은 서버가 여전히 재생되는 동안 코드를 실시간으로 조작하는 것입니다. 기본적으로 IDE I / O입니다 (만약 UI를 만들지 않는 한).

골프 버전은 다음과 같습니다.

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

다음은 aiff 또는 wav로 기록하고 샘플 형식을 지정하는 옵션이있는 골프 버전입니다 (int16, int8 및 float는 모두 옵션입니다). 불행히도 모든 보너스가 있더라도 위의 버전이 더 좋습니다. 이것은 139-30 % = 97.3 바이트입니다.

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

그리고 여기에 후자의 ungolfed 버전이 있으므로, 무슨 일이 일어나고 있는지 볼 수 있습니다.

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

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

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

Supercollider 사용에 대한 1 표. 대단한 다른 퍼즐이 많이 있습니다. 음악오디오를
Charles가 아닌

4

배쉬 + ALSA, 점수 : 44 (52 문자-(10 % + 5 %) 보너스)

다른 bash답변 보다 길지만 지속 시간과 비트 전송률을 허용합니다. 또한 파일에 적절한 헤더를 추가하므로 이식성이 있어야합니다.

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

스크립트로 저장 chmod +x하고 다음을 실행하십시오.

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

.wav 출력은 표준 출력이므로 파일로 경로 재지 정해야합니다.


속도가 필수는 아니기 때문에 / dev / urandom 대신 / dev / random을 읽으면 약 1,20자를 절약 할 수 있습니다.
Giulio Muscarello

1
출력stdin 입니까?
user253751

0

C 127115 바이트

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

대부분의 코드는 * .au 파일의 헤더를 작성합니다. 의사 난수 사운드 파일을 표준 출력으로 인쇄합니다.

를 변경하여 샘플 속도를 조정할 수 있습니다 8000.

ctrl-c:-)를 멈추고 싶을 때마다 지속 시간을 조정할 수 있습니다


0

자바 스크립트, 167 바이트

주의 : 실행하기 전에 볼륨을 줄이십시오. 화이트 노이즈가 불쾌하다

예상하지 못한 파일을 생성하지 마십시오.

왼쪽 채널에서만 -4 바이트의 해킹 플레이 노이즈

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.