Wie Tongenerator in JavaScript programmieren

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

Wie Tongenerator in JavaScript programmieren

#1

Beitrag von DocEmmettBrown » Mi 25. Apr 2018, 20:13

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 1
Beiträge: 38
Registriert: Di 25. Nov 2008, 04:07
Standort in der Userkarte: Boxberg

Re: Wie Tongenerator in JavaScript programmieren

#2

Beitrag von Iridium » Mi 25. Apr 2018, 21:05

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

Benutzeravatar
Mamagei
Santiago 1
Beiträge: 20
Registriert: Mi 23. Aug 2017, 20:50
Standort in der Userkarte: Mond

Re: Wie Tongenerator in JavaScript programmieren

#3

Beitrag von Mamagei » Mi 25. Apr 2018, 21:09

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

Gruß, Mamagei

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

Re: Wie Tongenerator in JavaScript programmieren

#4

Beitrag von DocEmmettBrown » Mi 25. Apr 2018, 21:20

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 » Do 26. Apr 2018, 07:17

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

Benutzeravatar
Mamagei
Santiago 1
Beiträge: 20
Registriert: Mi 23. Aug 2017, 20:50
Standort in der Userkarte: Mond

Re: Wie Tongenerator in JavaScript programmieren

#6

Beitrag von Mamagei » Do 26. Apr 2018, 10:31

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 5
Beiträge: 366
Registriert: Sa 18. Dez 2010, 17:26
Standort in der Userkarte: Balingen

Re: Wie Tongenerator in JavaScript programmieren

#7

Beitrag von salat » Do 26. Apr 2018, 10:51

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: 2604
Registriert: Sa 3. Jan 2015, 02:37
Standort in der Userkarte: Kaiserslautern

Re: Wie Tongenerator in JavaScript programmieren

#8

Beitrag von DocEmmettBrown » Do 26. Apr 2018, 14:44

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: 2604
Registriert: Sa 3. Jan 2015, 02:37
Standort in der Userkarte: Kaiserslautern

Re: Wie Tongenerator in JavaScript programmieren

#9

Beitrag von DocEmmettBrown » Do 14. Jun 2018, 00:44

DocEmmettBrown hat geschrieben:
Do 26. Apr 2018, 14:44
Wenn'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“