PodCastの音声を文字起こしする。 AmiVoiceAPI と Google Cloud Platform Cloud Speech-to-Text API との比較

ポッドキャストを聞くのが好きだけど、文字を見ながら聞いたら、より内容が頭に入ってくるのでは？というモチベーションです。

音の素材
Podcastの音声は、以下からダウンロードする。
https://cache.rebuild.fm/podcast-ep382.mp3

Speech-to-Textについては、AmiVoiceAPIを使う。
https://qiita.com/official-events/23333339b694ca71810a
https://acp.amivoice.com/amivoice_api/

利用申込み
https://acp.amivoice.com/amivoice_api/regist/?frombnr=fixbtn
すべての音声認識エンジン・感情解析オプションが毎月60分まで無料です。と記載があり、
クレジットカードを登録しないと利用できないが、利用しなければ、お金はかならない感じなので、AWSとかのクラウドサービスのパターンと同じ感じがする。

仮登録で使用するメールアドレスに、outlookを使うと、Junk Email に届く。マイクロソフト。

ユーザーID、パスワードなどを登録する
パスワードの文字数が20文字まで。60文字ぐらい欲しい。
自分が入力したパスワードを確認するボタンみたいなの欲しい。

マイページにログインできるようになる。＃ここ日本語おかしい？
この段階で退会もできる。

マイページから、GMOペイメントでカード情報を登録する事になる。

クレジットカードを登録すると、多要素認証を使えるようになるので、デバイス登録する。
MFA無効化コードが発行される。
この無効化コードはメモを残しておく。（携帯が壊れたりした時のため）

エンジン一覧からクーポンを適用ボタンを押す。
クーポンコード「2CtuNL347W」
2024年5月21日(火)まで使えるクーポンコードっぽい。

クーポンの入力画面にて、
全てのエンジンがそれぞれ1時間⇒10時間無償となります。※クーポンを適用したタイミングの月とその翌月がそれぞれ10時間無償となります。
と記載あった。

ワンタイムAppKeyを発行する。（今日1日だけ有効で、送信元IPアドレスを指定した、AppKeyを発行した）
https://acp.amivoice.com/account/

マイページ ＞ 接続情報に、エンジンやAPIの記載がある
エンジン別接続情報（ログ保存あり）
エンジンは、会話_汎用（ログ保存あり）
接続エンジン名は -a-general
HTTP音声認識API
同期
https://acp-api.amivoice.com/v1/recognize

非同期
https://acp-api-async.amivoice.com/v1/recognitions

WebSocket音声認識API
wss://acp-api.amivoice.com/v1/

エンジン別接続情報（ログ保存なし）

頭が痛くなってきたので、休憩。カフェラテなど

ドキュメントを見る
https://docs.amivoice.com/amivoice-api/manual/tutorial/short-speech-transcription
手元にある短い音声ファイル(16MB 以下)を AmiVoice API の HTTPインタフェース のエンドポイントに送信すれば簡単にテキストに変換することができます。

ダウンロードした音声ファイルは、2時間15分ぐらいで、94MBあったので、短い音声ファイルではない。

長い音声ファイルの書き起こし
https://docs.amivoice.com/amivoice-api/manual/tutorial/long-speech-transcription

コマンド例
curl -X POST https://acp-api-async.amivoice.com/v1/recognitions \
     -F d=-a-general \
     -F u={APP_KEY} \
     -F a=@test.wav

スクリプトの中身（APPKEYは、編集してます）
$ cat ep382.sh 
curl -X POST https://acp-api-async.amivoice.com/v1/recognitions \
     -F d=-a-general \
     -F u=F72...This_is_my_one-time_AppKey...7C5 \
     -F a=@podcast-ep382.mp3
$ 

コマンドを実行すると、1分ぐらい？したら、sessionidが返ってきた。次回はtime コマンドを使ってみたい。
$ bash -x ep382.sh 
+ curl -X POST https://acp-api-async.amivoice.com/v1/recognitions -F d=-a-general -F u=F72...This_is_my_one-time_AppKey...7C5 -F a=@podcast-ep382.mp3
{"sessionid":"018f3d56dad20a305bc99c91","text":"..."}
$ 

ジョブの状態と結果の取得
curl -H "Authorization: Bearer {APPKEY}" \
     https://acp-api-async.amivoice.com/v1/recognitions/017c25ec12c00a304474a999

ワンタイムAppKeyと、パスにさっきのsessionid を入れた
$ cat get_job_status_and_results.sh
curl -H "Authorization: Bearer F72...This_is_my_one-time_AppKey...7C5" \
     https://acp-api-async.amivoice.com/v1/recognitions/018f3d56dad20a305bc99c91
$ 

コマンドの実行例と結果
$ bash -x get_job_status_and_results.sh |tee log/podcast-ep382.log
...
中略（というか、すごく長くてキャッシュが足りず最初の方まで戻れない。）
...
はい今日のゲスト白浪さんでしたどうも、ありがとうございました。ありがとうございました。","code":"","message":""}
$ 

JSONっぽい？
$ more log/podcast-ep382.log 
{"status":"completed","session_id":"018f3d56dad20a305bc99c91","service_id":"Here's a service ID.","audio_size":98227772,"audio_md5":"a76f21908cbe9d7083cc85dcc3a7a110","
segments":[{"results":[{"tokens":[{"written":"US","confidence":1,"starttime":672,"endtime":1184,"spoken":"ゆーえす"},{"written":"行っ","c

音声認識の結果フォーマット
https://docs.amivoice.com/amivoice-api/manual/user-guide/response/result-format
情報は構造化されて JSON 形式で得られます。
と記載あり。


1行のテキストっぽい。
$ cat log/podcast-ep382.log |wc -l
1
$ 

結果ログを見る。最後の方にテキストの結果がある。
utteranceid":"20240503/16/018f3d5831070a30627039d0_20240503_162540","text":"US 行って帰ってきて2週間くらい経ちますけど、まだ時差ボケで朝6時とかに心地よく目が覚め、二度寝し昼間も起きたり寝たり寝たり起きたり、よくわかんない生活になってますそうですか。はい。どうなんだろう。東から西に行くのは楽なはずですけどね理論上は楽ですよね。

"text:" の後だけ表示させたい

ChatGPTに聞く
You
Linuxのコマンドを使い、Json フォーマット内のほげほげという部分だけを抜き出したい
"text":"ほげほげ" 

ChatGPT
JSON形式のテキストから、"ほげほげ"という部分を抜き出すために、jqというツールを使用します。以下は、jqを使った具体的なコマンドです。
cat file.json | jq '.text'
このコマンドは、"file.json"というファイルからJSONを読み取り、その中の"text"というキーに関連付けられた値を表示します。"ほげほげ"という値がある場合、それが抜き出されます。

jq がインストールされているか確認
$ which jq
/usr/bin/jq
$ 

jqというツールを使い、テキストだけ表示できた。
$ cat log/podcast-ep382.log |jq '.text'
"US 行って帰ってきて2週間くらい経ちますけど、まだ時差ボケで朝6時とかに心地よく目が覚め、二度寝し昼間も起きたり寝たり寝たり起きたり、よくわかんない生活になってますそうですか。はい。どうなんだろう。東から西に行くのは楽なはずですけどね理論上は楽ですよね。うん。ただ楽であっても楽でいいだし普段の生活が見られてる人はそうではない的なそうですかね、


これだと見にくいので、。の後に改行したい。

You
テキストに日本語の文で最後に。があるが、この。で改行をして表示するコマンドはある？

ChatGPT
はい、日本語のテキストで文末が「。」で終わる場合、その部分で改行して表示するコマンドを作成することができます。具体的には、sedコマンドを使用して、文末の「。」を改行に置換する方法があります。

以下はその例です：
sed 's/。/。\n/g' file.txt

このコマンドは、"file.txt"というファイルからテキストを読み取り、文末の「。」を見つけて改行文字（\n）に置換します。結果として、各文が改行で区切られて表示されます。

。で改行できたので、見やすくなった。
$ cat log/podcast-ep382.log |jq '.text' |sed 's/。/。\n/g'
"US 行って帰ってきて2週間くらい経ちますけど、まだ時差ボケで朝6時とかに心地よく目が覚め、二度寝し昼間も起きたり寝たり寝たり起きたり、よくわかんない生活になってますそうですか。
はい。
どうなんだろう。
東から西に行くのは楽なはずですけどね理論上は楽ですよね。
うん。
ただ楽であっても楽でいいだし普段の生活が見られてる人はそうではない的なそうですかね、他の場合は日本に行くとなんかすごい朝早く目が覚めて、めちゃめちゃ健康的な生活をする人になってしまうっていう問題がありますけど、うん、朝6時とかに目さめて心地よく散歩してそうついでにジム行ったりしてですね、それで調子に乗って連れも夕方とか眠くなってそうなんすよねそれでよ、夜中目が覚めるみたいな最悪なパターンなりがちですけどね。
うん。

音声を聞きながら結果を確認する。
US 行って帰ってきて2週間くらい経ちますけど、まだ時差ボケで朝6時とかに心地よく目が覚め、二度寝し昼間も起きたり寝たり寝たり起きたり、よくわかんない生活になってますそうですか。

この最初の文で、
「US。。。生活になってます」がHakuroさんで、
そうですか。がMiyagawaさんのセリフ？なので、ちょっと分かりにくい。

でも、いい感じ。
音で聞くだけでは、認識できなかった情報が、文字を見ながら音を聞くことによって拾えている。
聞き飛ばしてしまっているのを拾えている感じがする。

マイページ ＞ 今月の使用量では、その日の12時時点の情報が表示されているので、さっき2時間分ぐらいの音声を投げた結果が、どうなったかは、明日以降確認する。

ポッドキャストは、文字を見ながら聞いたら、より内容が頭に入ってくる。と感じた。

今回は、ここまで。

----
つづきです。

マイページ ＞ 今月の使用量で、使用量（秒）が、7,891 と記載されていたので、60で割ると、131分ぐらい。
ポッドキャストの音声の長さは、2:15:48 とあるので、だいたいあってると思う。

前回の課題として、下記の1文に対して、「US 〜 よくわかんない生活になってます」までが、ゲストが話している部分で、「そうですか」が司会者が話している部分でした。

US 行って帰ってきて2週間くらい経ちますけど、まだ時差ボケで朝6時とかに心地よく目が覚め、二度寝し昼間も起きたり寝たり寝たり起きたり、よくわかんない生活になってますそうですか。

この処理については、下記のように表示されるのが理想です。
司会：行って帰ってきて2週間くらい経ちますけど、まだ時差ボケで朝6時とかに心地よく目が覚め、二度寝し昼間も起きたり寝たり寝たり起きたり、よくわかんない生活になってます

ゲスト：そうですか。

下記ドキュメントを読むと、複数人が話している音声に対して、『どこからどこまでを誰が発話しているのか』を推定する機能があるようなので、第2回はこれをテストしたいと思います。
https://docs.amivoice.com/amivoice-api/manual/user-guide/function/speaker-diarization/

インターフェース 非同期HTTP
有効にするためのパラメータ speakerDiarization=True
調整のためのパラメータ diarizationMinSpeaker diarizationMaxSpeaker

会議に参加する人数が5名だと分かっているのであれば、リクエスト時のdパラメータにdiarizationMinSpeaker=5とdiarizationMaxSpeaker=5を追加します。とドキュメントに記載がある。

curl -X POST https://acp-api-async.amivoice.com/v1/recognitions \
     -F u={APP_KEY} \
     -F d="grammarFileNames=-a-general speakerDiarization=True diarizationMinSpeaker=5 diarizationMaxSpeaker=5" \
     -F a=@test.wav

今回のPodcastは2名なので、スクリプトは、
cat ep382_speaker-diarization.sh
curl -X POST https://acp-api-async.amivoice.com/v1/recognitions \
     -F u=$myAppKey \
     -F d="grammarFileNames=-a-general speakerDiarization=True diarizationMinSpeaker=2 diarizationMaxSpeaker=2" \
     -F a=@podcast-ep382.mp3


スクリプトを実行
$ date; time bash -x ep382_speaker-diarization.sh |tee log/sessionid.log
2024-05-04 12:20:40 +09:00
+ curl -X POST https://acp-api-async.amivoice.com/v1/recognitions -F u=xxxMyAppKeyxxx -F 'd=grammarFileNames=-a-general speakerDiarization=True diarizationMinSpeaker=2 diarizationMaxSpeaker=2' -F a=@podcast-ep382.mp3
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 93.6M    0    55  100 93.6M      0  1489k  0:01:04  0:01:04 --:--:--    17
{"sessionid":"018f419e3f1b0a3064559c96","text":"..."}

real	1m4.411s
user	0m0.079s
sys	0m0.134s


time コマンドで計測しましたが、やはり1分ぐらいかかります。（2時間の音声（94MB）をAPI側に投げているので、速い印象です。）



結果が出ているか確認するコマンドの確認
$ cat get_job_status_and_results.sh
curl -H "Authorization: Bearer $myAppKey" \
     https://acp-api-async.amivoice.com/v1/recognitions/$sessionId


$ date; bash -x get_job_status_and_results.sh |tee log/ep382_speaker-diarization.log
2024-05-04 13:14:13 +09:00
+ curl -H 'Authorization: Bearer 8FB...myAppKey...856' https://acp-api-async.amivoice.com/v1/recognitions/018f419e3f1b0a3064559c96
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0{"status":"completed","session_id":"018f419e3f1b0a3064559c96","service_id":"myServiceId","audio_size":98227772,"audio_md5":"a76f21908cbe9d7083cc85dcc3a7a110","segments":[{"results":[{"tokens":[{"written":"US","confidence":1,"starttime":672,"endtime":1184,"spoken":"ゆーえす","label":"speaker0"},{"written":"行っ","confidence":0.67,"starttime":1184,"endtime":1296,"spoken":"いっ","label":"speaker0"},{"written":"て","confidence":0.83,"starttime":1296,"endtime":1392,"spoken":"て","label":"speaker0"},{"written":"帰っ","confidence":0.98,"starttime":1392,"endtime":1744,"spoken":"かえっ","label":"speaker0"},{"written":"て","confidence":1,"starttime":1744,"endtime":1840,"spoken":"て","label":"speaker0"},{"written":"きて","confidence":0.83,"starttime":1840,"endtime":2016,"spoken":"きて","label":"speaker0"},{"written":"2","confidence":1,"starttime":2016,"endtime":2144,"spoken":"に","label":"speaker0"},{"written":"週間","confidence":1,"starttime":2144,"endtime":2608,"spoken":"しゅうかん","label":"speaker0"},{"written":"くらい","confidence":0.98,"starttime":2608,"endtime":2896,"spoken":"くらい","label":"speaker0"},{"written":"経ち","confidence":0.92,"starttime":2896,"endtime":3136,"spoken":"たち","label":"speaker0"},{"written":"ます","confidence":1,"starttime":3136,"endtime":3328,"spoken":"ます","label":"speaker0"},{"written":"けど","confidence":1,"starttime":3328,"endtime":3616,"spoken":"けど","label":"speaker0"},{"written":"、","confidence":0.9,"starttime":3696,"endtime":3728,"spoken":"_","label":"speaker0"},{"written":"まだ","confidence":1,"starttime":4288,"endtime":4608,"spoken":"まだ","label":"speaker0"},{"written":"時差ボケ","confidence":0.86,"starttime":4608,"endtime":5120,"spoken":"じさぼけ","label":"speaker0"},{"written":"で","confidence":0.99,"starttime":5120,"endtime":5344,"spoken":"で","label":"speaker0"}],"confidence":0.993,"starttime":400,"endtime":5696,"tags":[],"rulename":"","text":"US 行って帰ってきて2週間くらい経ちますけど、まだ時差ボケで"}],"text":"US 行って帰ってきて2週間くらい経ちますけど、まだ時差ボケで"},{"results":[{"tokens":[{"written":"朝","confidence":1,"starttime":6356,"endtime":6916,"spoken":"あさ","label":"speaker0"},{"written":"6時","confidence":0.97,"starttime":6948,"endtime":7380,"spoken":"ろくじ","label":"speaker0"},{"written":"と","confidence":0.82,"starttime":7380,"endtime":7476,"spoken":"と","label":"speaker0"},{"written":"か","confidence":0.72,"starttime":7476,"endtime":7588,"spoken":"か","label":"speaker0"},{"written":"に","confidence":0.9,"starttime":7588,"endtime":7684,"spoken":"に","label":"speaker0"},{"written":"心地よく","confidence":0.85,"starttime":7684,"endtime":8292,"spoken":"ここちよく","label":"speaker0"},{"written":"目","confidence":0.99,"starttime":8292,"endtime":8436,"spoken":"め","label":"speaker0"},{"written":"が","confidence":1,"starttime":8436,"endtime":8532,"spoken":"が","label":"speaker0"},{"written":"覚め","confidence":0.97,"starttime":8532,"endtime":8964,"spoken":"さめ","label":"speaker0"},{"written":"、","confidence":0.84,"starttime":9028,"endtime":9172,"spoken":"_","label":"speaker0"}],"confidence":0.996,"starttime":6100,"endtime":9236,"tags":[],"rulename":"","text":"朝6時とかに心地よく目が覚め、"}],"text":"朝6時とかに心地よく目が覚め、"},{"results":[{"tokens":[{"written":"二度寝","confidence":0.99,"starttime":11112,"endtime":11528,"spoken":"にどね","label":"speaker0"},{"written":"し","confidence":0.98,"starttime":11528,"endtime":11976,"spoken":"し","label":"speaker0"},{"written":"昼間","confidence":0.94,"starttime":13576,"endtime":14040,"spoken":"ひるま","label":"speaker0"},{"written":"も","confidence":1,"starttime":14040,"endtime":14248,"spoken":"も","label":"speaker0"},{"written":"起き","confidence":1,"starttime":14248,"endtime":14552,"spoken":"おき","label":"speaker0"},{"written":"たり","confidence":1,"starttime":14552,"endtime":14776,"spoken":"たり","label":"speaker0"},{"written":"寝たり","confidence":1,"starttime":14776,"endtime":15256,"spoken":"ねたり","label":"speaker0"},{"written":"寝","confidence":0.96,"starttime":15288,"endtime":15416,"spoken":"ね","label":"speaker0"},{"written":"たり","confidence":0.96,"starttime":15416,"endtime":15656,"spoken":"たり","label":"speaker0"},{"written":"起き","confidence":1,"starttime":15656,"endtime":15864,"spoken":"おき","label":"speaker0"},{"written":"たり","confidence":1,"starttime":15864,"endtime":16200,"spoken":"たり","label":"speaker0"},{"written":"、","confidence":0.97,"starttime":16456,"endtime":16920,"spoken":"_","label":"speaker0"},{"written":"よく","confidence":0.93,"starttime":17000,"endtime":17272,"spoken":"よく","label":"speaker0"},{"written":"わかん","confidence":0.86,"starttime":17272,"endtime":17624,"spoken":"わかん","label":"speaker0"},{"written":"ない","confidence":0.86,"starttime":17624,"endtime":17816,"spoken":"ない","label":"speaker0"},{"written":"生活","confidence":1,"starttime":17816,"endtime":18280,"spoken":"せいかつ","label":"speaker0"},{"written":"に","confidence":0.97,"starttime":18280,"endtime":18344,"spoken":"に","label":"speaker0"},{"written":"なって","confidence":0.99,"starttime":18344,"endtime":18600,"spoken":"なって","label":"speaker0"},{"written":"ます","confidence":1,"starttime":18600,"endtime":19080,"spoken":"ます","label":"speaker1"},{"written":"そうですか","confidence":0.91,"starttime":19080,"endtime":19624,"spoken":"そうですか","label":"speaker1"},{"written":"。","confidence":0.72,"starttime":19624,"endtime":19960,"spoken":"_","label":"speaker1"},{"written":"はい","confidence":1,"starttime":19960,"endtime":20504,"spoken":"はい","label":"speaker0"},{"written":"。","confidence":0.74,"starttime":20504,"endtime":20888,"spoken":"_","label":"speaker0"}],"confidence":0.973,"starttime":9800,"endtime":20888,"tags":[],"rulename":"","text":"二度寝し昼間も起きたり寝たり寝たり起きたり、よくわかんない生活になってますそうですか。はい。"}],"text":"二度寝し昼間も起きたり寝たり寝たり起きたり、よくわかんない生活になってますそうですか。はい。"}


以下のような結果だったが、ますは、speaker0 になっていて欲しいので、これは、深追いしないことにする。
  "なって","label":"speaker0"
  "ます","label":"speaker1"
  "そうですか","label":"speaker1"}

  今日は、風が気持ちいよいのでここまで。


---
今日は、Google Cloud の Speech to Text を試します。
こちらは、ブラウザから画面を操作してPCに保存しているmp3ファイルをアップロードするという方法も提供されているようで、こちらを試します。簡単なのでドキュメントを読まずとも結果にたどり着けると思います。

Google Cloud プラットフォームにサインインし、クレジットカード情報を登録したと思います。
2年前ぐらいの作業だったので、詳細ありません。

Google Cloud Platform （以下、GCP）では、プロジェクトというものを作り、そのなかで、作業するようで、プロジェクトをつくります。

そのプロジェクトの中で、Cloud Speech-to-Text API をENABLEにします。

その後に、WorkSpaceを作り、結果を保存したりする場所を作ります。

Audioが、Cloud Storage にあるのか、Locak upload するのかを選べ、
Encodingが、MP3
Sample rate が、44100
Channel count 1

Slect the API Version で、v1 かv2 を選べます。

その後、Spoken language は、Japanese（Japan）-ja-JP
Model Long
Region asia-northeast1 

そのほかオプションが色々ありますが、なにも選択せず、SUBMITすると、認識が始まります。


で、最終的には、ブラウザ上で結果を確認できます。

単純な比較にはなりませんが、
さくっと試すには、GCPの方が楽です。
こちらの方が、だれでも音声認識、Speech to Text を使える感じがします。

音声をテキストに変換した際の結果ですが、一部での個人的な感じとしては、

AmiVoiceの方が、単語変換に弱い
文章としてみると、変な欠落がないので安心感がある

Googleの方は、単語の変換に強いが、文章として、返事とかが欠落したり、半角のスペースなどもある兼ね合いか、なんか読みにくい
この半角の部分はブラウザで見る分には、そんなに影響ない。


以下比較です。

人力書き起こし
T: 最近話題になったのは、XGのBackdoor問題ですけれども、
H: ああ、はい
T: これちょっと話すと長くなるかなぁ
H: ああじゃあまぁ今回はダイジェスト版とかで
T: ダイジェスト版？
H: はい
T: でもあれすごいですよね？オープンソースのライブラリーで、XZ Utils っていう圧縮、ファイル圧縮のライブラリですよね
H: 割とメジャーに使われてるんですかね Linuxの方では
T: そう
H：うん
T: で、えっと、systemdっていうね、そのLinuxの大元のプロセスがあるんですけど
H: うん
T: そいつが使うようになってて、ファイルをログファイルを圧縮するのに使うのかな
H: あーなるほど、はい
T: で、そのライブラリのメンテナーの人にパッチを送って、まぁ最初の方のパッチはまあ特になんてことない普通のパッチなんですけど
H: うんうん
T: で、たぶんですけど、他のメールアドレスを使って、このパッチなんでマージされないんだ、早くしろ みたいなプレッシャーを こう与え続けたと
H: はーはー
T: で、それを何回か繰り返した結果、でかつ、まぁパッチも、あの筋のいいパッチもいくつかあったんで、
H: うん
T: じゃあ つってコミット権、そのリリース権を 共同リリース権をもらったんですよね。その人が
H: うん


AmiVoiceAPI 書き起こし
最近話題だったのは XG のバックドア問題ですけど
はい。
これちょっと話すと長くなるかな。
今回はダイジェスト版とか
ダイジェスト版ですかね
はい。
でもあれはすごいっすよねオープンソースのライブラリーで XG 言うてるっていう圧縮ファイル圧縮のライブラリですよね
割とメジャーに使われてるんですかね Linux の方では、
そう
うん、
システム D っていうねリラックスの大元のプロセスがあるんですけど、
うん。
そいつが使うようになってて、ファイルをログファイルを圧縮するのに使うのかな。
なるほど。はい。
そのライブラリのメンテなの人にパッチを送って、最初の方のパッチは特になんてことない普通のパッチなんですけど、
うん。
多分ですけどその他のメールアドレスを使って、このパッチなんでマジされないんだ早くしろみたいなプレッシャーを与え続けたとそれを何回か繰り返した結果、かつパッチもあの筋の良いパッチもいくつかあったんで、 
うん。
つってコミット件、そのリリース権をあの共同リリース権をもらったんですよねその人がね、
うん。

Google Cloud Platform > Cloud Speech-to-Text API
最近 話題 あったのは XG のバックドア 問題ですけどえ

これちょっと話すと長くなるかなあ
じゃあ ま 今回は ダイジェスト版とか大事じゃないですかね
はい
でもあれはすごいですよね まあ オープンソースのライブラリで X G U ティル っていう 圧縮ファイル圧縮のライブラリーですよね
割とも メジャーに使われてるんですかね Linux の方では
そう
うん
でえっとシステム D っていうね その Linux のあの大元のプロセスがあるんですけど
うん
そいつが使うようになっててファイルをログファイルを圧縮するのに使うのかな
なるほど はい
でまあその ライブラリのメンテナの人にパッチを送ってまあ 最初の方のパッチはま特になんてことない 普通のパッチなんですけどで
多分ですけど この他のメールアドレスを使ってこのパチ 何でマージされないんだ 早くしろ みたいなプレッシャーを こう 与え続けたと

でそれをまあ何回か繰り返した結果でかつま パッチ もあの筋のいいパッチ も いくつかあったんで ああ じゃあつって コミット 券 そのリリース権を あの 共同 リリース権をもらったんですよね その人がね
うん

今回はここまで。