Python for .NET の微続き。PowerShell で遊んだのと同じことをしてみる

これと同じことを

別途インストールが必要なものがあったと記憶してるが、遊んだのが随分前なので失念。ともあれ「ワシの環境ならば」こんな:

 1 # -*- coding: utf-8 -*-
 2 """
 3 powershell code:
 4 
 5 .. code-block:: powershell
 6 
 7     [Reflection.Assembly]::LoadWithPartialName("Microsoft.Speech")
 8     $speak = New-Object Microsoft.Speech.Synthesis.SpeechSynthesizer
 9     $speak.Rate = 1  # from -10 to 10, default is zero.
10     $speak.SetOutputToWaveFile("zerozerowonderful.mp3")
11     $speak.SelectVoice("Microsoft Server Speech Text to Speech Voice (en-US, Helen)")
12     $speak.Speak("zero zero")
13     $speak.Speak("wonderful")
14     $speak.Dispose()
15 """
16 import clr
17 #clr.AddReference("Microsoft.Speech")  # NG.
18 from System.Reflection import Assembly
19 
20 Assembly.LoadWithPartialName("Microsoft.Speech")
21 import Microsoft.Speech
22 speak = Microsoft.Speech.Synthesis.SpeechSynthesizer()
23 
24 #import pprint
25 #print(pprint.pformat(dict(Microsoft.Speech.Synthesis.SpeechSynthesizer.__dict__)))
26 
27 speak.SelectVoice("Microsoft Server Speech Text to Speech Voice (en-US, Helen)")
28 speak.Rate = 3
29 speak.SetOutputToDefaultAudioDevice()
30 speak.Speak("zero zero")
31 speak.Speak("wonderful")
32 speak.Dispose()

でろでろわだほー。おけ。

PowerShell が悪いとは言わないが、やっぱし主食が Python だもの、PowerShell から同じことをするより気分はずっといい。


今後のこれ関係のネタを「書くとすれば」、の予定。(皮算用。)

何せ .NET そのものが巨大なシステムなので、いくら Python for .NET が楽に .NET 出来るといっても、色々前提知識が必要。特に GAC ね。ちまちま調べてるけど、簡単に「初心者向け説明だぜをら」なんてことはでけん。

なので「全貌説明」は今のところ絶望的に大変だけれど、ただ「Python for .NET から .NET を使う際の、とりわけヘルプや機能一覧の取り方」なんかは早いとこ調べつくしてまとめたい。

いくら「Python にしか見えない」くても、そこは「異言語交流」に付き物の異端ぶりはすぐにわかるものでも結構あって、特に「dir()」や「help()」は普通の Python と同じようには使えない。今わかってることだけ箇条書きしとく:

  • 多くのプロキシオブジェクトを経由するため、help() は期待通りの「振る舞い」だったりそうでなかったり色々。
    • ただし、「期待通りに振舞うヘルプ」の場合でも「説明テキスト」は一切含まれない。メソッドのシグニチャがわかる、というだけ。
    • ダメなパターンではメソッド一覧にすらならず、__doc__ 属性も、あるのに引っぱってきてくれない。
  • help()がダメな場合の次善策が「__dict__pprint」。上のコード内でコメントアウトしてるヤツね。
  • この次善策で得られる 「__doc__」には、(namespace の場合には?)興味深い情報が含まれてて、「'Namespace containing types from the following assemblies:\n\n- Microsoft.Speech, Version=11.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\n'」など。
  • dir()」も結局嬉しくないので 「__dict__pprint」が良さげ。