WSHパネルでfoobarのトラック名を取得


2

私はfoobarで現在再生中のトラックの名前を話すものが欲しいのですが、WSHパネルを使用してPowerShellテキストからスピーチスクリプトを起動するのが最善ですが、WSHパネルではトラック名を取得できません。私の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」を話しますが、トラック名は話しません。引数をエコーするようにスクリプトを設定しているため、パススルーすることすらありません。また、すべての曲に対して「テストテストパート2」を表示するだけです。それで、私がしようとしている方法でトラック名を渡すにはどうすればよいですか?

回答:


1

私はまだ小さな問題があり、それを修正したときに答えを出すのを忘れていました。ありがとう、私は誰かがそれを役に立つと思うことを願っています:

アーティスト+アルバム+トラック名を読み上げ、不要なものを話さないようにテキストをクリーンアップします。

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 {get;set;}
Voice                         Property   System.Speech.Synthesis.VoiceInfo     Voice {get;}
Volume                        Property   int Volume {get;set;}
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

デフォルトでは、Windows 10にはアメリカ英語用に男性と女性の2つの声が付属していると思います。英国や他の言語の声があると思いますが、私はそれらをあまりチェックしていません。レートも増減できます。
-jamesg76
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.