Wie Tongenerator in JavaScript programmieren

Antworten
Benutzeravatar
DocEmmettBrown
Santiago 9+30
Beiträge: 7611
Registriert: Sa 3. Jan 2015, 02:37
Standort in der Userkarte: nein

Wie Tongenerator in JavaScript programmieren

#1

Beitrag von DocEmmettBrown »

Ich möchte gerne was Blödes machen: Ein RSS-Leseprogramm in JavaScript, welches kurze RSS-Nachrichten liest, diese in einem DOS-Fenster anzeigt, wobei Buchstabe für Buchstabe nacheinander in reverser Darstellung gezeigt wird. Während der Darstellung soll der auf diese Weise hervorgehobene Buchstabe als Morsezeichen aus dem Lautsprecher ertönen.

Ich habe ein bißchen im Web gewühlt, aber keinen Hinweis auf ein ActiveXObject gefunden, welches eine simple Tonausgabe (also Tonhöhe, Tonlänge und vielleicht noch Lautstärke) beherrscht und auf welches man mit JScript oder VBS zugreifen könnte. Man könnte es zwar mit einem PowerShell-Krückenscript machen, das vom JavaScript erstellt und dann einfach aufgerufen wird, allerdings wäre dann bei jedem Buchstaben ein schreibender und lesender Plattenzugriff, was alles andere als elegant wäre.

Hat jemand eine Idee?

73 de Daniel
Iridium
Santiago 3
Beiträge: 100
Registriert: Di 25. Nov 2008, 04:07
Standort in der Userkarte: 73574 Iggingen

Re: Wie Tongenerator in JavaScript programmieren

#2

Beitrag von Iridium »

Es gäbe da 'nen API-Aufruf mit dem Namen Beep. Als Parameter kannste Frequenz und Dauer übergeben. Die Ausgabe läuft dann über den auf dem Mainboard aufgesteckten Piepser (nicht via Soundkarte).

https://msdn.microsoft.com/de-de/librar ... s.85).aspx
http://www.vb-fun.de/vb/api/Beep.htm

Allerdings kannst du in JS und VBS, soweit ich weis, keine API-Aufrufe direkt machen.

Hier ist ein Beispiel, wie man ein eigenes ActiveX-Objekt erstellen kann...

https://social.msdn.microsoft.com/Forum ... =scripting

Diesen Beispiel-Code könnt' man jetzt abändern für die Beep-API...

Oder alternativ mit 'ner Programmiersprache bzw. Entwicklungsumgebung arbeiten...

73
DO3LM
Mamagei

Re: Wie Tongenerator in JavaScript programmieren

#3

Beitrag von Mamagei »

Schon mit dem Audio-Element versucht?
https://stackoverflow.com/questions/941 ... le_rich_qa

Gruß, Mamagei
Benutzeravatar
DocEmmettBrown
Santiago 9+30
Beiträge: 7611
Registriert: Sa 3. Jan 2015, 02:37
Standort in der Userkarte: nein

Re: Wie Tongenerator in JavaScript programmieren

#4

Beitrag von DocEmmettBrown »

Iridium hat geschrieben:Allerdings kannst du in JS und VBS, soweit ich weis, keine API-Aufrufe direkt machen.

Hier ist ein Beispiel, wie man ein eigenes ActiveX-Objekt erstellen kann...
Genau das ist das Problem. Weil dann könnte ich's auch gleich mit PowerShell, Java oder anderweitig lösen. :?
Mamagei hat geschrieben:Schon mit dem Audio-Element versucht?
Das ist HTML5 und muß im Browser laufen. (Ginge mit Java sogar schon ab HTML 3.2.) Mir geht es aber ja gerade darum, daß das auf der Kommandozeile (aka DOS-Prompt, aka Eingabeaufforderung) mit JavaScript läuft.

73 de Daniel
DK7IH

Re: Wie Tongenerator in JavaScript programmieren

#5

Beitrag von DK7IH »

Hi Daniel,

ich habe vor x Jahren mal einen Tongenerator in VB6 programmiert, finde den Code aber nicht mehr. Beim Stöbern im Netz nach dem Modul was ich damals benutzte bin ich allerdings auf diese Seite gestoßen:

https://www.codeproject.com/Messages/13 ... in-VB.aspx

Am Anfang geht es um VB.Net aber weiter unten hat jemand ein längeres Java-Script gelistet, das einen Ton abspielen können soll. Der Teilthread beginnt mit "convert from Java to VB6 or VBnet".

73 de Peter
Mamagei

Re: Wie Tongenerator in JavaScript programmieren

#6

Beitrag von Mamagei »

Zur Not ein Sound-File abspielen.

Code: Alles auswählen

function tone(file) {
	var player = new ActiveXObject("WMPlayer.OCX");
	player.URL=file;
	player.controls.play();

	while(player.playState!=1){
	   WScript.Sleep(100);
	}
	player.close();
};
Der Code muss selbstverständlich so angepasst werden, dass das OCX erst ganz zum Schluss zerstört wird.
Buchstaben und Zahlen als Sound hinterlegen.

Gruß, Klaus
salat
Santiago 6
Beiträge: 479
Registriert: Sa 18. Dez 2010, 17:26
Standort in der Userkarte: Balingen

Re: Wie Tongenerator in JavaScript programmieren

#7

Beitrag von salat »

DocEmmettBrown hat geschrieben:Mir geht es aber ja gerade darum, daß das auf der Kommandozeile (aka DOS-Prompt, aka Eingabeaufforderung) mit JavaScript läuft.
Das hattest Du ja schon bei der Angabe des Zielbetriebsystems und Laufzeitumgebung ja im Eingangspost schon klar und deutlich erwähnt :)

Ok - einem Fachmann war nach der Angabe "DOS-Fenster" (Hallo Windows 9x/ME?) und "ActiveX" (lange tote Technologie) wohl schon klar, dass es Windows sein soll. Und dass Deine Wahl der Programmiersprache für den Zweck evtl. "etwas" ungünstig ist - warum muss es unbedingt die Krücke WSH sein? Allein die Verarbeitung eines RSS Feeds (XML) dürfte ein Krampf werden und z.B. mit PS um Welten einfacher zu handeln sein.

Für die PS gibt's den Morseteil z.B. schon in fertig: https://gallery.technet.microsoft.com/s ... e-125779c1
Benutzeravatar
DocEmmettBrown
Santiago 9+30
Beiträge: 7611
Registriert: Sa 3. Jan 2015, 02:37
Standort in der Userkarte: nein

Re: Wie Tongenerator in JavaScript programmieren

#8

Beitrag von DocEmmettBrown »

DK7IH hat geschrieben:ich habe vor x Jahren mal einen Tongenerator in VB6 programmiert, finde den Code aber nicht mehr.
Ich dachte jetzt an eine Lösung, die möglichst mit Bordmitteln läuft. Natürlich kann ich von hinten durch die Brust ins Auge, aber ich suchte nach einer eleganten Lösung.
Mamagei hat geschrieben:Zur Not ein Sound-File abspielen.
Diese Methode kenne ich natürlich schon seit Win95, aber die ist noch umständlicher als der Umweg über die PowerShell, weil die PS den Tongenerator schon eingebaut hat. Da käme ich ganz ohne WAV- oder MP3-Dateien aus.
salat hat geschrieben:dass Deine Wahl der Programmiersprache für den Zweck evtl. "etwas" ungünstig ist - warum muss es unbedingt die Krücke WSH sein?
Sagen wir einfach, es wäre u.a. auch eine nette "Demo" für eine größeres JavaScript-Projekt gewesen. ;)
salat hat geschrieben:Für die PS gibt's den Morseteil z.B. schon in fertig: https://gallery.technet.microsoft.com/s ... e-125779c1
Tja, man könnte natürlich auch gleich die visuelle Darstellung mit PS machen, klar, aber eigentlich wollte ich es bewußt mit JavaScript lösen.

Aber wie ich anfangs schon sagte: Ich wollte etwas Blödes machen. Wenn's nicht funktioniert, geht davon die Welt nicht unter. Wäre halt einfach ein netter Gag gewesen... ;)
In jedem Fall vielen Dank Euch allen.

73 de Daniel
Benutzeravatar
DocEmmettBrown
Santiago 9+30
Beiträge: 7611
Registriert: Sa 3. Jan 2015, 02:37
Standort in der Userkarte: nein

Re: Wie Tongenerator in JavaScript programmieren

#9

Beitrag von DocEmmettBrown »

DocEmmettBrown hat geschrieben: Do 26. Apr 2018, 14:44Wenn's nicht funktioniert, geht davon die Welt nicht unter.
Geht aber doch! :mrgreen:
Das winzige Powershell-Scriptchen sieht wie folgt aus:

Code: Alles auswählen

# morse.ps1 - Public Domain
BEGIN { $f = 1000; $l = 100; }
PROCESS {
  if (($j = $_.IndexOf("#")) -lt 0) { $j = $_.length; }
  $i = $_.Substring(0, $j).Trim(" ");
  if ($i.length -gt 0) {
    if ($i.Substring(0, 1) -eq "F") { $f = [Double] $i.Substring(1); }
    else { if ($i.Substring(0, 1) -eq "L") { $l = [Double] $i.Substring(1); }
      for ($n = 0; $n -lt $i.length; $n++) {
        switch ($i.Substring($n, 1)) {
          "." { [Console]::beep($f, $l); }
          "-" { [Console]::beep($f, $l * 3); }
          "_" { [Console]::beep($f, $l * 3); }
          " " { Start-Sleep -Milliseconds ($l * 3); }
          "/" { Start-Sleep -Milliseconds ($l * 7); }
        }
      }
    }
  }
}
END { }
Eine Beispieldatei morse.txt könnte vielleicht so aussehen:

Code: Alles auswählen

F800	# Frequenz des Tons in Hz
L100	# Länge eines Dits in ms
#
# Beispielaufruf:
# @echo off
# PowerShell.exe -ExecutionPolicy Bypass -File morse.ps1 0<morse.txt
#
# Beispiel (mehrere Zeilen sind möglich):
-.-.- --- -.-/.-.-.
Man kann das Powershell-Script auch über eine Pipe z.B. über JScript starten und vergleichbare Befehle wie in der Beispieldatei an das Powershell-Script übergeben. Wichtig: Da beide Scripte aber asynchron laufen, muß das JavaScript dann von sich aus mit sleep() mit der zuvor errechneten Dauer warten, bis es die nächsten Zeichen senden kann.

Bei meinem Rechner bringt es keine Vorteile, kürzere Zeiten als etwa 100 ms zu verwenden. Dafür scheint die Powershell dann doch zu langsam zu sein. Das macht aber nichts; grundsätzlich funktioniert es. :D

73 de Daniel
Antworten

Zurück zu „Computer allgemein“