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.
miniaudio/tests/test_generation/ma_test_generation_waveform.c

240 lines
7.5 KiB
C

ma_result test_waveform__by_format_and_type(ma_format format, ma_waveform_type type, double amplitude, const char* pFileName)
{
ma_result result;
ma_waveform_config waveformConfig;
ma_waveform waveform;
ma_encoder_config encoderConfig;
ma_encoder encoder;
ma_uint32 iFrame;
printf(" %s\n", pFileName);
waveformConfig = ma_waveform_config_init(format, 2, 48000, type, amplitude, 220);
result = ma_waveform_init(&waveformConfig, &waveform);
if (result != MA_SUCCESS) {
return result;
}
encoderConfig = ma_encoder_config_init(ma_encoding_format_wav, waveformConfig.format, waveformConfig.channels, waveformConfig.sampleRate);
result = ma_encoder_init_file(pFileName, &encoderConfig, &encoder);
if (result != MA_SUCCESS) {
return result; /* Failed to initialize encoder. */
}
/* We'll do a few seconds of data. */
for (iFrame = 0; iFrame < waveformConfig.sampleRate * 10; iFrame += 1) {
float temp[MA_MAX_CHANNELS];
ma_waveform_read_pcm_frames(&waveform, temp, 1, NULL);
ma_encoder_write_pcm_frames(&encoder, temp, 1, NULL);
}
ma_encoder_uninit(&encoder);
ma_waveform_uninit(&waveform);
return MA_SUCCESS;
}
ma_result test_waveform__f32()
{
ma_result result;
ma_bool32 hasError = MA_FALSE;
double amplitude = 0.2;
/* Sine */
result = test_waveform__by_format_and_type(ma_format_f32, ma_waveform_type_sine, +amplitude, TEST_OUTPUT_DIR"/waveform_f32_sine.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
result = test_waveform__by_format_and_type(ma_format_f32, ma_waveform_type_sine, -amplitude, TEST_OUTPUT_DIR"/waveform_f32_sine_neg.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
/* Square */
result = test_waveform__by_format_and_type(ma_format_f32, ma_waveform_type_square, +amplitude, TEST_OUTPUT_DIR"/waveform_f32_square.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
result = test_waveform__by_format_and_type(ma_format_f32, ma_waveform_type_square, -amplitude, TEST_OUTPUT_DIR"/waveform_f32_square_neg.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
/* Triangle */
result = test_waveform__by_format_and_type(ma_format_f32, ma_waveform_type_triangle, +amplitude, TEST_OUTPUT_DIR"/waveform_f32_triangle.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
result = test_waveform__by_format_and_type(ma_format_f32, ma_waveform_type_triangle, -amplitude, TEST_OUTPUT_DIR"/waveform_f32_triangle_neg.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
/* Sawtooth */
result = test_waveform__by_format_and_type(ma_format_f32, ma_waveform_type_sawtooth, +amplitude, TEST_OUTPUT_DIR"/waveform_f32_sawtooth.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
result = test_waveform__by_format_and_type(ma_format_f32, ma_waveform_type_sawtooth, -amplitude, TEST_OUTPUT_DIR"/waveform_f32_sawtooth_neg.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
if (hasError) {
return MA_ERROR;
} else {
return MA_SUCCESS;
}
}
ma_result test_waveform__s16()
{
ma_result result;
ma_bool32 hasError = MA_FALSE;
double amplitude = 0.2;
/* Sine */
result = test_waveform__by_format_and_type(ma_format_s16, ma_waveform_type_sine, +amplitude, TEST_OUTPUT_DIR"/waveform_s16_sine.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
result = test_waveform__by_format_and_type(ma_format_s16, ma_waveform_type_sine, -amplitude, TEST_OUTPUT_DIR"/waveform_s16_sine_neg.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
/* Square */
result = test_waveform__by_format_and_type(ma_format_s16, ma_waveform_type_square, +amplitude, TEST_OUTPUT_DIR"/waveform_s16_square.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
result = test_waveform__by_format_and_type(ma_format_s16, ma_waveform_type_square, -amplitude, TEST_OUTPUT_DIR"/waveform_s16_square_neg.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
/* Triangle */
result = test_waveform__by_format_and_type(ma_format_s16, ma_waveform_type_triangle, +amplitude, TEST_OUTPUT_DIR"/waveform_s16_triangle.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
result = test_waveform__by_format_and_type(ma_format_s16, ma_waveform_type_triangle, -amplitude, TEST_OUTPUT_DIR"/waveform_s16_triangle_neg.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
/* Sawtooth */
result = test_waveform__by_format_and_type(ma_format_s16, ma_waveform_type_sawtooth, +amplitude, TEST_OUTPUT_DIR"/waveform_s16_sawtooth.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
result = test_waveform__by_format_and_type(ma_format_s16, ma_waveform_type_sawtooth, -amplitude, TEST_OUTPUT_DIR"/waveform_s16_sawtooth_neg.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
if (hasError) {
return MA_ERROR;
} else {
return MA_SUCCESS;
}
}
ma_result test_waveform__u8()
{
ma_result result;
ma_bool32 hasError = MA_FALSE;
double amplitude = 0.2;
/* Sine */
result = test_waveform__by_format_and_type(ma_format_u8, ma_waveform_type_sine, +amplitude, TEST_OUTPUT_DIR"/waveform_u8_sine.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
result = test_waveform__by_format_and_type(ma_format_u8, ma_waveform_type_sine, -amplitude, TEST_OUTPUT_DIR"/waveform_u8_sine_neg.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
/* Square */
result = test_waveform__by_format_and_type(ma_format_u8, ma_waveform_type_square, +amplitude, TEST_OUTPUT_DIR"/waveform_u8_square.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
result = test_waveform__by_format_and_type(ma_format_u8, ma_waveform_type_square, -amplitude, TEST_OUTPUT_DIR"/waveform_u8_square_neg.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
/* Triangle */
result = test_waveform__by_format_and_type(ma_format_u8, ma_waveform_type_triangle, +amplitude, TEST_OUTPUT_DIR"/waveform_u8_triangle.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
result = test_waveform__by_format_and_type(ma_format_u8, ma_waveform_type_triangle, -amplitude, TEST_OUTPUT_DIR"/waveform_u8_triangle_neg.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
/* Sawtooth */
result = test_waveform__by_format_and_type(ma_format_u8, ma_waveform_type_sawtooth, +amplitude, TEST_OUTPUT_DIR"/waveform_u8_sawtooth.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
result = test_waveform__by_format_and_type(ma_format_u8, ma_waveform_type_sawtooth, -amplitude, TEST_OUTPUT_DIR"/waveform_u8_sawtooth_neg.wav");
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
if (hasError) {
return MA_ERROR;
} else {
return MA_SUCCESS;
}
}
int test_entry__waveform(int argc, char** argv)
{
ma_result result;
ma_bool32 hasError = MA_FALSE;
(void)argc;
(void)argv;
result = test_waveform__f32();
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
result = test_waveform__s16();
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
result = test_waveform__u8();
if (result != MA_SUCCESS) {
hasError = MA_TRUE;
}
if (hasError) {
return -1;
} else {
return 0;
}
}