Получить название трека в foobar с WSH Panel

951
jamesg76

Я хочу, чтобы в foobar было что-то, что произносило бы название текущей воспроизводимой дорожки, лучше всего я бы использовал WSH Panel для запуска сценария преобразования текста в речь PowerShell, однако я не могу получить название дорожки в WSH Panel. мой скрипт панели WSH выглядит так:

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\""); } 

Он говорит о тесте «test» и «test part 2», но не о названии трека. Он даже не передает его, так как у меня есть сценарий, настроенный на вывод аргументов, и он просто отображает «test test part 2» для каждой песни. Так как мне передать название трека так, как я пытаюсь?

2

1 ответ на вопрос

1
jamesg76

У меня все еще была небольшая проблема, и я забыл поставить ответ, когда исправил ее. Спасибо, и я надеюсь, что кто-то может найти это полезным:

Говорит артист + альбом + название трека, очищает текст, чтобы он не говорил ненужных вещей:

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()  } 

И сценарий powershell, на случай, если кто-нибудь захочет это решение:

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

Вы также можете увеличивать и понижать скорость голоса. Введите $ speak | get-member, чтобы получить список свойств и методов после добавления типа и создания объекта:

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 

меняет скорость до -5, идет от -10 до 10.

$speak.selectvoicebyhints("female") 

меняет женский голос в США.

Есть ли другие доступные голоса? Или вы можете замедлить скорость речи? nixda 8 лет назад 0
По умолчанию, я думаю, что в Windows 10 есть два голоса, один мужской и один женский, для американского английского. Я верю, что есть британские и другие языковые голоса, но я не особо их проверял. Вы также можете увеличивать и уменьшать ставку. jamesg76 8 лет назад 0

Похожие вопросы