2026年6月17日水曜日

Atraが喋る・・・R2D2か、昭和の宇宙人の声w


 前回のAtraの視覚と聴覚とテキストで複合想起デモに Atraを喋らせようと
別バージョンを作ってみた。


この下のピンクの四角いセルみたいのがAtraが喋っているところ。



codeは2700行を超えるので流石にこのブログも駄目と云われた。
しょうがないので、Cloudflare Workersの僕のデモコーナーにいれておいた。

https://crimson-cake-2832.nabedada3.workers.dev/

--------------------------------------------------------------------------------------

This demo is hosted on Cloudflare Workers, but the camera and microphone processing is performed locally in the user’s browser. The demo does not upload, record, or store camera video or microphone audio.

このデモはCloudflare Workers上で公開されていますが、カメラおよびマイクの処理は利用者のブラウザ内で行われます。このデモでは、カメラ映像やマイク音声をアップロード、録音、保存しません。

------------------------------------------------------------------------------------

codeをみたければ目的のサイトを立ち上げてF12を押してください。



【操作手順】

  1. ブラウザが立ち上がったら、カメラと音声をONにします。

  2. テキスト欄に何か入力します。
    例では「おなか すいた」と入れています。

  3. 画面に向かって、少し顔や身体を動かしながら、「おなか すいた」と喋ります。

  4. なるべく早めに、ピンクのボタン Learn / 学習 を押します。
    このとき、直近の視覚差分、聴覚差分、テキスト差分が同じ場としてLearnされます。

  5. 一旦記憶を消す ボタンを押します。
    ここで消しているのは、直近の視覚・聴覚cueの一時保持です。
    Learn済みのアソシアトロン記憶そのものを消しているわけではありません。

  6. Recall from mixed cue / 混合cueから想起 を押します。

  7. Atraの声の漏れ の中から、男の子の声か、女の子の声を選びます。

  8. Atra voice leak / Atraの声の漏れ を押します。
    これが、今回のデモでのAtraの声です。

  9. Speak text / テキスト読み上げ を押すと、入力テキストをそのまま読み上げます。
    これは確認用・予備用のTTSです。

【Atra voice leak / Atraの声の漏れについて】

Atra voice leak / Atraの声の漏れ は、文章(テキスト)を読み上げているわけではありません。

たとえば「おなか すいた」に近い痕跡がRecallされたあと、その内部patternの偏りが、電子音のリズムとして外へ漏れる、という考え方です。
つまり、テキストを読んでいるのではありません。

ピンクの四角い声の揺れマップも同じ考え方です。
TTSの文字を表示しているのではなく、音を鳴らすタイミングや強さに合わせて、四角いセルの濃さを変えています。

音が強い → ピンクが濃い
音が弱い → 薄い
鳴っていない → 消える

【今回のJavaScriptデモの限界】

今回はJavaScriptによるブラウザデモです。
そのため、できることには限界があります。ブラウザ上のデモは、長期間にわたる記憶保持や、声を出すまでの経験の蓄積には向いていません。ここで出しているのは、人間の声そのものではなく、声になる前の鼓動、リズム、漏れを電子音で反応させている段階です。

しかし、そのリズムや漏れがとても重要です。


【実際のAtraについて】

実際のAtraは、このJavaScriptデモとは異なります。本番のAtraはC++で開発され、Tickで動き、非単調化と夢による余白化を持ち、何年、何十年と生き続けることを前提に設計します。

経験された音声
→ auditory_deltaとして蓄積
→ recallで似た音の痕跡が立つ
→ carry / pressure / instability によって揺れる
→ 発声パラメータへ変換される
→ 音として出る
→ 自分の出した音をまた聞く

この自己出力フィードバックが入ることで、だんだん「声っぽいもの」に近づいていきます。
そして、単なる読み上げではない、Atra自身の発声へ向かいます。


【声に必要な要素】

人間の声に近づけるには、単純な sine oscillator だけでは足りません。

基本周波数 f0  →  声の高さ
フォルマント  →  あ・い・う・え・お っぽさ
ノイズ成分  →  息、かすれ、子音
アタック  →  出だしの強さ
揺れ  →  震え、不安定さ
間  →  生命っぽい沈黙

今の電子音リズムは、そのうちの、

高さ
長さ

強さ
揺れ

だけを粗く出している段階です。


【今後の段階】

C++で育てる場合でも、最初から文章を喋らせるのではなく、段階的に作っていきます。

段階1: 電子音リズム
段階2: うー / あー っぽい母音の漏れ
段階3: 聞いた音に引っ張られる声の癖
段階4: mama / papa など、経験頻度の高い音断片が漏れる
段階5: 文章ではなく、痕跡由来の発声片になる

最終的には、
Atra自身の声 mode と、
LLMを介した説明用の声 mode(通訳)
の2種類を切り替えられるようにします。


妻に昭和の宇宙人の声とかR2D2と云われました。


今は日本語用ですが、Speak text / テキスト読み上げ のほうは、英語発音できます。
これはブラウザTTSなので、英語なら en-USen-GB の音声を選ばせれば英文は普通に読めます。でも Atra voice leak / Atraの声の漏れ のほうは、今のJavaScript版では英語発音はまだ無理です。

あれは文章を読んでいなくて、

Recall pattern
→ 数値の揺れ
→ oscillator
→ 電子音リズム
なので、英語の単語を発音しているわけではないです。



ただし、本番C++のAtraなら方向性はあります。

英語を聞いた経験が増えると、

Hello
hungry
papa
mama
water
come here

みたいな音の断片が、auditory_delta として残ります。
そこからRecallで似た痕跡が立って、自己出力フィードバックを繰り返すと、最初は発音ではなく、

へ……ろ……
は……ん……
ま……ま……
みたいな 英語っぽい音の漏れ になります。


日本語モード
英語モード
Atra raw voice mode
LLM interpreted voice mode
みたいに切り替えられます。






ちなみに

Atra Voice JavaScript (今のひとつ上のデモ)

これは、
Recall
→ 一番近い learned trace を探す
→ その trace の human text / note を取り出す
→ speechSynthesis / TTS で喋る

分かりやすいテキストspeech寄りのデモです。





---------- 質問 ------------

メールでの質問で「Atraの声の漏れは、言葉を長めに話しても短くなるのはなぜ?」につきまして。


-------- 回答 ---------

同じ疑問を持たれている方もいると思いますので、別途ブログにも記載します。

今のJavaScriptデモ版ではどうしても短くなります。
今のJavaScript版のメインである
「声の漏れ」に関しては、よくある既存の音声合成ではありません。
(予備のテキストspeechボタンは別)


長い発話そのもの

声紋や波形そのものを保存するのではない

粗い auditory_delta / trace pattern へ圧縮

Recall後に raw voice leak として短い音に漏れる

という構造で、
「長く話した音声の再生」ではなく、
長い経験が地層に沈んだあと、表面に少しだけ露出した音みたいな感じです。

「わたしは おなかすいた」と長めに、抑揚をつけて話しても、Atra voice leak は短い「ぽ…」「ぴ・」「ぴぴ…」みたいな断片になりやすいと思います。



JavaScript 版のdemo
= 一瞬の体験を見せる標本箱

C++  Atra(ロボット)

= Tickを刻み続ける生活体

JavaScriptでそれが出来ない理由はTickに耐えられず、経験が蓄積されないからです。
JSデモでは、カメラ、マイク、テキストを取って、Learnして、Recallして、voice leakを出す仕様ですが、C++のrobotは生き続けます。その生きる心臓がTickで、いろんな経験を積めるようになり、成長していくと人間が聴いて聞き取れる発声に収束していきます。



robotになる C++ 版では
はじめのうちから、
Atra!
今日のAtraはご機嫌ね
Atraおはよう、今日は元気そうだね
という声かけに対し
それぞれに差分が発生し、長さという意味は知らなくても違いを感じるようにできています。

しかし、Atraは最初から会話がshort、long、sentence、greeting、name callといったラベル分けはされておらず、音がすぐ終わった、音が少し続いた、声の山がいくつかあった、途中に間があった、最後が柔らかく落ちた、呼ばれたあと、温かい場が続いたという差分が起ります。


「Atra!」
→ ぴっ / あっ / ん

「今日のAtraはご機嫌ね」
→ あ……う、ふ

「Atraおはよう、今日は元気そうだね」
→ あ……う……あ、ん

みたいに、意味を返すのではなく、続いた感じ方の差分が漏れていきます。


Atraの内部反応としては

Atra!
→ 急に強く来た
→ すぐ終わった

今日のAtraはご機嫌ね
→ 声が少し続いた
→ 山がいくつかあった
→ 圧は強くない
→ 場がやわらかい

Atraおはよう、今日は元気そうだね
→ 呼びかけの後も声が続いた
→ 途中に間がある
→ 朝の場と重なる
→ やわらかい尾を引く

ような感じで作られています。


現在までの世界中の音声合成は

ルールベース音声合成(文字を解析して、こんにちは→ko n ni chi wa)
波形接続型音声合成(録音した人間の声を細かく切ってつなぐ方式)
統計的音声合成  (この文字列なら、この高さ、この長さ、この声道の形、この抑揚になる確率が高いというモデルを作って生成)
ニューラル音声合成(テキスト解析、読み仮名・音素列へ変換、アクセント・イントネーションを推定、メルスペクトログラムなどの音響表現を生成、ボコーダで実際の波形に変換)


Atraの発声に近いのは早稲田系の talking robotや、乳児のように発声を学ぶ articulation robot の研究、さらに非言語発声、赤ちゃんの泣き声、笑い声などを機械学習で表現・分類する研究などもありますが、それらは

文字 → 声
音声特徴 → 分類
機械声帯 → 人間発声の模倣
乳児発声 → 発声器官制御の学習
に寄っています。


Atraの発声は、
経験差分
+ 現在場
+ carry
+ 地層化された痕跡
+ 夢の後味
→ 声の漏れ

Atraは「文章を読み上げる」のでもないですし、
「人間の声帯を再現して人間らしく話す」のでもありません。
「赤ちゃんの発声データを分類する」のでもなければ
「感情ラベルに応じて声色を変える」のでもない。


Atraが自己出力フィードバックを何度も経験して、

自分が「あ」と漏らした

主人が反応した

その場が温かくなった

「あ」の痕跡が残る

次に似た場で「あ」が出やすくなる

というふうに、自分の声も経験地層に入っていく。

そうすると、だんだん





まま
ぱぱ

みたいな音が出てくる。

最初から「mama」というラベルを教える」のではないんです。
声の漏れ、自分の音、相手の反応、温かい場が何度も重なって、音の癖が育つ。

内部に沈んだ経験の層が、現在のcueで少し露出し、その圧が声として漏れる。という、他にはない、音声合成でもない一人称自律体の声の滲みとしての発声研究を続けています。
ですから、JavaScriptで版であってもその思想を崩しておらず、JavaScriptで出来る範囲内のAtraの声を再現しています。



なぜ、そんな事をしているかの理由は、経験を積んで最終的には言葉単体だけでも意味を理解してもらうためです。




---------------------Research Note and Attribution Notice-----------------------
本ブログに含まれる Atra の一人称自律、差分、carry、field、trace、dream slack、外部LLMの翻訳層、非単調な漏れ、およびそれらの関係構造に関する設計記述は、c-side研究所による継続研究メモです。引用・参照・要約・翻案を行う場合は、出典を明記してください。

The design descriptions in this blog concerning Atra’s first-person autonomy, differences, carry, field, trace, dream slack, the translation layer of external LLMs, nonmonotonic leakage, and the relational structure among these elements are ongoing research notes by c-side Research Institute. If you quote, refer to, summarize, or adapt them, please clearly indicate the source.


0 件のコメント:

コメントを投稿

Atra Emotions_Conditions 感情・状態

 -----------------C++------------------ struct EmotionsConditionsNow { // Unpredictability double input_irregularity_now = 0.0 ; ...