Inspiriert von dieser Frage von electronics.SE , ist hier eine Herausforderung für Sie:
Schreiben Sie ein Programm oder Unterprogramm, das eine Folge von Dezimalstellen (0 bis 9) einliest und diese laut ausspricht, ohne ein vorhandenes Sprachsynthesewerkzeug zu verwenden.
Eingang:
Sie können verlangen, dass die Eingabeziffern in einem angemessenen Format angegeben werden, z. B. als Zeichenfolge aus ASCII-Ziffern, als Array aus Ganzzahlen, als BCD-codierte Zahl usw. Wenn Ihre Lösung ein ausführbares Programm ist, können Sie die Eingabe als übernehmen einen Befehlszeilenparameter, lesen Sie ihn von der Standardeingabe oder rufen Sie ihn auf eine andere vernünftige Weise ab.
Ihr Programm muss mindestens acht Stellen pro Aufruf sprechen können . Sie können davon ausgehen, dass die erste Ziffer nicht Null ist, es sei denn, es ist die einzige Ziffer.
Ausgabe:
Ihr Programm kann die Nummern entweder direkt mit einem Audiogerät sprechen oder eine abspielbare Audiodatei ausgeben. Die Ausgabedatei kann, falls vorhanden, ein Standard-Audioformat haben oder aus Rohdaten bestehen. Wenn Sie Rohdaten ausgeben, beachten Sie bitte die entsprechenden Parameter für die Wiedergabe (Abtastrate, Bits pro Abtastung, Endian, Signed / Unsigned, Anzahl der Kanäle). Formate, die von aplay unterstützt werden, werden bevorzugt.
Sie können frei entscheiden, wie die Zahlen gesprochen werden sollen. Ihre Ausgabe sollte jedoch aus englischen Ziffern bestehen, die für einen typischen englischen Sprecher verständlich sind , und klar genug sein, damit der Hörer sie genau transkribieren kann eine gesprochene achtstellige Zufallszahl. Nein, nur n- mal piepen zählt nicht. Vergessen Sie nicht, Pausen zwischen den Ziffern einzufügen.
Wertung:
Es gelten die Standardregeln für die Code-Golf- Wertung: Ihre Wertung ist die Länge Ihres Codes in Bytes oder, wenn Ihr Code in Unicode-Text geschrieben ist, in Unicode-Zeichen. Die niedrigste Punktzahl gewinnt. Jede Sprache geht.
Da es sich bei der ursprünglichen Frage zu electronics.SE um Embedded-Programmierung handelte, erschien es mir angebracht, Autoren, die einfache Sprachen verwenden, einen Bone zuzuwerfen: Wenn Ihre Lösung in einer kompilierten Sprache geschrieben ist, können Sie die Länge von zählen kompilierte ausführbare Datei in Bytes als Ihre Punktzahl. (Ja, vorkompilierter Bytecode, z. B. eine Java- .class
Datei, ist ebenfalls in Ordnung.) Wenn Sie diese Option nutzen möchten, fügen Sie Ihrer Antwort eine Kopie der kompilierten ausführbaren Datei (z. B. als Hex-Dump) zusammen mit Ihrem Quellcode bei und die Compilerversion und die Optionen, die Sie zum Generieren verwendet haben.
Eine lobende Erwähnung , zusammen mit einer 50 rep Prämie wird auf die ersten Antwort erteilt wird , dass auch die Kriterien der trifft ursprünglichen Frage ist also fähig auf einem Embedded - MCU mit 4 kb von Flash und 1 kb von SRAM ausgeführt wird .
Beschränkungen:
Sie dürfen keine Dateien oder Netzwerkressourcen verwenden , die nicht Teil der Standardlaufzeitumgebung Ihrer Sprache sind, es sei denn, Sie zählen die Länge dieser Dateien oder Ressourcen als Teil Ihrer Punktzahl. (Dies ist zB zu verbieten, Audio-Samples aus dem Web zu laden.)
Sie dürfen auch keine bereits vorhandenen Sprachsynthesetools oder -bibliotheken oder Zusammenstellungen von Audiodaten verwenden (es sei denn, Sie zählen auch deren Größe als Teil Ihrer Partitur), selbst wenn diese in der Standardlaufzeitumgebung Ihrer gewählten Sprache enthalten sind.
Antworten:
Ruby - 3710 = 90 Zeichen Code + 3620 Byte Daten
Eingabe: Ein einzelnes Befehlszeilenargument, die zu lesende Zahl
Ausgabe: Rohtondaten, PCM 8bit / 8kHz
Hiermit kann eine beliebige Eingabezeichenfolge gelesen werden, solange
5e3
kodiert die Pause zwischen zwei Wörtern. Hier sind 5 effektivples ~ = 0,6s. Nach Belieben anpassen.Jetzt ist es schwierig, die Beispieldateien in 4K zu bekommen und sie dennoch einfach und in ausreichender Qualität zu dekomprimieren. So habe ich sie bekommen:
Nun muss man eine Abtastrate und einen Dezimierungsbetrag auswählen. Zu viel, und der Ton wird nicht verständlich. Zu wenig und du passt nicht. Ich habe mich für 8kHz / 3b entschieden. Dort sind sie: https://github.com/honnza/drops/raw/master/digits.zip
Hier ist das Dezimationsskript:
Wie für die ursprüngliche Herausforderung: Es gibt 476 Bytes Platz für Code und die Dateitabelle. Dies kann etwas zu viel sein, je nachdem, wie klein wir mit einer DEFLATE-Bibliothek werden können. Wenn nötig, können wir hier und da ein paar Ecken abschneiden, indem wir die Audio-Samples etwas aggressiver zuschneiden.
[fo:r]
oder[o:]
spielt keine Rolle, spart aber Bytes. Ich war ein bisschen gütig, als ich die Zahlen beschnitten habe. Ein anderes Dezimierungsschema oder das Verzichten auf eine Dezimierung für das Downsampling könnten ebenfalls hilfreich sein - ich werde später damit spielen. Durch das Löschen der DEFLATE-Header wird möglicherweise nur wenig Platz gespart.Das Verketten von Sound-Samples ist recht einfach, 4K ist jedoch etwas beengt. Wenn Sie nicht an einen 4k-Raum gebunden sind, empfehle ich eine geringere Dezimierung. 4 Bits pro Sample schneiden eigentlich ganz gut ab und sind nur geringfügig größer.
quelle