雑感等

音楽,数学,語学,その他に関するメモを記す.

ピンインのi

ピンインのiについて、『中国語音声学』ではIPAの記載がなかった。

佐藤昭. 中国語音声学 : 日本語英語との発音比較を重視して. 初版. 朝日出版社, 2024, p. 081.

wikipediaや他の文献を見ると、成節子音で、舌尖音の接近音や摩擦音を指しているようだ。

Sinological phonetic notation - Wikipedia

Sinological phonetic notation

Phonology of Standard Chinese

San Duanmu. The Phonology of Standard Chinese. 2nd ed., Oxford University Press, 2007, p. 43.

OKLChで彩度MAXの色相を描画する

OKLCh色空間で、明度と彩度が一定の色相グラデーションを描画した。

OKLChによる色相

OKLab/OKLChについては下記リンク参照。

https://oklch.com/

https://bottosson.github.io/posts/oklab/

描画にあたる問題

(CIE L*C*h*もそうだが)OKLCh色空間で数値上表現可能でも、ディスプレイで表示可能な色(sRGBなどの色域内)とは限らない。

https://oklch.com/#29.87,0.1278,204.99,100

例えば上記リンクのような色(oklch(29.87% 0.1278 204.99))はRGB成分のいずれかが飽和してしまい、ディスプレイ上で正確に表示されない色になる。

そのため、色相h(0°~360°)全体がディスプレイで表示可能な色域に収まるように、明度Lと彩度Cを決定する必要がある。

条件設定と解

ここでは下記の条件でLとCを決定した。

  • ディスプレイの色域をsRGB(linear sRGBのRGB各要素が0以上1以下)かつ24bit RGBとする。
  • 彩度Cを最大化する。
  • 明度Lは、上記の条件を満たすように適当に設定する。

これらの条件からLとCを数値的に探索し、下記のように決定した。

  • L=75.01536180 [%]
  • C=0.12752921947053

上記の値は厳密にはCを最大化できていないが、24bit RGBに量子化することを考慮すると数値精度としては十分と判断した。

この値を使って本稿冒頭の画像を生成した。

また、画像下部の灰色は、同明度の無彩色を表す。 (上記で決定したL=75.015… かつ C=0とした色)

よって、画像全体は同じ明度Lとなっている。

グレースケール化

パワーポイントの画像調整機能で冒頭の画像をグレースケール化すると、下図のようになる。

グレースケール化した画像

画像全体で明度Lは同じはずだが、グレースケール化した画像では明るさが場所により微妙に異なっている。

  • 色相部分と下部灰色の明るさが異なる。
  • 色相の中央右寄りで暗くなっている。

これはパワーポイントのグレースケール化機能がOKLCh以外の色空間に基いているためと思われる。

「拡散」フィルター

元画像にgimpの「拡散」フィルターを適用し、色相グラデーション部分と同明度灰色部分のピクセルをランダムに拡散した。

色相中で暗く見えた部分を拡大している。

画像上部は拡散フィルター適用後、グレースケール化したもの、画像下部は拡散フィルターのみ適用したもの。

下:拡散フィルター適用、上:拡散フィルター適用後にグレースケール化

画像上部は、拡散前と同様に一部暗い箇所がある。

それと対応した箇所を画像下部で見ると、同明度灰色のピクセルが若干明るく浮いて見え、相対的に周りの有彩色が暗いように感じられた。

色彩評価用環境で確認しているわけではないため、環境依存で上記の感じ方が変わる可能性はある。

音程・変化記号を五度圏で表す

具体的な音高で考えるとややこしい。

半音5つ分を表すのに、「完全4度」「増3度」とかややこしい。

音程と半音数

楽譜でも、ミ♭の異名同音が、「レ♯」「ファ♭♭」とかややこしい。

ミ♭の異名同音

五度圏を閉じずに「ほどく」。

commons.wikimedia.org

ほどいた五度圏

ほどいた五度圏だと異名同音を区別できる。

変化記号も異名同音を区別できる。 画像はhttps://murashin.sakura.ne.jp/muraobjct05.htmから引用。

とりあえずwasmを動かした

WebAssemblyとは?〜実際にC言語をブラウザで動かす〜【2019年6月版】 #JavaScript - Qiita

https://umamichi.github.io/wasm/

このページにあるwasmをとりあえず動かしてみた。

失敗:サーバーを立てるのをサボろうとした

https://umamichi.github.io/wasm/で読み込んでいるsample.wasmと、上記qiitaに書いてあるhtmlを、

適当なローカルフォルダに保存。wasmとhtmlは同一フォルダに配置。

htmlファイルをchromeで開き、開発者ツールを見ると、下記のようなエラーが発生していた。

Access to fetch at 'file:///C:/Users/~~~~~~sample.wasm' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, isolated-app, chrome-extension, chrome, https, chrome-untrusted.

wasmの動かし方を紹介しているページでやたらとサーバーを立てているのは、CORSエラーが出るからだったようだ。

成功:pythonでサーバーを立てた

ローカルでhttpサーバを動かす方法メモ #HTTP - Qiita に紹介されている通り、

コマンドプロンプトでwasmとhtmlを保存したフォルダに移動し、"python -m http.server"を実行。

ブラウザで"http://localhost:8000/"にアクセスすると、https://umamichi.github.io/wasm/ と同様の画面が出た。

開発者ツールを開いてもCORSエラーは無かった。

ページ内のボタンをクリックするとコンソールの数字がカウントアップされ、正常に動作した。

音律の表現

不等分音律や微分音律における周波数比は、だいたい次式で表されそう。

 \prod_{k} {p_k}^{\frac{n_k}{m_k}}

ここで p_kはk番目の素数、 n_kは整数列、 m_kは1以上の自然数列。

もちろん、「純正長三度は約386 centだから、周波数比は 2^{\frac{386}{1200}}で表され、確かに上式で表せる」などという話ではない。

(純正長三度は  \frac{5}{4} = 2^{\frac{-2}{1}} \cdot  3^{\frac{0}{1}} \cdot  5^{\frac{1}{1}}と誤差なく書くべき。)

純正音程を表現できることに加え、純正音程を等分する操作(n乗根)も含めて、誤差なく表現できることが重要。

ミーントーン五度: \sqrt[4]{5}=2^{\frac{0}{1}} \cdot  3^{\frac{0}{1}} \cdot  5^{\frac{1}{4}}。

ヴァロッティ・ヤング音律の狭い五度: 2^{\frac{13}{6}} \cdot 3^{\frac{-1}{1}}。

1/8スキスマ・テンペラメント*1の五度: \frac{10^{\frac{7}{8}}}{5} =  2^{\frac{7}{8}} \cdot 3^{\frac{0}{1}} \cdot 5^{\frac{-1}{8}}。

31平均律の1ステップ: 2^{\frac{1}{31}}。

このページ(MT¡¦²»³Ú¡¦²»Î§½¸ なんか文字化けしてる)を見て音律の界隈なら絶対既知だろうけど書いておきたくなった。

音律を表現するsclファイルでは、cent表記と分数しか使えなくて、音律の表現としては必ず誤差が生じる。

一方、音律を正確に表現するため一般的な数式を扱うとなると、構文解析などの処理が面倒で、音律の表現としては重過ぎる。

上式なら、構文解析よりはシンプルに処理にできるだろうし、誤差なく音律を表現できる。

cent表記にする際の誤差が嫌いだからこういう表現も使えるようになってほしい。

扇型に内接する楕円

扇型に内接する楕円を求めた

――かったが、実質的には二等辺三角形に内接する楕円の式が求まった。

扇型は、半径を1、中心角を \theta とする。

楕円は、一方(扇型の径方向)の半径を a 、もう一方の半径を b とする。

各図形は図の座標に配置し、 \theta と a を既知の値とすると、 b は次式で与えられる。

 \displaystyle
b = \frac{ \frac{a^2}{a-1} -a+1}{\tan {\left( \frac{ \pi - \theta}{2} \right) } \sqrt{\frac{1-2a}{(a-1)^2}} }

この b を使い、上図の楕円の式は次式で与えられる。

 \displaystyle
\frac{x^2}{b^2} + \frac{(y+1-a)^2}{a^2} = 1

このページで式を動かせる:二等辺三角形に内接する楕円 – GeoGebra

丸かっこで囲まれた部分以外にマッチする正規表現

丸かっこで囲まれた部分以外にマッチする正規表現

[^\(\)]+(?=\([^\(\)]+\))|[^\(\)]+$|^[^\(\)]+

テキストエディタMeryで動作確認済み。

説明

この正規表現は、orを意味するパイプ記号"|"と、3つの部分(下記ABC)で構成されている。

A | B | C

 ↓

[^\(\)]+(?=\([^\(\)]+\)) | [^\(\)]+$ | ^[^\(\)]+

つまり、「AまたはBまたはC」のパターンを表す。

まず、比較的単純なBから見る:[^\(\)]+$

これは、さらに3つの要素に分けられる。

D E F

 ↓

[^\(\)] + $

最初の角括弧[]は、「指定した文字を含まない」という意味の表現:[^~~~~]だ。

"[^"と"]"に挟まれた各文字以外の文字にマッチする。ここでいう各文字は \( と \)だ。エスケープされているが要は丸括弧"("または")"を意味する。

つまり、[^\(\)]は「丸括弧でない何らかの1文字」を意味する。

次、+は「前の文字が1文字以上連続する」を意味する。

次、$は、「行末」を意味する。

ここまで合わせて考えると[^\(\)]+$は「丸括弧以外の文字が1文字以上連続し、その直後に行末が来る」パターンを表す。

簡単に言うと、「丸括弧から行末までの文字 ※丸括弧は含まず」にマッチする。

例えば入力が「abc0123(hijk」なら、「hijk」にマッチする。

次にC:^[^\(\)]+を見る。

最初の^は、「行頭」を表す。※"[^"の"^"とは意味が異なる。

次は上で見た、[^\(\)]+と全く同じだ。

つまり、^[^\(\)]+は「行頭の直後に、丸括弧以外の文字が1文字以上連続する」パターンを表す。

簡単に言うと、「行頭から丸括弧までの文字 ※丸括弧は含まず」にマッチする。

例えば入力が「abc0123(hijk」なら、「abc0123」にマッチする。

最後にA:[^\(\)]+(?=\([^\(\)]+\))を見る。

まず、大枠は

G (?= H )

↓

[^\(\)]+ (?= \([^\(\)]+\) )

G (?= H ) のパターンは、肯定先読みと呼ばれる。

意味は、「G。ただし、Hが直後にあるもの」のパターンを表す。

「マッチしてほしいのはGだけど、Gならなんでもいいわけじゃなくて、Hの直前にあるGだけにマッチしてほしい」という事。

さて、GとHを見ていく。

Gは上で見た[^\(\)]+と全く同じだ。 つまり、「丸括弧以外の文字が1文字以上連続する」パターンを表す。

次、H: \([^\(\)]+\)は、さらに3つの要素に分解できて、 \( [^\(\)]+ \)となる。

\(は開き括弧、 [^\(\)]+は「丸括弧以外の文字が1文字以上連続する」パターン、 \)は閉じ括弧。

Hはつまり、「丸括弧で囲まれた文字列(ただし囲んでいる丸括弧も含む)」パターンを表す。

つまり[^\(\)]+ (?= \([^\(\)]+\) )は、 「丸括弧で囲まれた文字列の直前にある、丸括弧以外の文字列」のパターンを表す。

例えば入力が「)abcd(efgh)0123(4567)ijkl」なら、「abcd」と「0123」にマッチする。

参照

https://ja.stackoverflow.com/questions/9024/%E3%81%8B%E3%81%A3%E3%81%93%E3%81%A7%E5%9B%B2%E3%81%BE%E3%82%8C%E3%81%9F%E6%96%87%E5%AD%97%E4%BB%A5%E5%A4%96%E3%82%92%E3%83%9E%E3%83%83%E3%83%81%E3%81%95%E3%81%9B%E3%81%9F%E3%81%84

https://qiita.com/shotets/items/98f3828b6e5f08d42498