Acronym を PowerShell に喋らせる

Acronym をナレーターに喋らせ、ファイルにする、の巻

やり方は親切にまとまってるサイトがあるよ

here.

PowerShell にはまだまだ不慣れなので Python とコラボ

やりたいことが遂行できりゃ、なんでもいいのです。先に、「Pythonが生成する PS1」のゴールイメージはこれ:

acro2speechwav.ps1
1 Add-Type -AssemblyName System.speech
2 $speak = New-Object System.Speech.Synthesis.SpeechSynthesizer
3 $speak.Rate = -5  # from -10 to 10, default is zero.
4 $speak.SetOutputToWaveFile("c:\path\to\out\TYVM.mp3")
5 $speak.Speak("Thank You Very Much")
6 $speak.SetOutputToWaveFile("c:\path\to\out\FYI.mp3")
7 $speak.Speak("For Your Information")
8 # ...
9 $speak.Dispose()

ただの繰り返しね。ネタ元は「NVDAの「読み上げ辞書」と acronym」です。

で、この ps1 を、「NVDAの「読み上げ辞書」と acronym」で作った「default.dic」からその場で生成して、subprocess で powershell を呼び出す、と。

こんなです;

acro2speechwav.py
 1 # -*- coding: utf-8 -*-
 2 from os import path
 3 import subprocess
 4 
 5 d = {}
 6 #
 7 for line in open("default.dic", "rb").read().decode("utf-8-sig").split("\r\n"):
 8     if line:
 9         s = line.split("\t")
10         if "." not in s[0]:
11             d[s[0]] = s[1]
12 #
13 fn = "acro2speechwav.ps1"
14 fo = open(fn, "w")
15 fo.write("""\
16 Add-Type -AssemblyName System.speech
17 $speak = New-Object System.Speech.Synthesis.SpeechSynthesizer
18 $speak.Rate = -5  # from -10 to 10, default is zero.
19 """)
20 # ---
21 for k in d:
22     fo.write("""\
23 $speak.SetOutputToWaveFile("{}.mp3")
24 $speak.Speak("{}")
25 """.format(path.join(path.abspath("."), k), d[k]))
26 # ---
27 fo.write("""\
28 $speak.Dispose()
29 """)
30 fo.close()
31 #
32 subprocess.call([
33         "C:/WINDOWS/SysWOW64/WindowsPowerShell/v1.0/powershell",
34         path.abspath(fn)])

ちょいと読みにくいかもな。

結果

TYVM

Thank You Very Much

FYI

For Your Information

TMTT

Too Much To Type

ASAP

As soon as possible

OIC

Oh, I See

RTM

Read the Manual

LOL

Laughing Out Loud

PTAL

Please take another look

ETA

Estimated time of arrival

NSFW

Not Suitable For Work

IMHO

In My Humble Opinion

OBTW

Oh, By The Way

TAFN

That’s All For Now

AKA

Also known as

TIA

Thanks In Advance

IKR

I know, right?

FYA

For your action

IOW

In Other Words

TLDR

Too long, didn’t read

IIRC

If I remember correctly

PMFJI

Pardon Me For Jumping In

WTG

Way To Go

ROTFL

Rolling on the floor laughing

FWIW

For What It’s Worth

AFK

Away From Keyboard

RSN

Real Soon Now

IMO

In My Opinion

ICWUM

I See What You Mean

WRT

With Regard to

TTTT

To Tell The Truth

ROFL

Rolling on the floor laughing

AWHF

Are We Having Fun?

OTOH

On The Other Hand

BTW

By the way

NRN

No Reply Necessary

TTBOMK

To The Best Of My Knowledge

AFAIK

As far as I know

TTYL

Talk To You Later

AFAICT

As far as I can tell

IIUC

If I understand correctly

HTH

Hope This Helps

POV

Point Of View

iff

if and only if

WIP

Work in progress

LGTM

Looks good to me

付記

日本語訳は自分で調べてくれぃ。

…つーか、自分用にそのうち固定ページ作ろうかとは思ってるけどね。間違いなく自分にとって便利になるはずだからさ。

もうひとつ。「default.dic」、手で作ったものを NVDA が読み込んで NVDA が保存すると、

  1. utf-8-sigになる
  2. どうやらただのタブ区切りではないみたい

となって、2つうまくいかなかった。以下2つ:

1 $speak.SetOutputToWaveFile("c:\Users\hhsprings\AppData\Roaming\nvda\speechDicts\FTW.mp3")
2 $speak.Speak("For the win    1  0")
3 
4 $speak.SetOutputToWaveFile("c:\Users\hhsprings\AppData\Roaming\nvda\speechDicts\OMG.mp3")
5 $speak.Speak("Oh My God!   1")

手で書いたときは確かにちゃんとタブ区切りにしたつもりなんだけどなぁ?

ま、ここいらも、もうちっとまともなページに仕立てる際には解決しときますわ。

動くサンプルで学べるWindows PowerShellコマンド&スクリプティングガイド/五十嵐貴之【後払いOK】【2500円以上送料無料】