トップブログ

議事録の「誰が言ったか」は、声を聞き分けなくても残せる

2026年9月1日

混ざった1本の音声から話者を推定するのではなく、混ざる前に人ごとに分けて録る
混ざった1本の音声から話者を推定するのではなく、混ざる前に人ごとに分けて録る

商談の文字起こしを読み返すと、いちばん困るのは「これはどっちが言ったのか」が分からないことです。金額の話も、次回までの宿題も、誰の口から出たかで意味が反対になります。

この記事は、その「誰が言ったか」を議事録に残すために取った方法の記録です。一般的なやり方であるAIの話者分離は使いませんでした。 オンライン商談では、そもそも音声が混ざる前に人ごとに分かれて届いているからです。区切り方でつまずいた点と、人数分に膨らんだコストの戻し方、この方法でも残らないものまで書きます。


この記事の内容
  1. 名前が1つ付くだけで、読めるものになる
  2. 声を聞き分ける方法は、最初から選ばなかった
  3. 相手の声は、もともと別々に届いている
  4. 25秒で区切って、通話中に文字起こしする
  5. 人数分の文字起こしは、そのまま人数倍の請求になる
  6. 時刻で並べ直すと、逐語録になる
  7. この方法でも残らないもの

名前が1つ付くだけで、読めるものになる

話者ラベルが無い文字起こしは、こうなります。

では次回までに見積もりを出します 金額は先ほどの条件で大丈夫です
社内で確認して来週返事します

3つの文が並んでいますが、誰の宿題なのかが分かりません。読み返す人は、記憶で補うことになります。記憶が無ければ補えません。

名前が付くと、同じ文字起こしがこう変わります。

自分:では次回までに見積もりを出します
相手:金額は先ほどの条件で大丈夫です
相手:社内で確認して来週返事します

宿題がどちらにあるかが、読むだけで分かります。 要約AIに渡すときも同じで、話者が分かれていない文章からは、誰の発言かを正しく振り分けた議事録は出てきません。元の文章に無い情報は、要約では作れないからです。

声を聞き分ける方法は、最初から選ばなかった

「誰が言ったか」を出す一般的な方法は、話者分離と呼ばれます。1本に混ざった音声を聞いて、声の特徴からAIが「ここは別の人」と推定するやり方です。会議室に置いたICレコーダーのように、混ざったものしか手元に無い場合には、これしかありません。

うちはこの方法を試していないので、精度がどれくらい出るのかは分かりません。 ただ、推定である以上は外れる場合があり、外れたときは議事録の中で発言が入れ替わります。入れ替わった議事録は、無い議事録より危険です。

そして、オンライン商談ではこの推定が要りません。

相手の声は、もともと別々に届いている

ブラウザ同士をつなぐ仕組みでは、相手の音声は相手ごとに1本ずつ届きます。自分のマイクの音声も、当然ながら自分の手元にあります。混ざるのは、録画ファイルを1本にまとめる最後の段階です。

相手ごとに届いた音声を、録画用に混ぜる前で分岐させ、それぞれ別に録音する
相手ごとに届いた音声を、録画用に混ぜる前で分岐させ、それぞれ別に録音する

つまり、混ぜる前に分岐させて、人ごとに録音してしまえばいい。実装しているのはこれだけです。参加者の音声トラックを一覧にして、1人につき1つ録音器を回します。商談の途中で入ってきた人も、その場で対象に追加します。

推定が入らないので、名前が入れ替わりません。 声が似ていても、同時に喋っても、別のファイルに入っているので混ざりません。話者分離が難しくなる条件が、そもそも発生しない構造です。

25秒で区切って、通話中に文字起こしする

人数分を録るところまでは素直でした。つまずいたのは、その先の区切り方です。

まず、商談が終わってから一括で処理する方法は使えません。2時間の録画の音声を展開すると、それだけで約4GBに達してタブが落ちます(この見積もりの内訳は別記事に書きました)。だから、通話しながら裏で文字起こしを進めます。

そのために音声を細かく区切るのですが、録音を続けたまま一定時間ごとにデータを取り出す方法では動きませんでした。 取り出せる2つ目以降の断片には音声ファイルの先頭情報が入っておらず、単体では復号できないからです。代わりに、録音器を毎回いったん停止して録り直しています。停止するたびに、それ単体で開ける音声ファイルが1つできます。

区切りの長さは最初45秒にしていましたが、3010: Invalid or incomplete input というエラーが断続的に出ました。使っている文字起こしモデルが30秒単位で音を扱うためです(この30秒の壁については別記事に書きました)。今は25秒で区切っています。 30秒に収まるので分割が要らず、文字起こしが返ってくるのも早くなりました。

8KBに満たない断片は送っていません。極端に短いものは壊れた音声ファイルになりやすく、送っても結果が返らないためです。

人数分の文字起こしは、そのまま人数倍の請求になる

この方法には、はっきりした弱点があります。2人の商談なら、文字起こしに流す音声の量が2倍になります。 混ぜて1本にすれば1倍で済むところを、人数分そのまま払うことになります。

戻し方は単純で、無音の区間を送らないことです。区切った音声ごとに音量の平均を計算し、しきい値を下回るものは文字起こしに回しません。商談中、片方が喋っている間もう片方は黙っているので、この1つで実質的にほぼ1倍まで戻ります。

しきい値は 0.004 に置いています。短い相槌が1つ入っただけでも区間全体の音量は上がるので、明らかな無音だけを落とす保守的な値です。ここを攻めるとコストは下がりますが、落としてはいけない発言が消えます。消えた発言は、消えたことにも気づけません。

時刻で並べ直すと、逐語録になる

最後に、人ごとにばらばらに溜まった文字起こしを1本に戻します。

各区間は、録音を始めた時刻からの経過時間を持っています。全員ぶんを集めてその時間順に並べ、名前:発言 の形にすると、会話の順に読める逐語録になります。この逐語録を要約に渡すと、誰の発言かが入った議事録が出てきます。

別録りが1つも取れなかった場合は、混ざった録画の音声を文字起こしする経路に切り替わります。話者ラベルは付きませんが、議事録が空になるよりはましだからです。また、録画そのものをしない設定でも、議事録が有効なら入室した時点からこの録音は回っています。映像を残さずに、テキストの議事録だけ残すことができます。

この方法でも残らないもの

構造上どうしても残らないものがあります。先に書いておきます。

それでも、誰の発言かが推定ではなく事実として残るという一点は、この方法でしか手に入りませんでした。オンライン商談という前提が、たまたま有利に働いた形です。


Meetnect はブラウザだけで動くオンライン商談ツールで、この話者ごとの録音と文字起こしも、商談の裏で並行して動いています。この記事に出てくる秒数としきい値は、すべて実際に動いているコードの値です。

商談しながら、議事録ができています

Meetnect はブラウザだけで動くオンライン商談ツールです。相手は登録不要、URLを開くだけ。通話中に文字起こしが進み、終わった時点で「誰が何を言ったか」まで残った議事録ができています。7日間、カード登録なしで試せます。