mirror of https://github.com/mackron/dr_libs
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.
70 lines
1.8 KiB
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;
|
|
} |