ひっそりとLa Esperoのイントロを初音ミクに歌わせてみるテスト。ここでFélicien Menu de Ménilのマーチではなくて敢えてAdelsköldのアリア版を持ってくる辺り、私のひねくれ具合は推して知るべしといったところでしょう。
例えば上記の例ですと、venisのsを「す」と読ませると母音のuが目立ってしまうようです。子音のsだけは発音出来ないので、仕方なしにヴェロシティを下げています。エスペラントで歌って貰う試みですが、日本語で歌う場合も同様に頭を悩ませることが多いのだなとつくづく感じ入った次第で、この辺りの技術情報が世に求められているのだとの思いを新たにしました。やはり音楽は奥深いです。
発音関連のモジュールの開発に於いては、母音省略という要件をすっかり忘れていたので、せこせこと修正を重ねる羽目となりました。散文については文字通り書き散らかすことは苦ではなく、呼吸するように(少なくとも手書きよりは早く)書けるのですが、芸術的感性といったものを人生の道の途中に落として来たらしく、韻文を書くことが日常生活で皆無でしたので、考えからすっかり漏れていました。というところで、電車に揺られる朝の通勤時間帯に思い付きでメモした機能は、要件定義と外部設計は勢いで書けたとしても、詳細設計ともなるとなおざりになってしまいました。
それはさて措き、こうした開発をしていると、目下話題急上昇中の初音ミクに、エスペラントで歌わせることが出来るのではないかと思うようになりましたので、以下に考察を述べてみました。
ようやくversio 0.9.0で実装を始めた音韻関連の機能が整いつつあります。直近で更新した内容は、韻文中での発音に関する二点です。
前者では、アクセントを変更しないという点が曲者です。エスペラントの規則性ゆえに、実装も極めて論理的かつ簡素なものとなっていたのですが、こういう特例の存在により、優雅さとは程遠い泥臭い実装を行う羽目になります。前者ではl’を「ル」と読めるようになるのですが、l’armoをルアーモと読んでしまうために、ここでも特例を設けてラーモと読めるように処理を書き加えました。
良い機会なので、発音をカタカナやIPAで転記する処理の概要をご紹介します。あまり変なことを考えず、人間の頭の中で行っている処理を素直にコード化することが一番と言えます。
('sam', 'ide', 'an', 'o', 'j', 'n')は('sam', 'ideanojn')になります。これはまだ文法上の区切りですが、続け読みが出来るように配慮された配列になっています。'sam'は('sa', 'm')に、'ideanojn'は('i', 'de', 'a', 'no', 'j', 'n')に分解されます。これで、それぞれの要素が一つの音に対応するような配列になりました。('sa', 'm', 'i', 'de', 'a', 'n', 'o', 'j', 'n')というリストを得て、配列に突っ込みます。trすれば事足ります。アクセント位置には長母音の記号を与えて完成です。samとideanojとの間は空白を入れておきます。'sa'は$japana->{'s'}{'a'}で「サ」が求まりますし、母音のみや子音のみの場合にはダミーのキーを与えて$japana->{'m'}{'_'}で「ム」、$japana->{'_'}{'i}で「イ」が求まるという次第です。長母音で「ー」を与えて完成です。このように可能な限り手を抜いて楽をして発音させている無邪気な実装なので、世知辛いesper’などという文字列を与えたら、まず「’」なんてハッシュキーがないのでこけますし、これを無視したら母音が一つ足りないわけでエスペル(エがアクセント)と読もうとするしで大変です。
そこで、以下のように機能追加することによって、こうした言語現象にも対応出来るようにしました。
音韻関係のモジュールを先の辞書引き機能の改版に合わせて新規に作成したのですが、予想通り、初物の機能はなかなか安定しませんでした。それというのも、エスペラントの規則性を過大評価したというかこれに甘えてしまい、乏しいテストケースしか用意しなかったのが敗因と言えます。結果、連日連夜の改版を行うこととなりました。大多数の場合は問題なかったとはいえ、誤った発音が表示されたり、処理が異常終了したりすることがあり、反省しています。
もう少し具体的に述べますと、エスペラントの規則性に例外があるというのではなく(sam/ide/an/oやらといった場合は除きますが)、Perlで字上符付き文字を実装する際に手抜きをしており、これが後々尾を引いているといったところでしょうか。
実は、エスペラント語日本語翻訳システム「Ermitejo」は、21世紀、このUnicodeの時代に、字上符付き文字の内部処理を前時代的なx後置式の代用表記で行っています。関数名やら変数名やらをエスペラント式に名付けているだけなら特に問題がないのですが、取り扱うデータを代用表記すると、色々不都合が起きます。
普通に処理している場合には、外部から正書法ないし代用表記で突っ込まれたデータのアルファベートを変換して内部で使い、外部に表示する際には逆変換して正書法で返しているので問題はありませんでした。しかし、エスペラントの誇る1文字1音という原則が崩れ、「ĉ」の音「ʧ」を「cx」と2文字で表現することになりますので、音韻関係の機能の実装で舞台裏が拙さが露見したという次第です。
責任転嫁するつもりは毛頭ありませんが、コーディングに使っているエディタのサクラエディタがUTF-8への対応が甘く、なかなかこうした悪癖を改められないという思いもあります。サクラエディタは内部コードがUTF-8等ではなくShift-JISなので、UTF-8のファイルの読み書き自体は出来ますが、エスペラントの字上符付き文字等やIPA等は保存出来ないので、痛いところです。今更秀丸にも戻れませんが、さりとてサクラエディタの抜本的な書き直しを行える技量も時間も私には無いので、開発者の方々に声援を送ることしか出来ません。
【追記】kobake氏のウェブサイト「digital hole」にて、UNICODE版サクラエディタの開発が進められています。
ということで、そうした発音関係の修正を中心として、ここ数日での改版点の委細を以下に転記します。
構文解析機能の開発の息抜きに、エスペラント語の単語辞書引き機能へ発音関連情報を追加しました。辞書引き結果に国際音声記号(IPA)とカタカナ読みの表記を新たに加えることにしたものです。
エスペラント語は表記と発音が完全に一致している言語ですので、実装は割合簡単でした。接尾辞や文法語尾等は語幹と融合し、その一方で接頭辞と語幹や語幹同士は融合しないという規則さえあれば、後は単にエスペラントの字母(アルファベート)をIPAに字訳したり、「子音」「母音」「子音+母音」でカタカナに置換したりするだけで実現出来ました。アクツェント(アクセント)も後ろから二番目の母音に必ず付与されますし、その後ろに子音が二つ連続している場合を除いて長母音とすることも、一貫した論理(ロジック)で記述出来ます。
とはいえ、sam/ide/an/oを「サムイデアーノ」ではなく慣用化した「サミデアーノ」と読む場合は例外ですので、今は実装していません。また、アクツェント付き母音の直後にtr, dr, br, bl, kv, dzのように連続した子音がある場合には人により長母音にすることもあるそうですが、これも未実装です。なにぶん息抜き程度の機能なので、今後の実装優先度も低い物と考えています。
上記の通り、(ほぼ)完全な規則性に基づく発音なので、初学者の方や、興味本位でエスペラントの“触り”を眺めたい方以外には無用の長物かも知れません。とはいえ、エスペラント語日本語翻訳システムが完成した暁には、そうした方々にもお使いいただいて、エスペランティストの間口を広げたいと思っているので、こうした「言わずもがな」な機能を敢えて盛り込むことも大事だと、私は思っています。
なお、9月7日の朝日新聞の夕刊に、JR釜石線の駅にエスペラントの愛称が付けられている旨の記事(矢野直美氏のコラム「鉄子の鉄学」より、「銀河ドリームライン」)が載っていたため、それで興味を抱いて当サイトを訪れたというシナリオで何気なくluna noktoを検索してみたところ、versio 0.9.1で是正することになった障害が判明しました。いやはや、業務ですらコーディングから離れつつあるというのに、いわんや業務でないとテストケースがなおざりになりがちで、反省するところしきりでした。
その他、ここ数日で連続した改版点の委細は、以下の通りです。
| 月 | 火 | 水 | 木 | 金 | 土 | 日 |
|---|---|---|---|---|---|---|
| « 4 月 | ||||||
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |