Mit dem WSH-Panel können Sie den Tracknamen in foobar eingeben

966
jamesg76

Ich möchte etwas haben, das den Namen des aktuell gespielten Titels in foobar sagt. Das Beste, was ich mir vorstellen könnte, ist die Verwendung eines WSH-Panels zum Starten eines Powershell-Text-zu-Sprache-Skripts. Allerdings kann ich den Tracknamen nicht im WSH-Panel erhalten. Mein WSH-Panel-Skript sieht folgendermaßen aus:

function on_playback_starting(cmd, is_paused) {  var track_path = fb.TitleFormat("%title%"); WSH = new ActiveXObject("WScript.Shell");  WSH.run("powershell.exe -noexit -ExecutionPolicy ByPass -f c:\\users\\jrg26\\documents\\windowspowershell\\text2speech.ps1 \"test " + track_path+" test part 2\""); } 

Es spricht den Test "Test" und "Test Part 2", nicht jedoch den Spurnamen. Es passiert nicht einmal, da ich das Skript so eingestellt habe, dass es die Argumente widerhallt, und es zeigt nur "test test part 2" für jeden Song an. Also, wie gebe ich den Track-Namen so weiter, wie ich es versuche?

2

1 Antwort auf die Frage

1
jamesg76

Ich hatte immer noch ein kleines Problem und hatte vergessen, eine Antwort zu geben, als ich es reparierte. Danke und ich hoffe, jemand kann es nützlich finden:

Spricht Interpret + Album + Titelname, bereinigt den Text, damit er nicht unnötiges Zeug spricht:

function replace_it(str) { str = str.replace(",","(") str = str.replace("-","(") str = str.replace(")","(") str = str.replace("[","(") str = str.replace("]","(") str = str.replace("\\","(") str = str.replace("/","(") str = str.replace(":","(") var str_index = str.indexOf("(") if (str_index != -1) { str = str.substring(0,str_index) } return str  }  function on_playback_new_track(metadb) { WSH = new ActiveXObject("WScript.Shell");  var artist = fb.TitleFormat("%artist%").Eval(true) var album = fb.TitleFormat("%album%").Eval(true) var track_name = fb.TitleFormat("%Title%").Eval(true);  artist = replace_it(artist) album = replace_it(album) track_name = replace_it(track_name)  track_path="Artist "+artist+" Album " +album+" track name "+ track_name  fb.Pause() WSH.run("powershell.exe -nologo -NonInteractive -ExecutionPolicy ByPass -WindowStyle Hidden -f c:\\users\\jrg26\\documents\\windowspowershell\\text2speech.ps1 \"" + track_path + "\"",0,true); fb.play()  } 

Und das Powershell-Skript, falls jemand diese Lösung möchte:

if ($args.count -gt 0) { echo $args[0] Add-Type -AssemblyName System.speech $speak = New-Object System.Speech.Synthesis.SpeechSynthesizer $speak.Speak($args[0]) } 

Sie können auch die Rate der Stimme erhöhen und verringern. Geben Sie $ speak | get-member ein, um eine Liste von Eigenschaften und Methoden zu erhalten, nachdem Sie den Typ hinzugefügt und das Objekt erstellt haben:

Rate Property int Rate  Voice Property System.Speech.Synthesis.VoiceInfo Voice  Volume Property int Volume  SelectVoice Method void SelectVoice(string name)  SelectVoiceByHints Method void SelectVoiceByHints(System.Speech.Synthesis.VoiceGender gender),  $speak.rate = -5 

ändert die Rate auf -5 und geht von -10 bis 10.

$speak.selectvoicebyhints("female") 

wechselt zur amerikanischen Frauenstimme.

Gibt es noch andere Stimmen? Oder können Sie die Sprachgeschwindigkeit verringern? nixda vor 8 Jahren 0
Ich denke, Windows 10 hat standardmäßig zwei Stimmen, eine männliche und eine weibliche, für amerikanisches Englisch. Ich glaube, es gibt UK- und andere Sprachstimmen, aber ich habe sie nicht viel überprüft. Sie können auch die Rate erhöhen und senken. jamesg76 vor 8 Jahren 0