화이트 노이즈 생성


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.