Die Leute haben viele Dinge geschrieben, die es ermöglichen, eine Sache als eine andere zu visualisieren. Jetzt schlage ich vor, Briefe in Musik übersetzen zu können! Es ist Ihre Aufgabe, ein Programm zu schreiben, das eine Textdatei verwendet und eine Audiodatei ausgibt, wobei jeder Buchstabe in eine bestimmte Notiz von konvertiert wird C3-C8
.
Haftungsausschluss - Ich erwarte eigentlich nicht, dass die Musik gut klingt, aber ich hoffe, überrascht zu sein.
Spezifikationen
- Sie nehmen den Namen einer Datei als Zeichenfolge und den BPM (Beats per Minute) als Int
- Sie machen Großbuchstaben
A
zur NotizC3
- Und gehen Sie für jeden Charakter in dieser Reihenfolge einen halben Schritt nach oben:
ABCDEFGHIJKLMNOPQRSTUVWXYZ ()-,;.'"abcdefghijklmnopqrstuvwxyz
- Ja, nicht jedes Zeichen wird verwendet, da dies zu viele Oktaven umfasst.
- Sie übersetzen jedes Zeichen in der Datei auf diese Weise
- Fügen Sie die Noten zum angegebenen BPM als Viertelnoten zusammen
- Entweder als Sounddatei speichern (ich vermute, Midi ist am einfachsten, aber alles ist in Ordnung) oder abspielen
- Jedes vernünftige Eingabeformat ist in Ordnung
- Keine Standardlücken
- Dies ist Code-Golf, also gewinnt der kürzeste Code in Bytes !
Boni
- Transponieren der Ausgabe zulassen - 50 Bytes
- Ermöglichen Sie die Überlagerung mehrerer Spuren, indem Sie mehrere Dateien aufnehmen - 75 Byte
- Verbinden Sie aufeinanderfolgende Buchstaben zu einer längeren Note - 50 Bytes
Edit: Wow, wir haben negative Ergebnisse. Ich werde den Gewinner am Samstag bekannt geben.
Antworten:
MATLAB, 159-50-50-75 = -16
Beispieleingabe
Beispielausgabe
Erzeugt reine Sinus-Schallwellen, sehr funky (Sägezahn ist ebenfalls möglich, mit einer noch besseren Punktzahl, aber das klingt ein bisschen ... zu funky). Funktioniert als Funktion und erwartet daher ein Zeichenarray (
['abc';'def']
) mit einer Zeile pro 'Spur'. Ich denke, das wird unter "jedem vernünftigen Eingabeformat" behandelt , aber wenn der allgemeine Konsens darin besteht, dass ich eine Datei lesen muss, kann ich sie wahrscheinlich ändern. Eingabei
sind Textspuren (von gleicher Länge),b
Beats pro Minute undt
Transponierung (Versorgung 0 für nicht transponiert). Es verschmilzt zwei Sinusse zu einem, indem die Sinus-Eingabe ausgeglichen wird, sodass ich alle drei Boni erhalten habe, was mir eine negative Punktzahl gibt.Version mit Eingabedatei: 211-175 = 36
Das Eingabeargument
i
repräsentiert jetzt den Dateinamen, andere Parameter bleiben unverändert. Funktionierttextread
möglicherweise nicht mit neueren Versionen, da ich eine Warnung erhalte, die möglicherweise bald veraltet ist. BEARBEITEN: Text lesen wird anscheinend automatisch in Leerzeichen aufgeteilt, also habe ich das behoben. Ich glaube auch, dass ich versehentlich einige Außerirdische mit den seltsamen Geräuschen kontaktiert habe, die beim Testen erzeugt wurden.Welche Version bevorzugen Sie? :) :)
quelle
.mat
Dateien haben ein vernünftiges Eingabeformat. Erstellen Sie eine .mat-Datei mit einer 'i'-Variablen, die Ihren Text enthält. Fügen Sie dannload(i);
am Anfang von Zeile 2 der Top-Version hinzu. Punktzahl: -16 + 8 =-8
. Ich werde dies tun, wenn Ihr Kommentar mehr positive Stimmen erhält als meiner, oder wenn das OP eine Meinung hat :)Schnapp ! - 401 - 75 = 326
Probieren Sie es hier online aus.
Ich verwende diese Methode zum Zählen von Bytes für das Programm.
Ich habe hinzugefügt, mehrere Sounds gleichzeitig abzuspielen.
Die Grundstruktur ist die gleiche wie beim Original (siehe unten), jedoch mit dem Zusatz von
launch{}
.launch{}
Startet einen neuen Thread mit dem darin enthaltenen Code, wodurch Parallelität ermöglicht wird.Der Code als Text lautet:
Originalcode, 308.
Lucky Snap! hat MIDI eingebaut .;)
Leider hat es keine
indexOf
Funktion, so dass ich einen externen JavaScript-Aufruf machen muss, was ziemlich teuer ist.Der
repeat () (#)
Block stammt aus der Iterationsbibliothek.Der Code kann als solcher Text geschrieben werden, so bekomme ich 308 Bytes:
quelle
-1
vonindexOf
? Im Moment sieht es so aus, als ob es nicht in der Saite ist, es macht Midi Nummer 47.Mathematica, 219 - 50 - 75 - 50 = 44
Nimmt die Liste der Eingabedateien, des BPM und der Anzahl der zu transponierenden Halbschritte als Eingabe und spielt den Sound ab (von einem Klavier würde jedes andere Instrument mehr Bytes benötigen.) Klingt nicht so schlecht!
quelle
JavaScript (ES6) 377 - 50 - 50 - 75 = 202
Hier ist zunächst ein ausführbares Snippet, das
<input>
Felder anstelle von Dateilesungen verwendet :Und jetzt der eigentliche Eintrag:
Die drei Argumente sind ein Array von Dateipfad-Zeichenfolgen, die gleichzeitig abgespielt werden sollen, Noten pro Minute und die Anzahl der Halbschritte, um alle Eingaben zu transponieren.
Mit Leerzeichen und Kommentaren:
quelle