문제는 백색 잡음으로 만들어진 오디오 파일을 생성하는 것입니다.
요구 사항 및 지침 :
- 프로그램은 백색 잡음 만 포함하는 오디오 파일을 생성해야합니다. 즉, 강도가 모든 (합리적인) 주파수와 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 또는 ) 의 파일을 작성하게합니다 . 여기서는 auwrite
16 비트 대신 샘플 당 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
g
s
초 및 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()}}