yum-archive/TaSTT-Whisper
High-performance GPGPU inference of OpenAI's Whisper automatic speech recognition (ASR) model
git clone https://git.yummers.dev/yum-archive/TaSTT-Whisper
8c4603c
master
1#pragma once 2#include "AppState.h" 3#include "Utils/WTL/atlddx.h" 4#include "Utils/miscUtils.h" 5#include "Utils/LanguageDropdown.h" 6#include "Utils/TranslateCheckbox.h" 7#include "Utils/PendingState.h" 8#include "CircleIndicator.h" 9 10class CaptureDlg : 11public CDialogImpl < CaptureDlg > , 12public CWinDataExchange < CaptureDlg > , 13public iThreadPoolCallback 14{ 15AppState & appState ; 16 17public : 18static constexpr UINT IDD = IDD_CAPTURE_DIALOG ; 19static constexpr UINT WM_CALLBACK_COMPLETION = WM_APP + 1 ; 20static constexpr UINT WM_CALLBACK_STATUS = WM_APP + 2 ; 21 22CaptureDlg ( AppState & app ) : appState ( app ) { } 23 24HRESULT show (); 25 26BEGIN_MSG_MAP ( CaptureDlg ) 27MESSAGE_HANDLER ( WM_INITDIALOG , OnInitDialog ) 28ON_BUTTON_CLICK ( IDC_CONSOLE , cbConsole . click ) 29ON_BUTTON_CLICK ( IDC_DEV_REFRESH , onDeviceRefresh ); 30ON_BUTTON_CLICK ( IDC_BROWSE_RESULT , onBrowseResult ); 31ON_BUTTON_CLICK ( IDC_SAVE_TEXT , onSaveTextCheckbox ); 32ON_BUTTON_CLICK ( IDC_RUN_CAPTURE , onRunCapture ); 33 34ON_BUTTON_CLICK ( IDCANCEL , onClose ) 35ON_BUTTON_CLICK ( IDC_BACK , onBack ) 36ON_BUTTON_CLICK ( IDC_TRANSCRIBE , onTranscribe ); 37 38MESSAGE_HANDLER ( WM_CALLBACK_COMPLETION , onThreadQuit ); 39MESSAGE_HANDLER ( WM_CALLBACK_STATUS , onThreadStatus ); 40END_MSG_MAP () 41 42BEGIN_DDX_MAP ( CaptureDlg ) 43DDX_CONTROL_HANDLE ( IDC_DEVICE , cbCaptureDevice ) 44DDX_CONTROL_HANDLE ( IDC_RUN_CAPTURE , btnRunCapture ); 45DDX_CONTROL_HANDLE ( IDC_TRANSCRIBE_PROGRESS , progressBar ); 46DDX_CONTROL_HANDLE ( IDC_SAVE_TEXT , checkSave ) 47DDX_CONTROL_HANDLE ( IDC_SAVE_APPEND , checkAppend ) 48DDX_CONTROL_HANDLE ( IDC_SAVE_TIMESTAMPS , checkTimestamps ) 49DDX_CONTROL_HANDLE ( IDC_PATH_RESULT , transcribeOutputPath ) 50DDX_CONTROL_HANDLE ( IDC_BROWSE_RESULT , transcribeOutputBrowse ); 51 52DDX_CONTROL ( IDC_VOICE_ACTIVITY , voiceActivity ); 53DDX_CONTROL ( IDC_TRANS_STATUS , transcribeActivity ); 54DDX_CONTROL ( IDC_STALL_STATUS , stalled ); 5556 END_DDX_MAP () 57 58private : 59PendingState pendingState ; 60void setPending ( bool nowPending ); 61 62LRESULT OnInitDialog ( UINT nMessage , WPARAM wParam , LPARAM lParam , BOOL & bHandled ); 63 64void onClose () 65{ 66ATLVERIFY ( EndDialog ( IDCANCEL ) ); 67} 68void onBack () 69{ 70ATLVERIFY ( EndDialog ( IDC_BACK ) ); 71} 72void onTranscribe () 73{ 74ATLVERIFY ( EndDialog ( IDC_TRANSCRIBE ) ); 75} 76 77// List capture devices, and populate the combobox 78bool listDevices (); 79void onDeviceRefresh (); 80bool selectDevice ( LPCTSTR endpoint ); 81 82static HRESULT __stdcall listDevicesCallback ( int len , const Whisper :: sCaptureDevice * buffer , void * pv ) noexcept ; 83ConsoleCheckbox cbConsole ; 84LanguageDropdown languageSelector ; 85TranslateCheckbox cbTranslate ; 86CComboBox cbCaptureDevice ; 87 88void onBrowseResult (); 89 90enum struct eTextFlags : uint32_t ; 91CButton checkSave , checkAppend , checkTimestamps ; 92CEdit transcribeOutputPath ; 93CButton transcribeOutputBrowse ; 94void onSaveTextCheckbox (); 95eTextFlags getOutputFlags (); 96 97CButton btnRunCapture ; 98CProgressBarCtrl progressBar ; 99ThreadPoolWork work ; 100 101struct sCaptureDevice 102{ 103CString displayName ; 104CString endpoint ; 105}; 106std :: vector < sCaptureDevice > devices ; 107 108void showError ( LPCTSTR text , HRESULT hr ); 109 110CircleIndicator voiceActivity ; 111CircleIndicator transcribeActivity ; 112CircleIndicator stalled ; 113 114struct sThreadState 115{ 116volatile bool stopRequested ; 117bool translate ; 118eTextFlags flags ; 119CAtlFile * file ; 120uint32_t language ; 121Whisper :: sCaptureParams captureParams ; 122CString endpoint ; 123CString textOutputPath ; 124CString errorMessage ; 125}; 126sThreadState threadState ; 127bool captureRunning = false; 128 129void getThreadError (); 130void onRunCapture (); 131HRESULT runCapture (); 132void __stdcall poolCallback () noexcept override final ; 133 134LRESULT onThreadQuit ( UINT nMessage , WPARAM wParam , LPARAM lParam , BOOL & bHandled ); 135LRESULT onThreadStatus ( UINT nMessage , WPARAM wParam , LPARAM lParam , BOOL & bHandled ); 136 137static HRESULT __stdcall cbCancel ( void * pv ) noexcept ; 138static HRESULT __stdcall cbStatus ( void * pv , Whisper :: eCaptureStatus status ) noexcept ; 139 140static HRESULT __cdecl newSegmentCallback ( Whisper :: iContext * ctx , uint32_t n_new , void * user_data ) noexcept ; 141 142HRESULT appendTextFile ( Whisper :: iTranscribeResult * results , uint32_t newSegments ); 143};