【限】夏の自由研究
Added 2021-08-25 16:07:01 +0000 UTC実用的な、多言語、multi-language音源の考察。
*前提
・CVVC
// 別にVCVでもよいが、多言語対応としては時間対効果が悪い
・キレ音源程度の音階は確保する必要がある
// ただ単に録るだけでは平坦な音源になってしまう
*考慮すべきポイント
・キレ音源程度⇒「強く、高く」その発音ができるかにフォーカスを当てる。喋り声のレベルで真似して発声できるとしても、「歌のように」再現を行った際にその子音や母音が区別して発声できるのか考慮する。 [備考↓]
・自分が発音できない音は適当にそれっぽく読むか、諦める。
・これは録る、これは録らない、といったことを予め言語毎にGUIで選べてリストが自動生成できるようにするととても良い。
// そして、その結果を音源内にjsonとして要素として配置することでどのような音素が使用できるか明示的にできるのでとても良い。諦めた音素がユーザーにあるのか無いのか分かりやすくなる。
// ただ、X-SAMPAをズラーッと並べるとGUIがすごいことになるのでは…?⇒ブラウザ上で処理できるのであれば縦長ビヨーンでもあまり苦に感じない。
https://en.wikipedia.org/wiki/X-SAMPA
*各言語において必要とされる音素
+以下フォーマットでjsonを構成する
・X-SAMPAがASCII内に収まるのでデータ書式は不問
・子音や母音はX-SAMPAで表記、クオートなど変形が必要な文字列に関してはNAL方式を参考で展開
https://c3o2.hatenablog.com/entry/2021/06/16/224511
・Palatalizationに関してNAL方式では「'」の表記をしているので、「_j」ではなくそちらを採用。
・ISO 639-1コードに則った言語名称をオブジェクト名とする
https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
・consonant:使用する子音(配列)
・vowel:使用する母音(配列)
・日本語の例
{"ja":{"consonant":["b","b'","C","s+5C","d","dz","dz+5C","p+5C","g","g'","h","j","k","k'","m","m","n","J","N","p","p'","4","4'","s","t","ts+5C","ts","w","z","z+5C"],"vowel":["a","e","i","o","M"]}}
・英語の例
…
@リストの生成
・上記のフォーマットCとVをくっつけてリストを自動生成する
// TODO : どのように?
・母音→母音を収録するかを選択式にする
@重複子音に関して(英語「fr」など、連続した子音)
//TODO :一度録ったやつを使い回す形式でどの程度耐えられるか試してみた上でVCCやCCVを収録するか決定する。個人的には音階数を増やす方が遥かに効率的だと思っているが…(ARPASINGではCCはいい感じに録っていた。[a f r\ i]とかいう形で収録して、[a f][f r\][r\ i]で分ける。その点に関してのみ優秀。)
・[J]や[ts]など、単一の子音として区別するものに関しては収録する必要性があるが、この一覧では[Tj]はあるのに[Dj]がなく、参考基準にならなく、微妙。
→ https://en.wikipedia.org/wiki/Help:IPA/English
・現状、子音の長音化については度外視している。(つまり「んーーー」が言えない)json内に長音化可能かどうかを定義すべきかもしれない
*言語間の交差(重複音素の省略、言語追加の可能性)
・あるベースとなる言語の音源に、特定の言語の音素を追加していくとして、既存の言語と同一になる音素(あるいは話者が区別できない音素)はリストから除外することができる。
例)日本語で「た」を収録済みであれば英語で「ta」を録る必要はない。
// 収録が減るものの、追加側のデータだけでは音源として完結しなくなる
// これのために、音源からいい感じに特定の言語で必要な音素だけ抽出できると楽…だが、multi-language音源ではなくなる。
// 日本語CVVC、ARPASING、Hr.J式CVVC…のような各の表記のローカライズの為だけに音源を分離抽出するニーズはある。(それぞれ同じASCII表記で違う発音をしている場合があるので、各表現を保ったままマージはできない。)
・また、language.jsonとしてデータ残しておきそこから追加の際に不必要な音素を除外したリストを生成できるようにする
*言語間の交差(交雑音素の収録)
特定の言語Aには含まれるが、言語Bに含まれない音素があった場合、交差の為のVC"のみ"が必要になる(逆のB->Aも同様に必要になる)
例)[@ s+5C]←英語の母音@から、日本語の子音s+5Cへ接続する
// 逆の、日本語の子音「し」で英語の母音əの音素は"必須とはならない"
@口の動き
・同じ母音を連続して録ることで不慣れな母音の精度を上げることが可能だが、口の動きが考慮されていないVC-CVが生成されるため、例えば口の位置が近い「i<->e」であれば(おそらく)自然に繋がるが、母音の遷移が大きなものだと不自然になる。
// すくなくとも、私の声は[- CV]の音素がイマイチであることから単独音がうまく機能せず、CVVCとしてもうまく繋がって聴こえない理由はここにあると思っている(個人の感想)
// これを「demi-VCV」として「_sasisasas-」などのような大きな母音移動を含むリストを録ることで解決できるのでは?と思っている。(VCに指向性を与える。)
// TODO : 厳密な母音間遷移を考慮すると完全VCVになるのでどの程度の範囲について必要なのか調べる必要がある
*知識
・Palatalization(口蓋化)
https://en.wikipedia.org/wiki/Palatalization_(phonetics)
/bo/ で「ぼ」なのが、
/b'o/で「びょ」となるような発音。
一方で、/n'o/と/Jo/を区別できるかと言われると微妙
→ https://en.wikipedia.org/wiki/Voiced_palatal_nasal
「n'」という入力の煩雑さを減らすためのシンタックスシュガーとして「J」と言い切ってしまうのもアリ。
・Aspirated(有気音)
https://en.wikipedia.org/wiki/Aspirated_consonant
/p_ha/「ぷぁ」のような発音。英語ではアクセント時に一部出現する音。
https://en.wikipedia.org/wiki/English_phonology#Obstruents
/d_ha/などがヒンディー語ではそれなりに出現するらしい。
https://en.wikipedia.org/wiki/Help:IPA/Hindi_and_Urdu
・Retroflex (そり舌音)
https://en.wikipedia.org/wiki/Retroflex_consonant
主に中国語で登場するイメージ
/z`/のように「`」を付ける。
「`」は、日本語キーボードだとShift+「@」で入力できる
*問題点
ハ行だけ連続音のような柔和な対応ができない。これに関してはdemi-VCVの概念を持ち出して指向性でクロスフェードできると解決できると思っている
*私的な収録の見積もり
・いけそう
日本、英
・しったかレベル
中国、フィンランド、フランス、エスペラント
・びみょう
ドイツ、ヒンディー
[備考]
・極高音になるにつれてフォルマント差(母音の区別性)が無くなる
⇒極端な話、極高音は母音は「あ」だけでも良く、低音になるにつれ母音差が重要になる
https://www.voicetrainers.jp/blog/3035/
・強弱アクセント言語の場合、アクセントが強すぎるという指摘が入る
⇒強アクセント(強目)と平アクセント(抜き)と音階自体を分離するとよいかもしれない。
⇒キレ音源のように、そもそも音源構成自体に強弱が可能な要素が入っていると、高低アクセント以外で対処することができる。
*余談
ISO 639-1で、
日本語(Japanese)は「jp」だが、
ジャワ語(Javanese)は「jv」で定義されている。
https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes