Die Herausforderung besteht darin, eine Audiodatei aus weißem Rauschen zu erstellen.
Anforderungen und Anweisungen:
- Ihr Programm muss eine Audiodatei erzeugt nur weißes Rauschen enthalten, was bedeutet , seine Intensität ist das gleiche für alle (vernünftigen) Frequenzen und ungleich Null [siehe Beispiel Plot ];
- Man muss in der Lage sein, die Audiodatei auf der neuesten Version von VLC abzuspielen [zum Zeitpunkt der Erstellung Ihrer Antwort];
- Das Programm benötigt keine kryptografisch starke Zufälligkeit,
rand
Funktionen oder das Auslesen/dev/rand
ist in Ordnung. - Das Programm muss zumindest theoretisch in der Lage sein, mindestens 1 Stunde Audio zu erzeugen (was bedeutet, dass Systembeschränkungen wie die maximale Dateigröße nicht gelten).
- Ihre Punktzahl ist die Anzahl der Bytes in Ihrem Quellcode zuzüglich aller zutreffenden Boni.
- Die Verwendung einer externen Bibliothek von Drittanbietern ist in Ordnung.
- Das Programm muss ohne Internetzugang funktionieren.
Boni sind:
- -15%: Ermöglicht die Angabe des Formats der Audiodatei (mindestens zwei Auswahlmöglichkeiten; die Anzahl der möglichen Auswahlmöglichkeiten ändert nichts an der Punktzahl).
- -10%: Ermöglicht die Angabe der Dauer der Audiodatei;
- -5%: Ermöglicht die Angabe der Bitrate der Audiodatei.
Die Einstellungen können in Variablen, Dateien oder als Befehlszeilenparameter Ihrer Wahl gespeichert werden. Prozentsätze werden aus der ursprünglichen Anzahl von Bytes berechnet, bevor ein Bonus angewendet wird.
Antworten:
MATLAB, 25
schreibt eine neue WAV-Datei auf die Festplatte mit dem Namen
a
. Es hat eine Abtastrate von 8 kHz und 16 Bit pro Abtastung im vorzeichenbehafteten Ganzzahlformat. Die Quelldaten werden gleichmäßig auf das Intervall verteilt[0,1]
, das dem Intervall[0,32767]
nach der Konvertierung in das Ganzzahlformat zugeordnet wird.MATLAB, 28 - 4 (10% + 5%) = 24
Ich bin mir nicht sicher, was das OP damit zu tun hat, wie Einstellungen in Variablen gespeichert werden können, aber ich habe es so interpretiert, dass es für diesen Fall günstig ist. Vorausgesetzt, dass:
Die gewünschte Bitrate (in Bit / Sekunde) wird vom Benutzer in der Variablen angegeben
b
. Die Bits pro Abtastung sind bei 16 fest codiert.Die gewünschte Dauer der Datei (in Samples) wird in der Variablen angegeben
d
.Das Ergebnis ist:
MATLAB, 16 - 4 (15% + 10%) = 12
Wenn ich zur Verfolgung von Boni eine weitere Schicht Sleaze hinzufüge, gehe ich von einer anderen Annahme aus: Die gewünschte Funktion für die Ausgabe der Datei sollte in der Variablen angegeben werden
f
. Dann vereinfacht sich der Code zu:Zulässige Werte für die Funktion sind:
oder
Jede Funktion bewirkt, dass das obige Snippet eine Datei des entsprechenden Formats (WAV oder
.au
) mit einer Abtastrate von 8 kHz und der angegebenen Dauer ausgibt. Ich habe den Bonus für die Angabe der Bitrate hier weggenommen, daauwrite
standardmäßig 8 Bit pro Sample anstelle von 16 Bitwavwrite
verwendet werden. Ich sehe keine Möglichkeit, die beiden zu harmonisieren, ohne mehr Zeichen zu verwenden.quelle
Bash, 34
Wenn Sie keine "Zufälligkeit" der Festplatte wollen (viel langsamer)
SPIN, 28
quelle
/dev
.Mathematica 52 - 5 = 47
g
exportiert eine WAV-Datei mit weißem Rauschen vons
Sekunden und 8000 Bit / s.Beispiel: Es wird eine 6 Sekunden lange weiße Rauschdatei exportiert.
quelle
Supercollider, 89 - 10% = 80,1 Bytes
Leider wird diese Sprache hier nicht gewinnen, obwohl sie bewusst für die Erzeugung von Sound / Audio gemacht wurde. Aber es ist der erste Auftritt von Supercollider auf Code Golf, das ist cool!
Diese Einreichung verliert in erster Linie, weil das Einrichten und Ausführen der Aufzeichnung aufgrund des Client / Server-Designs dieser Sprache ein ausführlicher Prozess ist. Trotzdem ist es eine coole Sprache mit viel Power in sehr wenig Code, wenn man sie auffordert , komplexere Dinge als nur weißes Rauschen zu tun .
Die Dateidauer wird durch Ändern des Werts wait () festgelegt. Ich könnte es in eine Variable einfügen, aber das hat wirklich keinen Sinn, da Supercollider kein nennenswertes Stdio hat. Die Interaktivität besteht darin, den Code live zu manipulieren, während der Server noch spielt. Im Wesentlichen die IDE ist das I / O (es sei denn , Sie eine Benutzeroberfläche für Ihre Kreation bauen).
Hier ist die Golfversion:
Hier ist eine Golf-Version mit der Option, entweder in Aiff oder WAV aufzunehmen und ein Sample-Format anzugeben (Int16, Int8 und Float sind alle Optionen). Leider ist die obige Version trotz aller Boni besser. Dies wären 139 - 30% = 97,3 Bytes.
Und hier ist eine ungolfed Version des letzteren, damit Sie sehen können, was los ist.
quelle
Bash + ALSA, Punktzahl: 44 (52 Zeichen - (10% + 5%) Boni)
Länger als die andere
bash
Antwort, akzeptiert aber Dauer und Bitrate. Fügt der Datei auch einen einigermaßen korrekten Header hinzu, sollte also einigermaßen portabel sein:Speichern Sie es als Skript
chmod +x
und führen Sie Folgendes aus:Beachten Sie, dass die WAV-Ausgabe auf stdout eingestellt ist und daher in eine Datei umgeleitet werden muss.
quelle
C
127115 BytesDer Großteil des Codes schreibt den Header für eine * .au-Datei. Dies druckt eine Pseudozufalls-Audiodatei aus, um sie zu standardisieren.
Die Abtastrate kann durch Ändern der Taste eingestellt werden
8000
.Die Dauer kann angepasst werden, indem
ctrl-c
Sie auf drücken , wann immer Sie aufhören möchten :-)quelle
JavaScript, 167 Byte
VORSICHT: Verringern Sie die Lautstärke vor dem Start. Weißes Rauschen ist böse
Erzeugt keine Datei, möglicherweise nicht das, was erwartet wurde.
-4 Byte Hack spielen nur auf dem linken Kanal Rauschen
quelle