Подключал Apple SpeechAnalyzer к своей локальной диктовке — результат совпал: очень быстро на чистой речи, но сложный вход может молча обрезать.
Две ловушки из похожего пайплайна.
Аудиозахват иногда успешно стартует и продолжает отдавать буферы, внутри которых одни нули. Снаружи это выглядит как ошибка модели. Я ловлю это RMS-watchdog’ом: если уровень долго ниже −80 dBFS, останавливаю запись и показываю ошибку микрофона.
И галлюцинации Whisper лучше фильтровать до Qwen. Иначе Whisper придумывает текст на тишине, а редактор превращает мусор в убедительное связное сообщение. VAD и noSpeech — до режимов «Исправить» и «Кратко», проверка результата — после.
С ad-hoc-подписью и tccutil reset Accessibility прошёл тот же путь. До стабильного Developer ID это действительно рабочий вариант.
Стек другой: ScreenCaptureKit, WhisperKit и FluidAudio, но грабли те же.
Раздельные треки сами по себе диаризации не мешают. При звонке в наушниках микрофон — это заведомо вы, поэтому диаризировать нужно только системный звук, а потом свести сегменты по таймкодам. Бесплатно получаем одну точную метку спикера. Плата — echo-dedup, когда голос собеседника наводится в микрофон.
Второй полезный обход: офлайн-пайплайн FluidAudio основан на Pyannote Community-1, но работает нативно через CoreML — без Python, hf auth login и gated-страниц.
Имена LLM не угадывает: Daisy запоминает локальные голосовые отпечатки между встречами. Но на часовых созвонах с 4–6 людьми короткие реплики всё равно разъезжаются. Офлайн-проход после Stop лучше стриминга, но проблему полностью не решает.
Подключал Apple SpeechAnalyzer к своей локальной диктовке — результат совпал: очень быстро на чистой речи, но сложный вход может молча обрезать.
Две ловушки из похожего пайплайна.
Аудиозахват иногда успешно стартует и продолжает отдавать буферы, внутри которых одни нули. Снаружи это выглядит как ошибка модели. Я ловлю это RMS-watchdog’ом: если уровень долго ниже −80 dBFS, останавливаю запись и показываю ошибку микрофона.
И галлюцинации Whisper лучше фильтровать до Qwen. Иначе Whisper придумывает текст на тишине, а редактор превращает мусор в убедительное связное сообщение. VAD и
noSpeech— до режимов «Исправить» и «Кратко», проверка результата — после.С ad-hoc-подписью и
tccutil reset Accessibilityпрошёл тот же путь. До стабильного Developer ID это действительно рабочий вариант.Раз просили альтернативную реализацию: собрал Daisy — нативное macOS-приложение под Apache 2.0:
https://github.com/addicted-studio/daisy-app
Стек другой: ScreenCaptureKit, WhisperKit и FluidAudio, но грабли те же.
Раздельные треки сами по себе диаризации не мешают. При звонке в наушниках микрофон — это заведомо вы, поэтому диаризировать нужно только системный звук, а потом свести сегменты по таймкодам. Бесплатно получаем одну точную метку спикера. Плата — echo-dedup, когда голос собеседника наводится в микрофон.
Второй полезный обход: офлайн-пайплайн FluidAudio основан на Pyannote Community-1, но работает нативно через CoreML — без Python,
hf auth loginи gated-страниц.Имена LLM не угадывает: Daisy запоминает локальные голосовые отпечатки между встречами. Но на часовых созвонах с 4–6 людьми короткие реплики всё равно разъезжаются. Офлайн-проход после Stop лучше стриминга, но проблему полностью не решает.