You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dr_libs/tests/wav/dr_wav_playback.c

70 lines
1.8 KiB
C

#define MA_NO_DECODING
#define MA_NO_ENCODING
#define MA_IMPLEMENTATION
#include "../../../miniaudio/miniaudio.h"
#define DR_WAV_IMPLEMENTATION
#include "../../dr_wav.h"
#include "../common/dr_common.c"
drwav g_wav;
void data_callback(ma_device* pDevice, void* pOutput, const void* pInput, ma_uint32 frameCount)
{
/* Assuming format is always s16 for now. */
if (pDevice->playback.format == ma_format_s16) {
drwav_read_pcm_frames_s16(&g_wav, frameCount, (drwav_int16*)pOutput);
} else if (pDevice->playback.format == ma_format_f32) {
drwav_read_pcm_frames_f32(&g_wav, frameCount, (float*)pOutput);
} else {
/* Unsupported format. */
}
(void)pInput;
}
int main(int argc, char** argv)
{
ma_result result;
ma_device device;
ma_device_config deviceConfig;
if (argc < 2) {
printf("No input file specified.");
return -1;
}
if (!drwav_init_file_with_metadata(&g_wav, argv[1], 0, NULL)) {
printf("Failed to load file: %s", argv[1]);
return -1;
}
deviceConfig = ma_device_config_init(ma_device_type_playback);
deviceConfig.playback.format = ma_format_s16;
deviceConfig.playback.channels = g_wav.channels;
deviceConfig.sampleRate = g_wav.sampleRate;
deviceConfig.dataCallback = data_callback;
result = ma_device_init(NULL, &deviceConfig, &device);
if (result != MA_SUCCESS) {
printf("Failed to initialize playback device.");
drwav_uninit(&g_wav);
return -1;
}
result = ma_device_start(&device);
if (result != MA_SUCCESS) {
printf("Failed to start playback device.");
ma_device_uninit(&device);
drwav_uninit(&g_wav);
return -1;
}
printf("Press Enter to quit...");
getchar();
ma_device_uninit(&device);
drwav_uninit(&g_wav);
return 0;
}