22
22
begin to fire.
23
23
*/
24
24
25
- // TEST_AND_EXIT is defined when running in Emscripten test harness. You can
26
- // strip these out in your own project (otherwise playback will end quickly) .
27
- #ifdef TEST_AND_EXIT
25
+ // REPORT_RESULT is defined when running in Emscripten test harness. You can
26
+ // strip these out in your own project.
27
+ #ifdef REPORT_RESULT
28
28
_Thread_local int testTlsVariable = 1 ;
29
29
int lastTlsVariableValueInAudioThread = 1 ;
30
30
#endif
31
31
32
32
// This function will be called for every fixed-size buffer of audio samples to be processed.
33
33
bool ProcessAudio (int numInputs , const AudioSampleFrame * inputs , int numOutputs , AudioSampleFrame * outputs , int numParams , const AudioParamFrame * params , void * userData ) {
34
- #ifdef TEST_AND_EXIT
35
- // Only running in the test harness, see main_thread_tls_access()
34
+ #ifdef REPORT_RESULT
36
35
assert (testTlsVariable == lastTlsVariableValueInAudioThread );
37
36
++ testTlsVariable ;
38
37
lastTlsVariableValueInAudioThread = testTlsVariable ;
@@ -64,15 +63,14 @@ EM_JS(void, InitHtmlUi, (EMSCRIPTEN_WEBAUDIO_T audioContext), {
64
63
};
65
64
});
66
65
67
- #ifdef TEST_AND_EXIT
66
+ #ifdef REPORT_RESULT
68
67
bool main_thread_tls_access (double time , void * userData ) {
69
68
// Try to mess the TLS variable on the main thread, with the expectation that
70
- // it should not change the TLS value on the AudioWorklet thread, asserted in
71
- // ProcessAudio().
69
+ // it should not change the TLS value on the AudioWorklet thread.
72
70
testTlsVariable = (int )time ;
73
- // Exit to the test harness after enough calls to ProcessAudio()
74
71
if (lastTlsVariableValueInAudioThread >= 100 ) {
75
- emscripten_force_exit (EXIT_SUCCESS );
72
+ REPORT_RESULT (0 );
73
+ return false;
76
74
}
77
75
return true;
78
76
}
@@ -81,11 +79,7 @@ bool main_thread_tls_access(double time, void *userData) {
81
79
// This callback will fire after the Audio Worklet Processor has finished being
82
80
// added to the Worklet global scope.
83
81
void AudioWorkletProcessorCreated (EMSCRIPTEN_WEBAUDIO_T audioContext , bool success , void * userData ) {
84
- if (!success ) {
85
- emscripten_out ("Stopped in AudioWorkletProcessorCreated" );
86
- assert (0 );
87
- return ;
88
- }
82
+ if (!success ) return ;
89
83
90
84
// Specify the input and output node configurations for the Wasm Audio
91
85
// Worklet. A simple setup with single mono output channel here, and no
@@ -103,8 +97,7 @@ void AudioWorkletProcessorCreated(EMSCRIPTEN_WEBAUDIO_T audioContext, bool succe
103
97
// Connect the audio worklet node to the graph.
104
98
emscripten_audio_node_connect (wasmAudioWorklet , audioContext , 0 , 0 );
105
99
106
- #ifdef TEST_AND_EXIT
107
- // Schedule this to exit after ProcessAudio() has been called 100 times
100
+ #ifdef REPORT_RESULT
108
101
emscripten_set_timeout_loop (main_thread_tls_access , 10 , 0 );
109
102
#endif
110
103
@@ -115,11 +108,7 @@ void AudioWorkletProcessorCreated(EMSCRIPTEN_WEBAUDIO_T audioContext, bool succe
115
108
// AudioWorklet global scope, and is now ready to begin adding Audio Worklet
116
109
// Processors.
117
110
void WebAudioWorkletThreadInitialized (EMSCRIPTEN_WEBAUDIO_T audioContext , bool success , void * userData ) {
118
- if (!success ) {
119
- emscripten_out ("Stopped in WebAudioWorkletThreadInitialized" );
120
- assert (0 );
121
- return ;
122
- }
111
+ if (!success ) return ;
123
112
124
113
WebAudioWorkletProcessorCreateOptions opts = {
125
114
.name = "noise-generator" ,
@@ -143,9 +132,4 @@ int main() {
143
132
// and kick off Audio Worklet scope initialization, which shares the Wasm
144
133
// Module and Memory to the AudioWorklet scope and initializes its stack.
145
134
emscripten_start_wasm_audio_worklet_thread_async (context , wasmAudioWorkletStack , sizeof (wasmAudioWorkletStack ), WebAudioWorkletThreadInitialized , 0 );
146
-
147
- #ifdef TEST_AND_EXIT
148
- // We're in the test harness and exiting is via main_thread_tls_access()
149
- emscripten_exit_with_live_runtime ();
150
- #endif
151
135
}
0 commit comments