@@ -20,14 +20,31 @@ declare var AudioWorkletProcessor: {
20
20
new ( options ?: AudioWorkletNodeOptions ) : AudioWorkletProcessor ;
21
21
} ;
22
22
23
+ // Bug 646: Safari 14.1 is buggy regarding audio worklets
24
+ // globalThis cannot be used to access registerProcessor or samplerate
25
+ // we need to really use them as globals
26
+ /**
27
+ * @target web
28
+ */
29
+ declare var registerProcessor : any ;
30
+ /**
31
+ * @target web
32
+ */
33
+ declare var sampleRate : number ;
34
+
23
35
/**
24
36
* This class implements a HTML5 Web Audio API based audio output device
25
37
* for alphaSynth using the modern Audio Worklets.
26
38
* @target web
27
39
*/
28
40
export class AlphaSynthWebWorklet {
41
+ private static _isRegistered = false ;
29
42
public static init ( ) {
30
- ( Environment . globalThis as any ) . registerProcessor (
43
+ if ( AlphaSynthWebWorklet . _isRegistered ) {
44
+ return ;
45
+ }
46
+ AlphaSynthWebWorklet . _isRegistered = true ;
47
+ registerProcessor (
31
48
'alphatab' ,
32
49
class AlphaSynthWebWorkletProcessor extends AudioWorkletProcessor {
33
50
public static readonly BufferSize : number = 4096 ;
@@ -41,9 +58,11 @@ export class AlphaSynthWebWorklet {
41
58
constructor ( ...args : any [ ] ) {
42
59
super ( ...args ) ;
43
60
61
+ Logger . info ( 'WebAudio' , 'creating processor' ) ;
62
+
44
63
this . _bufferCount = Math . floor (
45
64
( AlphaSynthWebWorkletProcessor . TotalBufferTimeInMilliseconds *
46
- Environment . globalThis . sampleRate ) /
65
+ sampleRate ) /
47
66
1000 /
48
67
AlphaSynthWebWorkletProcessor . BufferSize
49
68
) ;
@@ -77,6 +96,7 @@ export class AlphaSynthWebWorklet {
77
96
if ( outputs . length !== 1 && outputs [ 0 ] . length !== 2 ) {
78
97
return false ;
79
98
}
99
+
80
100
let left : Float32Array = outputs [ 0 ] [ 0 ] ;
81
101
let right : Float32Array = outputs [ 0 ] [ 1 ] ;
82
102
@@ -160,7 +180,7 @@ export class AlphaSynthAudioWorkletOutput extends AlphaSynthWebAudioOutputBase {
160
180
this . _worklet . connect ( ctx ! . destination ) ;
161
181
} ,
162
182
reason => {
163
- Logger . debug ( 'WebAudio' , `Audio Worklet creation failed: reason=${ reason } ` ) ;
183
+ Logger . error ( 'WebAudio' , `Audio Worklet creation failed: reason=${ reason } ` ) ;
164
184
}
165
185
) ;
166
186
}
0 commit comments