powershell を使ってWindows に 「Alexa テレビをつけて」をしゃべってもらう(複数のボイス対応)

2024年4月24日

簡単なバッチファイル

PowerShell -command “$x=New-Object -ComObject SAPI.SpVoice ; $x.Speak(\"アレクサ、テレビをつけて\")"

複数ボイス対応バッチファイル

スクリプトファイルを作らずにバッチファイルで動かします

Haruka Sayaka Ayumi Ichiroの声を選べます

話すスピードと音量を調整できます

命令する言葉をパラメーターで指定できます

@echo off
set keyword=アレクサ、
set word1=%~1

if “%word1%" == “" (
set word=テレビをつけて。
) else (
set word=%word1%
)

set words=%keyword%%word%
echo %words%
::rate -10 – 10
set rate=0
::Volume 0 – 100
set Volume=100

set Voice=
set Voice=’Microsoft Haruka’
set Voice=’Microsoft Sayaka’
set Voice=’Microsoft Ayumi’
set Voice=’Microsoft Ichiro’

if “%Voice%" == “" goto syori1
goto syori2
:syori1
PowerShell -command “$x=New-Object -ComObject SAPI.SpVoice ;$x.rate=%rate%;$x.Volume=%Volume%; $x.Speak(\"%words%\")"
goto end1

:syori2

PowerShell -command ^
$sp = New-Object -ComObject SAPI.SpVoice; ^
$cat = New-Object -ComObject SAPI.SpObjectTokenCategory; ^
$cat.SetId('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech_OneCore\Voices’, $false); ^
$oldspVoice = $sp.Voice; ^
foreach ($token in $cat.EnumerateTokens()){ ^
If($token.GetAttribute('Name’) -eq %Voice%){ ^
Write-Host $token.GetAttribute('Name’); ^
$sp.Voice = $token; ^
$sp.rate=%rate%; ^
$sp.Volume=%Volume%; ^
$sp.Speak(\"%words%\"); ^
break ^
}}; ^
$sp.Voice = $oldspVoice;

timeout /t 3
goto end1
:end1

参考

https://qiita.com/7shi/items/7781516d6746e29c03b4