화이트 노이즈 생성 쓸 때]

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

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

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

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

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



답변

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. 더 많은 캐릭터를 사용하지 않고 둘을 조화시키는 방법을 찾지 못했습니다.


답변

배쉬, 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

답변

매스 매 티카 52-5 = 47

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

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

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

g[6]

p.wav


답변

수퍼 콜 라이더, 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
}

답변

배쉬 + 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 출력은 표준 출력이므로 파일로 경로 재지 정해야합니다.


답변

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:-)를 멈추고 싶을 때마다 지속 시간을 조정할 수 있습니다


답변

자바 스크립트, 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()}}