pythonで周期表の語呂合わせなどの音声を発生させる簡単な方法

# 背景

化学の周期表の語呂合わせなどを暗記しようと思うと、人前で喋るのは憚れるタイプの語呂合わせが多いこともある。そんなときや、何か喋る内容を音声に保存したい場合など、python で簡単にパソコンに喋らせる方法を紹介する。

やり方はたくさんあって、ここでは、mac の say というコマンドラインのツールを使って、読み込ませたテキストファイルを音声化するだけです。

## 声出しスクリプトの御本尊

``` python:speak.py

import sys, os 

args = sys.argv
if len(args) == 2:
	pass
else:
	print("need to specify a file")
	sys.exit()

f = open(args[1])
all = []

for i, one in enumerate(f):
	one = one.strip().split()
	mytext = " ".join(one)
	os.system("say " + mytext)
	all.append(mytext)
```

だけで、ファイルを入力して、適当にスペースを入れることで、少し間を生成するようにして、
say に与えるだけです。

# 応用例

## 例1) 元素周期表の声出し方法

[周期表は語呂合わせで！覚え方を化学専攻歴6年の理系大学院生が語るよ。](https://www.nagibrno.com/entry/periodic-table-of-elements) や、[周期表の覚え方5(ランタノイド、アクチノイド)](https://ameblo.jp/vaca-ajo-001/entry-12279803882.html) を頂戴して、

``` bash:goro.txt
水平リーベ僕の船 「なーに」間がある シップスクラークか
ヘイ！リッチな彼女とルビーせしめてフランスへ！
ベットに潜って 彼女とすればランランラン！
ふっくらブラジャー愛の跡てん
変なネーチャンある暗闇でキス連発でオガネソン
スコッチ・曝露マン 徹子にどう？ 亜鉛がゲッ！明日はセレンのブラジャークリプトン？
スカイラーーーアク！
ちずるはハーフでラフ！
バナナを食べたデブ
クロム！もうすぐ！！
11個の銅・銀・金メダルをレンドゲン
オッス！船長！鉄砲リバー
待ってくれ！ボーリング
テルオ氏はハスキー！
コーラ！いれるの、待って！
ニッパラはペットです。
亜鉛、カドミ、ハゲ！コケる
ボーアがインテリ日本好き
炭サイぼう（単細胞）なゲーテはすんなり触れるな
にっぽんの朝は酢豚にビールとモスコビーム
ランドセルはプラスチック粘土 午後のサマーはヨーロッパのゴッドが波照間に自炊するためホエール釣りに行ってるってよ
あく汁取りのプロが裏で眠るプールでアメリカ産キュウリはバクっと刈り取るアインシュタインはFM聴いて麺がのびてるだろう
```

というテキストファイルを作成し、その意味は、

- ヘ(**H**)イ！リッチ(**Li**)な(**Na**)彼(**K**)女とルビー(**Rb**)せし(**Cs**)めてフラ(**Fr**)ンスへ！
- ベッ(**Be**)トに潜っ(**Mg**)て 彼(**Ca**)女とすれ(**Sr**)ば(**Ba**)ラン(**Ra**)ランラン！
- ふっ(**F**)くら(**Cl**)ブラ(**Br**)ジャー愛(**I**)の跡(**At**)点(**Ts**)
- 変(**He**)なネー(**Ne**)チャンある(**Ar**)暗(**Kr**)闇でキス(**Xe**)連(**Rn**)発でオガネソン(**Og**)
- スコ(**Sc**)ッチ(**Ti**)・曝(**V**)露(**Cr**)マン(**Mn**) 徹(**Fe**)子(**Co**)に(**Ni**)どう(**Cu**)？ 亜鉛(**Zn**)が(**Ga**)ゲッ(**Ge**)！明日(**As**)はセレン(**Se**)のブラ(**Br**)ジャークリプトン(**Kr**)？
- スカ(**Sc**)イ(**Y**)ラー(**La**)ーーアク(**Ac**)！
- ち(**Ti**)ずる(**Zr**)はハーフ(**Hf**)でラフ(**Rf**)！
- バナ(**V**)ナを(**Nb**)食(**Ta**)べたデブ(**Db**)
- クロム(**Cr**)！も(**Mo**)う(**W**)すぐ(**Sg**)！！
- 11個の銅(**Cu**)・銀(**Ag**)・金(**Au**)メダルをレンドゲン(**Rg**)
- オ(**O**)ッス(**S**)！船(**Se**)長！鉄(**Te**)砲(**Po**)リバー(**Lv**)
- 待(**Mn**)ってく(**Tc**)れ(**Re**)！ボー(**Bh**)リング
- テ(**Fe**)ル(**Ru**)オ氏(**Os**)はハス(**Hs**)キー！
- コ(**Co**)ーラ(**Rh**)！いれ(**Ir**)るの、待って(**Mt**)！
- ニッ(**Ni**)パラ(**Pd**)はペット(**Pt**)です(**Ds**)。
- 亜鉛(**Zn**)、カドミ(**Cd**)、ハゲ(**Hg**)！コケる(**Cn**)
- ボ(**B**)ーア(**Al**)が(**Ga**)イン(**In**)テリ(**Tl**)日本好き(**Nh**)
- 炭(**C**)サイ(**Si**)ぼう（単細胞）なゲー(**Ge**)テはすん(**Sn**)なり(**Pb**)触れるな(**Fl**)
- に(**N**)っぽ(**P**)んの朝(**As**)は酢豚(**Sb**)にビ(**Bi**)ールとモスコビーム(**Mc**)
- ラ(**La**)ンドセ(**Ce**)ルはプラ(**Pr**)スチック粘(**Nd**)土 午後(**Pm**)のサマ(**Sm**)ーはヨーロッパ(**Eu**)のゴッド(**Gd**)が波照([はてる]**Tb**)間に自炊(**Dy**)するためホ(**Ho**)エール(**Er**)釣り(**Tm**)に行って(**Yb**)る(**Lu**)ってよ
- あく汁(**Ac**)取り(**Th**)のプロ(**Pa**)が裏(**U**)で眠る(**Np**)プール(**Pu**)でアメリカ(**Am**)産キュウリ(**Cm**)はバクっ(**Bk**)と刈り(**Cf**)取るアインシュタイン(**Es**)はFM(**Fm**)聴いて麺(**Md**)がのび(**No**)てるだろ(**Lr**)う


という非常の高尚なものであり、

``` bash: 
%python speak.py goro.txt
```

と実行すると、音声が出る。

## 例2) 放射性核種

[語呂合わせ②（放射性核種）](https://radioisotope-f.hatenablog.com/entry/65640574) を例に拝借させて頂くと、

``` bash:goro2.txt
別荘ふうなあるプレイスすごく真面目なこひに溺れ一途に浪人愛せよ乙女美人
べったりよせて　黒こげマンがするばっせ　カードイン
するするカスピにいってくる　あれ　ごご ルビー ハイシー
```
という奇妙な文字列であるが、、

- 単核種元素（安定同位体が1つのみの元素）
    - $^{9}Be ^{19}F ^{23}Na ^{27}Al ^{31}P ^{45}Sc ^{55}Mn ^{59}Co ^{75}As ^{93}Nb ^{89}Y ^{103}Rh ^{127}I ^{133}Cs ^{197}Au ^{209}Bi $
    - 「別(**Be**)荘風(**F**)な(**Na**)ある(**Al**)Place(**P**)で、すごく(**Sc**)真面目(**Mn**)にこ(**Co**)ひ(**As**)におぼ(**Nb**)れ、一途(**Y**)に浪人(**Rh**)、愛(**I**)せよ(**Cs**)！を(**Au**)とめ美人(**Bi**)！」
- EC（軌道電子捕獲）壊変をする核種（EC100%）
    - $^7Be ^{201}Tl ^{123}I(^{125}I) ^{75}Se ^{55}Fe ^{51}Cr ^{57}Co ^{68}Ge ^{54}Mn ^{67}Ga ^{85}Sr ^{133}Ba ^{139}Ce ^{109}Cd ^{111}In $
    - 「べ(**Be**)ったり(**Tl**)よ(**I**)せ(**Se**)て(**Fe**)　黒(**Cr**)こ(**Co**)げ(**Ge**)マン(**Mn**)が(**Ga**)する(**Sr**)ば(**Ba**)っせ(**Ce**)　カード(**Cd**)イン(**In**)　」
    - EC(p+ + e- --> n + ν) なので、陽子過剰核で起こる
- 純β壊変物質（β線のみ放出しγ線は放出しない）
    - $^{89}Sr ^{90}Sr ^{45}Ca ^{35}S ^{32}P(^{33}P) ^{63}Ni ^{90}Y ^{99}Tc ^{106}Ru ^{42}Ar ^{147}Pm ^{87}Rb ^{3}H ^{14}C $
    - する(**Sr**)する(**Sr**)カ(**Ca**)ス(**S**)ピ(**P**)に(**Ni**)いっ(**Y**)てく(**Tc**)る(**Ru**)　あれ(**Ar**)　ごご(**Pm**) ルビー(**Rb**) ハ(**H**)イシー(**C**)

という高尚な意味がある。


``` bash: 
%python speak.py goro2.txt
```

で音声を確認する。

[語呂合わせ①（周期律表の覚え方）](https://radioisotope-f.hatenablog.com/entry/65639389) も試しに拝借させて頂くと、

``` bash:goro3.txt
水兵リーベ僕の船  ソーダ曲があるシップスクラー クか
スコッチ暴露マンてこにドアがゲアッセブルク
ルビーすられて矢じりの部品もってくる ロープであがくど 因数しぼって行くぜ
せしめた薔薇は  高く売れ と教えられ 白い英雄 過ぎたる訛りバイポーラン
フランスあこちゃん　裸婦でドブに死亡 エッチすまいと 出すロジャー
ランちゃんせっかちプルンとヌード 午後のSM 夕方 テレビで大放送 エロくて　たまらず いたぶるん
アコちゃんのパイは 上向きニップル ぷるん甘えて噛んでばっかりね　エスじゃ不満でノれないわ
```

となる。スペースを入れると、そこで一息つく。

## 例3) 魔法数

- [魔法数の覚え方](http://startop.blog.shinobi.jp/覚え方/魔法数覚え方
)
-- ふた　ば　ぶろ　には　いずれ　(のへ)　やに　(も　い)　いふろ　いやし
-- 2        8     20     28        50                    82                 126       184


## 例4) 「半減期」ゴロ付き

[放射線科専門医試験対策「半減期」ゴロ付き](https://ameblo.jp/creme-chocolat-shoko/image-12305054395-14013895072.html) が素晴らしい完成度なので拝借。一部改変。

- PET製剤
    - 行こお、に(**$^{15}O$(2min)**)、いさんと(**$^{13}N$(10min)**)、いいしにを(**$^{11}C$(20min)**)、いはふひと(**$^{18}F$(110min)**)  # 時定数の短い順
    - 安定同位体は、$^{16}O,^{14}N,^{12}C,^{19}F$、であり、C, N, O は陽子と中性子の数が同数で安定で、Fだけ中性子が一つ多いことに注意。
    - PET製剤は中性子が欠乏しているがゆえに、「陽子 --> $^{+}e$ + 中性子 + 電子ニュートリノ」のβ+崩壊を起こし、中性子欠乏な励起状態から基底状態に遷移する。
    - 15O(陽子8個、中性子7個)であれば、15N(陽子7個、中性子8個)の基底状態に落ちる。
- ジェネレータ (IT、ガンマ線)
    - 肺も膨らむ13秒(**$^{81m}Kr$(13sec)**)、救急的に６時間はガマン(**$^{99m}Tc$(6h)**)
- β-崩壊
    - 一切酔う蜂(**$^{131}I$(8day)**)、野球するイチロー(**$^{89}Sr$(51day)**)、くれわいの虫(**$^{90}Y$(64h)**)
- ガンマ線
    - 行くは金2日(**$^{198}Au$(2.5day)**)、避妊後よ60日はガマン(**$^{125}I$(60day)**)、いい国いるナミ(**$^{192}Ir$(73day)**)
- α崩壊
    - 夫婦、未来いい(**$^{223}Ra$(11day)**)ある(α)
- ほか
    - ガンマ線源
        - 無礼な子はごねる　(**$^{60}Co$(5年)**)
        - いっさいなくす30年　(**$^{137}Cs$(30年)**)




## 例5) 全元素

``` bash:genso.txt
1	H	水素
2	He	ヘリウム
3	Li	リチウム
4	Be	ベリリウム
5	B	ホウ素
6	C	炭素
7	N	窒素
8	O	酸素
9	F	フッ素
10	Ne	ネオン
11	Na	ナトリウム
12	Mg	マグネシウム
13	Al	アルミニウム
14	Si	ケイ素
15	P	リン
16	S	硫黄
17	Cl	塩素
18	Ar	アルゴン
19	K	カリウム
20	Ca	カルシウム
21	Sc	スカンジウム
22	Ti	チタン
23	V	バナジウム
24	Cr	クロム
25	Mn	マンガン
26	Fe	鉄
27	Co	コバルト
28	Ni	ニッケル
29	Cu	銅
30	Zn	亜鉛
31	Ga	ガリウム
32	Ge	ゲルマニウム
33	As	ヒ素
34	Se	セレン
35	Br	臭素
36	Kr	クリプトン
37	Rb	ルビジウム
38	Sr	ストロンチウム
39	Y	イットリウム
40	Zr	ジルコニウム
41	Nb	ニオブ
42	Mo	モリブデン
43	Tc	テクネチウム
44	Ru	ルテニウム
45	Rh	ロジウム
46	Pd	パラジウム
47	Ag	銀
48	Cd	カドミウム
49	In	インジウム
50	Sn	スズ
51	Sb	アンチモン
52	Te	テルル
53	I	ヨウ素
54	Xe	キセノン
55	Cs	セシウム
56	Ba	バリウム
57	La	ランタン
58	Ce	セリウム
59	Pr	プラセオジム
60	Nd	ネオジム
61	Pm	プロメチウム
62	Sm	サマリウム
63	Eu	ユウロピウム
64	Gd	ガドリニウム
65	Tb	テルビウム
66	Dy	ジスプロシウム
67	Ho	ホルミウム
68	Er	エルビウム
69	Tm	ツリウム
70	Yb	イッテルビウム
71	Lu	ルテチウム
72	Hf	ハフニウム
73	Ta	タンタル
74	W	タングステン
75	Re	レニウム
76	Os	オスミウム
77	Ir	イリジウム
78	Pt	白金
79	Au	金
80	Hg	水銀
81	Tl	タリウム
82	Pb	鉛
83	Bi	ビスマス
84	Po	ポロニウム
85	At	アスタチン
86	Rn	ラドン
87	Fr	フランシウム
88	Ra	ラジウム
89	Ac	アクチニウム
90	Th	トリウム
91	Pa	プロトアクチニウム
92	U	ウラン
93	Np	ネプツニウム
94	Pu	プルトニウム
95	Am	アメリシウム
96	Cm	キュリウム
97	Bk	バークリウム
98	Cf	カリホルニウム
99	Es	アインスタイニウム
100	Fm	フェルミウム
101	Md	メンデレビウム
102	No	ノーベリウム
103	Lr	ローレンシウム
104	Rf	ラザホージウム
105	Db	ドブニウム
106	Sg	シーボーギウム
107	Bh	ボーリウム
108	Hs	ハッシウム
109	Mt	マイトネリウム
110	Ds	ダームスタチウム
111	Rg	レントゲニウム
112	Cn	コペルニシウム
113	Nh	ニホニウム
114	Fl	フレロビウム
115	Mc	モスコビウム
116	Lv	リバモリウム
117	Ts	テネシン
118	Og	オガネソン
```

このファイルを用いて

``` bash: 
%python speak.py genso.txt
```

で確認する。ところどころ、おかしい。「金」は「かね」と読まれる。OSに依存するのかなぁ。

## 音声ファイルを保存したい場合

[Macのsayコマンドの使い方](https://qiita.com/zakuroishikuro/items/0c17acb21f119647c205)などを参照すると、say の引数 -o で音声ファイルにも保存できる。