blob: b76a929fe8c2d78516e6f3239c65d6c257a82ce0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
using System.Runtime.ExceptionServices;
using Whisper;
namespace MicrophoneCS
{
sealed class CaptureThread: CaptureCallbacks
{
public CaptureThread( CommandLineArgs args, Context context, iAudioCapture source )
{
callbacks = new TranscribeCallbacks( args );
this.context = context;
this.source = source;
thread = new Thread( threadMain ) { Name = "Capture Thread" };
Console.WriteLine( "Press any key to quit" );
thread.Start();
}
static void readKeyCallback( object? state )
{
CaptureThread ct = ( state as CaptureThread ) ?? throw new ApplicationException();
Console.ReadKey();
ct.shouldQuit = true;
}
public void join()
{
ThreadPool.QueueUserWorkItem( readKeyCallback, this );
thread.Join();
edi?.Throw();
}
volatile bool shouldQuit = false;
protected override bool shouldCancel( Context sender ) =>
shouldQuit;
protected override void captureStatusChanged( Context sender, eCaptureStatus status )
{
Console.WriteLine( $"CaptureStatusChanged: {status}" );
}
readonly TranscribeCallbacks callbacks;
readonly Thread thread;
readonly Context context;
readonly iAudioCapture source;
ExceptionDispatchInfo? edi = null;
void threadMain()
{
try
{
context.runCapture( source, callbacks, this );
}
catch( Exception ex )
{
edi = ExceptionDispatchInfo.Capture( ex );
}
}
}
}
|