PowerShellで話す

多くのSF映画では、人々は音声コマンドを使用してコンピューターと対話します。 たとえば、人が部屋に入ると、そこは暗いです。 「コンピューター、軽い50%!」と彼は言います。 「50%の明かりがあります!」-コンピューターは心地よい女性のコントラストで反応し、薄明かりを含むバイザーの下にそれを取ります。 誰がこれを望まなかったのですか? しかし、そのような相互作用のアイデアがずっと前に生まれ、SFブックや映画のフレームをさまよいながら、今ではすべてが変わりました。ハイテクの手元でのアクセシビリティが可能になりました。 ロバートハインラインの小説「月は厳しい愛人」(1966年)では、マイクのスーパーコンピューターは自由に話すことができましたが、彼は膨大なスペースを取り、もちろんモバイルではありませんでした。 私の物語の主人公は、理想的な発音や対話を維持する能力を自慢することはできませんが、彼の大きさのために、彼は非常に有能です。 もちろん、私はAsus EeePC 1000ネットブックについて話している。



少し前までは、新しいMS Windows 7 RCオペレーティングシステムをインストールしましたが、キットで提供されているものに慣れることはできませんでした。 私にとって最大の関心事は、PowerShellコマンドラインとPowerShell ISEでした。 インターネット上のどこかに、音声を再生するなど、ほぼすべてのタスクを実行するためのさまざまなコマンドレットがあります。 ただし、インストールされたコマンドレットに依存しないように、すべてを通常の関数で実装したいと考えました。 最終的に、それらは特定のコンピューター上にない可能性があり、プロファイルのコピーはほんの数分です。 さらに、新しいアセンブリでの消失の最近の履歴、たとえば、クリップボードを操作するためのGet-Clipboardコマンドレットは、まれなコマンドレットの過剰使用について警告しています。 ただし、.NETクラスはどこにも移動しませんが、それらへのアクセスも簡単ではない場合があります。この場合、クリップボードを操作できるようにするには、-staモードでコンソールを起動する必要があります。



ニックネームの1つから関数名のプレフィックスを使用して、3文字のみを入力することで自動補完によって自己記述関数にすばやく到達できるようにします。PowerShellコマンドでは他の場所にはありません。



さて、ここで、実際には、実装自体:



function astSpeak([ string ]$inputString, [ int ]$speed = -2,

[ int ]$engine = 0, [ switch ]$file,

[ switch ]$list, [ switch ]$buffer,

[ int ]$volume = 85)

{

#

$oVoice = New-Object -com "SAPI.spvoice"



#

if ($list)

{

Write-Output " : "

$i = 0

Foreach ($Token in $oVoice.getvoices())

{

Write-Host $i - $Token.getdescription()

$i++

}

}

#

else

{

# ,

if ($file){ $toSpeechText = Get-Content $inputString}

# ( sta)

elseif($buffer){

$ null = [reflection. Assembly ]::LoadWithPartialName( "System.Windows.Forms" )

$toSpeechText = [Windows.Forms.Clipboard]::GetText() }

# ,

else { $toSpeechText = $inputString}



#

$oVoice.rate = $speed

$oVoice.volume = $volume

$oVoice.voice = $oVoice.getvoices().item($engine)

$oVoice.Speak($toSpeechText)

}

}




* This source code was highlighted with Source Code Highlighter .






機能とは何ですか?



システムに設定された投票を一覧表示できます。 ロシア語のテキストを読むことができる人を含む、かなり多数の異なる声があります。 私の主な声はAlionaで、Wikipediaとフィクションの記事を読んでテストに合格しました。 後者として、モシュコフ図書館で撮影されたハリー・ハリソンの短い皮肉な短編「絶対兵器」が使用されました。 声のおかげで、私はすぐにテキストのいくつかのタイプミスを見つけて、文字「」の必要性を理解することができました。そうでなければ、読書は印象的でした。 したがって、音声エンジンのリストを取得するには、以下を呼び出す必要があります。



astSpeak -l



画像



任意のテキストを読むことができます。これは最も簡単です。



astSpeak「こんにちは! 私の名前はアレナ、私はあなたのコンピューターの声です!」



テキストファイルを読み取ることができます。 これを行うには、適切なキーと目的のファイルへのパスを指定します。 たとえば、次のように:



astSpeak -f "D:\ Library \ Rudyard Kipling \ Commandment.txt"



はい...おそらく私たちはもうアレナへの詩を信用しないでしょう:)



クリップボードに含まれるテキストを読むことができます。 PowerShellパッケージから特別なコマンドレットが除外され、sta(シングルスレッドアパートメント)モードでのみ.NETツールを使用してバッファーにアクセスでき、PowerShellコンソールはデフォルトでmtaモードで起動するため、この実装にはいくつかの困難があります。 mtaモードでは、ISEはデフォルトで機能します。 ただし、これは問題ではありません。コンソールショートカットのプロパティで対応するキーを指定するだけで十分です。



画像



したがって、コンソールモードで許可されている場合、次のようになります。



astSpeak -b



最悪なのは、URLがあった場合です。



音声の再生を伴うモードを呼び出す場合(つまり、音声エンジンのリストに加えて)、音声速度、音声ボリューム、およびサウンドエンジン番号も設定できます。 たとえば、音量を85/100に設定し、速度をわずかに上げて、カテリーナ(エンジン番号1)のパフォーマンスで「hello」という単語を聞くには、次のコマンドを入力する必要があります。



astSpeak -e 1 -v 85 -s 3こんにちは



一般的に、すべてが本当にシンプルです! コメント、ヒント、またはこれらすべてを改善する方法を知っているなら、私はあなたから聞いてとてもうれしいです。 そして...Habrémeの最初のトピックで! :)




All Articles