Commit 0d6bcd1f authored by David Reid's avatar David Reid

Deprecate some APIs and add mal_src/dsp_set_sample_rate().

When dynamically adjusting the sample rate you must now set both the
input and output sample rates at the same time. This is required for
future support for specifying a ratio instead of in/out rates.
parent 2dc37764
...@@ -2214,14 +2214,24 @@ mal_channel_router_config mal_channel_router_config_init(mal_uint32 channelsIn, ...@@ -2214,14 +2214,24 @@ mal_channel_router_config mal_channel_router_config_init(mal_uint32 channelsIn,
mal_result mal_src_init(const mal_src_config* pConfig, mal_src* pSRC); mal_result mal_src_init(const mal_src_config* pConfig, mal_src* pSRC);
// Dynamically adjusts the input sample rate. // Dynamically adjusts the input sample rate.
//
// DEPRECATED. Use mal_src_set_sample_rate() instead.
mal_result mal_src_set_input_sample_rate(mal_src* pSRC, mal_uint32 sampleRateIn); mal_result mal_src_set_input_sample_rate(mal_src* pSRC, mal_uint32 sampleRateIn);
// Dynamically adjusts the output sample rate. // Dynamically adjusts the output sample rate.
// //
// This is useful for dynamically adjust pitch. Keep in mind, however, that this will speed up or slow down the sound. If this // This is useful for dynamically adjust pitch. Keep in mind, however, that this will speed up or slow down the sound. If this
// is not acceptable you will need to use your own algorithm. // is not acceptable you will need to use your own algorithm.
//
// DEPRECATED. Use mal_src_set_sample_rate() instead.
mal_result mal_src_set_output_sample_rate(mal_src* pSRC, mal_uint32 sampleRateOut); mal_result mal_src_set_output_sample_rate(mal_src* pSRC, mal_uint32 sampleRateOut);
// Dynamically adjusts the sample rate.
//
// This is useful for dynamically adjust pitch. Keep in mind, however, that this will speed up or slow down the sound. If this
// is not acceptable you will need to use your own algorithm.
mal_result mal_src_set_sample_rate(mal_src* pSRC, mal_uint32 sampleRateIn, mal_uint32 sampleRateOut);
// Reads a number of frames. // Reads a number of frames.
// //
// Returns the number of frames actually read. // Returns the number of frames actually read.
...@@ -2245,6 +2255,8 @@ mal_result mal_dsp_init(const mal_dsp_config* pConfig, mal_dsp* pDSP); ...@@ -2245,6 +2255,8 @@ mal_result mal_dsp_init(const mal_dsp_config* pConfig, mal_dsp* pDSP);
// Dynamically adjusts the input sample rate. // Dynamically adjusts the input sample rate.
// //
// This will fail is the DSP was not initialized with allowDynamicSampleRate. // This will fail is the DSP was not initialized with allowDynamicSampleRate.
//
// DEPRECATED. Use mal_dsp_set_sample_rate() instead.
mal_result mal_dsp_set_input_sample_rate(mal_dsp* pDSP, mal_uint32 sampleRateOut); mal_result mal_dsp_set_input_sample_rate(mal_dsp* pDSP, mal_uint32 sampleRateOut);
// Dynamically adjusts the output sample rate. // Dynamically adjusts the output sample rate.
...@@ -2253,8 +2265,19 @@ mal_result mal_dsp_set_input_sample_rate(mal_dsp* pDSP, mal_uint32 sampleRateOut ...@@ -2253,8 +2265,19 @@ mal_result mal_dsp_set_input_sample_rate(mal_dsp* pDSP, mal_uint32 sampleRateOut
// is not acceptable you will need to use your own algorithm. // is not acceptable you will need to use your own algorithm.
// //
// This will fail is the DSP was not initialized with allowDynamicSampleRate. // This will fail is the DSP was not initialized with allowDynamicSampleRate.
//
// DEPRECATED. Use mal_dsp_set_sample_rate() instead.
mal_result mal_dsp_set_output_sample_rate(mal_dsp* pDSP, mal_uint32 sampleRateOut); mal_result mal_dsp_set_output_sample_rate(mal_dsp* pDSP, mal_uint32 sampleRateOut);
// Dynamically adjusts the output sample rate.
//
// This is useful for dynamically adjust pitch. Keep in mind, however, that this will speed up or slow down the sound. If this
// is not acceptable you will need to use your own algorithm.
//
// This will fail is the DSP was not initialized with allowDynamicSampleRate.
mal_result mal_dsp_set_sample_rate(mal_dsp* pDSP, mal_uint32 sampleRateIn, mal_uint32 sampleRateOut);
// Reads a number of frames and runs them through the DSP processor. // Reads a number of frames and runs them through the DSP processor.
mal_uint64 mal_dsp_read(mal_dsp* pDSP, mal_uint64 frameCount, void* pFramesOut, void* pUserData); mal_uint64 mal_dsp_read(mal_dsp* pDSP, mal_uint64 frameCount, void* pFramesOut, void* pUserData);
...@@ -22555,6 +22578,23 @@ mal_result mal_src_set_output_sample_rate(mal_src* pSRC, mal_uint32 sampleRateOu ...@@ -22555,6 +22578,23 @@ mal_result mal_src_set_output_sample_rate(mal_src* pSRC, mal_uint32 sampleRateOu
return MAL_SUCCESS; return MAL_SUCCESS;
} }
mal_result mal_src_set_sample_rate(mal_src* pSRC, mal_uint32 sampleRateIn, mal_uint32 sampleRateOut)
{
if (pSRC == NULL) {
return MAL_INVALID_ARGS;
}
// Must have a sample rate of > 0.
if (sampleRateIn == 0 || sampleRateOut == 0) {
return MAL_INVALID_ARGS;
}
mal_atomic_exchange_32(&pSRC->config.sampleRateIn, sampleRateIn);
mal_atomic_exchange_32(&pSRC->config.sampleRateOut, sampleRateOut);
return MAL_SUCCESS;
}
mal_uint64 mal_src_read_deinterleaved(mal_src* pSRC, mal_uint64 frameCount, void** ppSamplesOut, void* pUserData) mal_uint64 mal_src_read_deinterleaved(mal_src* pSRC, mal_uint64 frameCount, void** ppSamplesOut, void* pUserData)
{ {
if (pSRC == NULL || frameCount == 0 || ppSamplesOut == NULL) { if (pSRC == NULL || frameCount == 0 || ppSamplesOut == NULL) {
...@@ -23712,6 +23752,28 @@ mal_result mal_dsp_set_output_sample_rate(mal_dsp* pDSP, mal_uint32 sampleRateOu ...@@ -23712,6 +23752,28 @@ mal_result mal_dsp_set_output_sample_rate(mal_dsp* pDSP, mal_uint32 sampleRateOu
return mal_dsp_refresh_sample_rate(pDSP); return mal_dsp_refresh_sample_rate(pDSP);
} }
mal_result mal_dsp_set_sample_rate(mal_dsp* pDSP, mal_uint32 sampleRateIn, mal_uint32 sampleRateOut)
{
if (pDSP == NULL) {
return MAL_INVALID_ARGS;
}
// Must have a sample rate of > 0.
if (sampleRateIn == 0 || sampleRateOut == 0) {
return MAL_INVALID_ARGS;
}
// Must have been initialized with allowDynamicSampleRate.
if (!pDSP->isDynamicSampleRateAllowed) {
return MAL_INVALID_OPERATION;
}
mal_atomic_exchange_32(&pDSP->src.config.sampleRateIn, sampleRateIn);
mal_atomic_exchange_32(&pDSP->src.config.sampleRateOut, sampleRateOut);
return mal_dsp_refresh_sample_rate(pDSP);
}
mal_uint64 mal_dsp_read(mal_dsp* pDSP, mal_uint64 frameCount, void* pFramesOut, void* pUserData) mal_uint64 mal_dsp_read(mal_dsp* pDSP, mal_uint64 frameCount, void* pFramesOut, void* pUserData)
{ {
if (pDSP == NULL || pFramesOut == NULL) return 0; if (pDSP == NULL || pFramesOut == NULL) return 0;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment