Skip to content

Support Audio - #677

Open
TheJoeFin wants to merge 15 commits into
devfrom
audio
Open

Support Audio#677
TheJoeFin wants to merge 15 commits into
devfrom
audio

Conversation

@TheJoeFin

Copy link
Copy Markdown
Owner

PR Classification

Introduces a new on-device audio transcription feature and related UI, settings, and infrastructure updates.

PR Summary

Adds Whisper-based audio transcription (file and live audio) with user-selectable models and integrates transcription into the main app flows.

  • AudioTranscriptionUtilities and LiveAudioTranscriber: Implement model management, audio decoding, VAD segmentation, and live transcription logic.
  • BottomBarSettings and EditTextWindow: Update UI to support transcription toggles, model/source selection, and streaming results.
  • Integrate transcription into file open and drag-and-drop flows, replacing text open with audio transcription.
  • Add non-blocking status bar and cancel button for long-running transcriptions.
  • Update app manifest for microphone capability and add Whisper.net/NAudio dependencies.

TheJoeFin and others added 15 commits July 9, 2026 22:05
Reference local Whisper (Whisper.net + Whisper.net.Runtime) and NAudio for
on-device audio transcription, and declare the microphone device capability
needed for live microphone capture.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Persist the user's chosen Whisper model (defaults to balanced multilingual
base), trading transcription speed for accuracy and language coverage.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Implement on-device transcription backed by Whisper.net (whisper.cpp),
running on the CPU packaged or unpackaged on x64/arm64:

- File transcription decodes any Media Foundation audio to 16 kHz mono via
  NAudio and streams Whisper segments as they are recognized, cancellably.
- Selectable model (tiny.en / base.en / base / small) via WhisperModelChoice,
  read from settings; the shared WhisperFactory reloads when the choice changes.
- VAD-gated live transcription (LiveAudioTranscriber) from microphone or
  system-audio loopback: Silero VAD finds speech regions and only sends a
  region to Whisper once trailing silence marks the utterance complete, so
  silence is skipped and phrases cut on natural boundaries.
- AudioDebugLog writes a timestamped diagnostic log for the transcription path.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Route audio files (CLI arg, File > Open, drag/drop) to on-device
transcription, streaming each Whisper segment into the editor via a
non-blocking, cancellable status bar that preserves already-transcribed text.

Add a bottom-bar live-transcription toggle with a right-click menu to pick the
capture source (microphone or system audio) and the transcription model, both
restarting an active session on change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reference local Whisper (Whisper.net + Whisper.net.Runtime) and NAudio for
on-device audio transcription, and declare the microphone device capability
needed for live microphone capture.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Persist the user's chosen Whisper model (defaults to balanced multilingual
base), trading transcription speed for accuracy and language coverage.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Implement on-device transcription backed by Whisper.net (whisper.cpp),
running on the CPU packaged or unpackaged on x64/arm64:

- File transcription decodes any Media Foundation audio to 16 kHz mono via
  NAudio and streams Whisper segments as they are recognized, cancellably.
- Selectable model (tiny.en / base.en / base / small) via WhisperModelChoice,
  read from settings; the shared WhisperFactory reloads when the choice changes.
- VAD-gated live transcription (LiveAudioTranscriber) from microphone or
  system-audio loopback: Silero VAD finds speech regions and only sends a
  region to Whisper once trailing silence marks the utterance complete, so
  silence is skipped and phrases cut on natural boundaries.
- AudioDebugLog writes a timestamped diagnostic log for the transcription path.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Route audio files (CLI arg, File > Open, drag/drop) to on-device
transcription, streaming each Whisper segment into the editor via a
non-blocking, cancellable status bar that preserves already-transcribed text.

Add a bottom-bar live-transcription toggle with a right-click menu to pick the
capture source (microphone or system audio) and the transcription model, both
restarting an active session on change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Added EtwShowTranscribe setting to enable/disable audio transcription features. Introduced "Show Transcribe" toggle in BottomBarSettings and new menu items in EditTextWindow for transcription actions, shown only if supported and enabled. Synced UI and settings for transcription visibility, source, and model selection. Updated code generation version in Settings.Designer.cs.
Text-Grab.csproj listed Microsoft.WindowsAppSDK.AI/.Foundation/.Runtime/.WinUI
twice at differing versions, producing NuGet warning NU1504. The newer set is
not internally consistent (Runtime 2.4.0 expects InteractiveExperiences 2.1.6
but 2.1.3 is resolved), so keep the matched 2.2.x components.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The .NET 10 SDK no longer supports running Microsoft.Testing.Platform test
projects through the VSTest target, which broke `dotnet test` in CI. Opt into
the new runner via global.json and drop the VSTest-only packages
(Microsoft.NET.Test.Sdk, xunit.runner.visualstudio, coverlet.collector).
OutputType is now Exe as required by the xunit.v3 MTP entry point.

xunit.v3 is pinned to 3.2.2 because Xunit.StaFact, used by every WpfFact test,
has no build compatible with xunit.v3 4.0.0 yet.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
With Microsoft.Testing.Platform, dotnet test no longer accepts a positional
project path.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant