diff --git a/examples/meson.build b/examples/meson.build index 9624f5f5..8de9e386 100644 --- a/examples/meson.build +++ b/examples/meson.build @@ -242,9 +242,7 @@ if device_io.enabled() and generation executable( 'simple_playback_sine', 'simple_playback_sine.c', - # FIXME: simple_playback_sine.c:60:48: - # error: ‘struct ’ has no member named ‘name’ - ma_example_broken, + name_suffix: host_system == 'emscripten' ? 'html' : [], dependencies: ma_sys_deps + ma_backend_deps, install: false, implicit_include_directories: false, diff --git a/examples/simple_playback_sine.c b/examples/simple_playback_sine.c index d053f5a0..bbd01b60 100644 --- a/examples/simple_playback_sine.c +++ b/examples/simple_playback_sine.c @@ -43,6 +43,7 @@ int main(int argc, char** argv) ma_waveform sineWave; ma_device_config deviceConfig; ma_device device; + ma_device_info deviceInfo; ma_waveform_config sineWaveConfig; deviceConfig = ma_device_config_init(ma_device_type_playback); @@ -57,7 +58,9 @@ int main(int argc, char** argv) return -4; } - printf("Device Name: %s\n", device.playback.name); + if (ma_device_get_info(&device, ma_device_type_playback, &deviceInfo) == MA_SUCCESS) { + printf("Device Name: %s\n", deviceInfo.name); + } sineWaveConfig = ma_waveform_config_init(device.playback.format, device.playback.channels, device.sampleRate, ma_waveform_type_sine, 0.2, 220); ma_waveform_init(&sineWaveConfig, &sineWave); diff --git a/extras/meson.build b/extras/meson.build index 354eb25c..e6081654 100644 --- a/extras/meson.build +++ b/extras/meson.build @@ -12,7 +12,11 @@ opusfile_dep = dependency('opusfile', required: get_option('libopus')) if opus_dep.found() and opusfile_dep.found() ma_all_libs += static_library( 'miniaudio_libopus', - 'miniaudio_libopus.c', + configure_file( + input: 'miniaudio_libopus.h', + output: 'miniaudio_libopus.c', + copy: true, + ), dependencies: ma_sys_deps + [opus_dep, opusfile_dep], c_args: ma_extras_c_args, install: false, @@ -27,7 +31,11 @@ vorbisfile_dep = dependency('vorbisfile', required: get_option('libvorbis')) if vorbis_dep.found() and vorbisfile_dep.found() ma_all_libs += static_library( 'miniaudio_libvorbis', - 'miniaudio_libvorbis.c', + configure_file( + input: 'miniaudio_libvorbis.h', + output: 'miniaudio_libvorbis.c', + copy: true, + ), dependencies: ma_sys_deps + [vorbis_dep, vorbisfile_dep], c_args: ma_extras_c_args, install: false, diff --git a/meson.build b/meson.build index b0adfae4..04b63680 100644 --- a/meson.build +++ b/meson.build @@ -145,6 +145,7 @@ if host_system in [ 'dragonfly', 'android', 'darwin', + 'emscripten', ] if runtime_linking.enabled() ma_sys_deps += dependency('dl') @@ -226,6 +227,21 @@ if runtime_linking.disabled() ma_backend_deps += dependency('OpenSLES') endif + # TODO: should we support non-wasm webaudio builds? + if 'webaudio' in backends and host_system == 'emscripten' + add_project_arguments( + '-sWASM_WORKERS=1', + '-DMA_ENABLE_AUDIO_WORKLETS', + language: ['c', 'cpp'], + ) + add_project_link_arguments( + '-sAUDIO_WORKLET=1', + '-sWASM_WORKERS=1', + '-sASYNCIFY', + language: ['c', 'cpp'], + ) + endif + if 'sdl' in backends ma_backend_deps += sdl_dep endif