ホワイトノイズを生成する


15

課題は、ホワイトノイズで作成されたオーディオファイルを生成することです。
要件と手順:

  • プログラムは、ホワイトノイズのみを含むオーディオファイルを生成する必要があります。つまり、その強度は、すべての(合理的な)周波数とゼロ以外で同じです[ プロット例を参照]。
  • VLCの最新バージョンで音声ファイルを再生できる必要があります(回答を書いている時点)。
  • プログラムは暗号的に強力なランダム性、rand関数、または読み取りは必要ありません/dev/rand
  • プログラムは、少なくとも理論的には少なくとも1時間のオーディオを生成できなければなりません(つまり、最大ファイルサイズなどのシステム制限は適用されません)。
  • スコアは、ソースコードのバイト数と、適用されるすべてのボーナスです。
  • サードパーティの外部ライブラリを使用しても問題ありません。
  • プログラムは、インターネットにアクセスせずに動作する必要があります。

ボーナスは次のとおりです。

  • -15%:オーディオファイルの形式の指定を許可します(少なくとも2つの選択肢。可能な選択肢の数はスコアを変更しません)。
  • -10%:オーディオファイルの長さを指定できます。
  • -5%:オーディオファイルのビットレートを指定できます。

設定は変数、ファイルに保存するか、コマンドラインパラメーターとして指定できます。パーセンテージは、ボーナスが適用される前の元のバイト数から計算されます。


問題の仕様は、コードの問題を記述しているように見えますが、タグはそうではないと言っています。
地下

おっと!それを修正します。
ジュリオ・

おそらく、「任意のライブラリ」ではなく「既存のサードパーティライブラリ」のみを許可するようにチャレンジを修正する必要があります。
jpmc26 14年

あなたは、ノイズが白であることに執着するつもりですか?本当に検証したい場合:そのオートコレログラムには、ゼロ付近で明確なスパイクがあり、他の遅延ではほとんど何もないはずです。あなたがステッカーになるつもりがないなら、私はそれがホワイトノイズであることを指定することは無意味であると言います。ノイズと言ってください。
ティムセギーン14年

WebAudioAPIはどうですか?ホワイトノイズを果たしているIコード化されたJSプログラム、
ЕвгенийНовиков

回答:


4

MATLAB、25

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

と呼ばれる新しいWAVファイルをディスクに書き込みますa。サンプルレートは8 kHzで、符号付き整数形式のサンプルあたり16ビットです。ソースデータはintervalに均一に分散され、整数形式に変換[0,1]された[0,32767]後の間隔にマップされます。

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

設定を変数に保存する方法についてOPが何を意味したのかわかりませんが、この場合に有利な方法で解釈しました。仮定して:

  • 目的のビットレート(ビット/秒)は、ユーザーが変数に指定しますb。サンプルごとのビット数は16でハードコーディングされています。

  • ファイルの目的の期間(サンプル)は、変数で指定されますd

結果は次のとおりです。

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

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

ボーナスを追求するために別の層を追加して、別の仮定を立てますf。ファイルの出力に使用する目的の関数は、変数で指定する必要があります。次に、コードは次のように単純化されます。

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

関数の許容値は次のとおりです。

f = @wavwrite

または

f = @auwrite

各関数により、上記のスニペット.auは、指定された期間で8 kHzのサンプルレートで適切な形式(WAVまたは)のファイルを書き出します。ここではビットレートの指定のボーナスを取りました。これは、auwriteデフォルトのようにサンプルごとに16ビットではなく8ビット/サンプルになっているためwavwriteです。キャラクターを追加せずに2つを調和させる方法がわかりません。


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
どういうわけか、ファイルヘッダーが完全にランダム/ハードディスクドライブの最初のセクターと同じになるとは思わない
ジョンドヴォルザーク14年

1
テストハーネスがVLCである場合、Her Doctorは正しいかもしれません。VLCはかなり寛容です。
ジョナサンヴァンマトレ14年

1
ノイズを生成しましたが、ホワイトノイズですか?
スティーブンメルビン14年

1
/ dev / randomはMacにもあります。残念ながら、iTunesは結果のwavファイルを再生できません。文句を言うことはできません-許しと多数のネイティブコーデックのため、VLcを選択しました。
ジュリオ・ムスカレロ14年

1
作業ディレクトリがのときにコマンドを実行すると、5文字を保存できます/dev
デビッドリチャービー14年

4

Mathematica 52-5 = 47

gs秒と8000 bpsのホワイトノイズ.wavファイルをエクスポートします。

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

例:6秒のホワイトノイズファイルがエクスポートされます。

g[6]

p.wav


4

スーパーコライダー、89-10%= 80.1バイト

悲しいことに、音/音声の生成のために意図的に作られているにもかかわらず、この言語はここで勝つことはありません。しかし、それはコードゴルフでのスーパーコライダーの最初の登場ですので、それはクールです!

この言語のクライアント/サーバー設計により、録音のセットアップと実行は冗長プロセスであるため、この送信は主に失われます。それでも、単なるホワイトノイズよりも複雑なことを行うように要求すると、非常に少ないコードで多くの能力を備えたクールな言語です

ファイルの継続時間は、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}

そして、ここに後者の未改変版があるので、あなたは何が起こっているのかを見ることができます。

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

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

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

Supercolliderの使用に対する1票。他にも素晴らしいパズルがたくさんあります。音楽オーディオを
チャールズが14年

4

Bash + 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出力はstdoutであるため、ファイルにリダイレクトする必要があることに注意してください。


/ dev / urandomの代わりに/ dev / randomを読み込むと、速度が必要ないため、約1,20文字を節約できます。
ジュリオ・ムスカレロ

1
出力標準入力になりますか?
user253751 14年

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

JavaScript、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.