The hardest part of my AI meeting app was the audio, not the AI

від

у

Найскладніша частина мого застосунку для AI-зустрічей була аудіо, а не AI

Я створюю AI-пілота для живих дзвінків. Я думав, що складна частина — це сам AI. Так не було — складніше постачати чисте аудіо з пристрою. Ось що я хотів знати раніше.

Обмеження: у дзвінку немає бота
Більшість AI для зустрічей приєднуються до вашого дзвінка як учасник («Notetaker X приєднався»). Я цього не хотів. Мета: зловити обидві частини розмови без участі в зустрічі — лише локальний пристрій.

Два потоки:
Ваш мікрофон (ви) — легко.
Системне аудіо (всі інші) — складна, платформо-специфічна частина.
Уроки, які обійшли мене за тижні

1) Не вмикайте системне «оброблення голосу».
ОС має режим зв’язку/голосу, який здається корисним — шумозаглушення та регулювання рівня для безкоштовно. Увімкніть його, і він глобально знижує гучність ваших динаміків і накладає авто‑гейну на ваш мікрофон. Він невидимий на вашій машині — з’являється лише коли ви в реальному дзвінку, і інша особа звучить тихо або надто гучно. Залиште вимкненим.

2) Не накладайте на один потік AEC/AGC.
Зустрічевий застосунок (Zoom/Meet/Teams) вже виконує AEC + AGC + приглушення шуму. Додайте свій власний на тому ж потоці, і вони будуть змагатися за опорний сигнал — якість впаде. Обробляйте окрему копію, ніколи не те, що чує застосунок зустрічі.

3) ЗапускCapture у окремому процесі.
Я переніс нативне захоплення в маленький помічник, який передає сирий PCM через IPC. Ізолює важку нативну роботу, проживає збої (перезапуск замість зупинки програми), тримає UI‑потік вільним.

4) «Готово» означає, що кадри йдуть — не статус-флаг.
Моя перша версія довіряла одноразовому сигналу «Capture started». Він брехав: після сну/пробудження або повільного холодного старту прапорець спрацював, але аудіо не з’явилося. Істина — фактичні надходження кадрів. Контроль за життєздатністю, а не за булевим значенням.

5) Тримайте запасний шлях — але знищуйте його, коли native‑частина запустилася.
Я запускаю браузерний запасний шлях, коли нативний помічник ще не готовий. Проблема: залишати його працювати поряд із нативним — подвійне захоплення аудіо. Зробіть перемикання зворотнім, і повністю знищуйте запасний шлях після того, як з’являться кадри від нативної частини.

6) Ранню нормалізацію.
Зменшення до 16 кГц моно перед транскрипцією, залишайте дві сторони на окремих каналах, щоб «вони» та «ви» ніколи не зливались у транскрипті. Дешево на стадії захоплення, болісно пізніше.

Висновок
Шар AI/LLM мав найбільше навчальних матеріалів та найменше несподіванок. Аудіо‑шар — особливості ОС, обробка, що накладається непомітно, гонки запуску — саме там були всі реальні помилки. Будуючи що-небудь, що слухає дзвінок? Плануйте свій час відповідно.

Готовий поглибитися в коментарях — особливо як інші вирішують AEC/AGC та накладання між платформами.

(Я розробляю це як TryCuebird — копілота для співбесід у режимі реального часу. Вище наведені уроки захоплення — загальні для застосування.)

HI-FI News

через DEV Community
https://dev.to

7 червня 2026 р. 04:15 AM

June 7, 2026 at 04:15AM


Коментарі

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *