mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-24 09:14:04 +02:00
Rename ma_bpf to ma_bpf2.
This commit is contained in:
+20
-20
@@ -129,8 +129,8 @@ pipeline. Both formats use transposed direct form 2.
|
|||||||
Low-Pass, High-Pass and Band-Pass Filters
|
Low-Pass, High-Pass and Band-Pass Filters
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
APIs for low-pass, high-pass and band-pass filtering has been added. By themselves they are second order filters, but can be extended to higher orders by
|
APIs for low-pass, high-pass and band-pass filtering has been added. By themselves they are second order filters, but can be extended to higher orders by
|
||||||
chaining them together. Low-pass, high-pass and band-pass filtering is achieved via the `ma_lpf2`, `ma_hpf2` and `ma_bpf` APIs respectively. Since these filters
|
chaining them together. Low-pass, high-pass and band-pass filtering is achieved via the `ma_lpf2`, `ma_hpf2` and `ma_bpf2` APIs respectively. Since these
|
||||||
are just biquad filters, they support both 32-bit floating point and 16-bit signed integer formats.
|
filters are just biquad filters, they support both 32-bit floating point and 16-bit signed integer formats.
|
||||||
|
|
||||||
|
|
||||||
Sine, Square, Triangle and Sawtooth Waveforms
|
Sine, Square, Triangle and Sawtooth Waveforms
|
||||||
@@ -1000,7 +1000,7 @@ and will result in an error.
|
|||||||
|
|
||||||
Low-Pass, High-Pass and Band-Pass Filtering
|
Low-Pass, High-Pass and Band-Pass Filtering
|
||||||
===========================================
|
===========================================
|
||||||
Low-pass, high-pass and band-pass filtering is achieved with the `ma_lpf2`, `ma_hpf2` and `ma_bpf` APIs respective. Low-pass filter example:
|
Low-pass, high-pass and band-pass filtering is achieved with the `ma_lpf2`, `ma_hpf2` and `ma_bpf2` APIs respective. Low-pass filter example:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
ma_lpf2_config config = ma_lpf2_config_init(ma_format_f32, channels, sampleRate, cutoffFrequency);
|
ma_lpf2_config config = ma_lpf2_config_init(ma_format_f32, channels, sampleRate, cutoffFrequency);
|
||||||
@@ -1035,7 +1035,7 @@ If you need to change the configuration of the filter, but need to maintain the
|
|||||||
useful if you need to change the sample rate and/or cutoff frequency dynamically while maintaing smooth transitions. Note that changing the format or channel
|
useful if you need to change the sample rate and/or cutoff frequency dynamically while maintaing smooth transitions. Note that changing the format or channel
|
||||||
count after initialization is invalid and will result in an error.
|
count after initialization is invalid and will result in an error.
|
||||||
|
|
||||||
The example code above is for low-pass filters, but the same applies for high-pass and band-pass filters, only you should use the `ma_hpf2` and `ma_bpf` APIs
|
The example code above is for low-pass filters, but the same applies for high-pass and band-pass filters, only you should use the `ma_hpf2` and `ma_bpf2` APIs
|
||||||
instead.
|
instead.
|
||||||
|
|
||||||
|
|
||||||
@@ -1728,19 +1728,19 @@ typedef struct
|
|||||||
ma_uint32 channels;
|
ma_uint32 channels;
|
||||||
ma_uint32 sampleRate;
|
ma_uint32 sampleRate;
|
||||||
double cutoffFrequency;
|
double cutoffFrequency;
|
||||||
} ma_bpf_config;
|
} ma_bpf2_config;
|
||||||
|
|
||||||
ma_bpf_config ma_bpf_config_init(ma_format format, ma_uint32 channels, ma_uint32 sampleRate, double cutoffFrequency);
|
ma_bpf2_config ma_bpf2_config_init(ma_format format, ma_uint32 channels, ma_uint32 sampleRate, double cutoffFrequency);
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
ma_biquad bq; /* The 2-pole band-pass filter is implemented as a biquad filter. */
|
ma_biquad bq; /* The 2-pole band-pass filter is implemented as a biquad filter. */
|
||||||
} ma_bpf;
|
} ma_bpf2;
|
||||||
|
|
||||||
ma_result ma_bpf_init(const ma_bpf_config* pConfig, ma_bpf* pBPF);
|
ma_result ma_bpf2_init(const ma_bpf2_config* pConfig, ma_bpf2* pBPF);
|
||||||
ma_result ma_bpf_reinit(const ma_bpf_config* pConfig, ma_bpf* pBPF);
|
ma_result ma_bpf2_reinit(const ma_bpf2_config* pConfig, ma_bpf2* pBPF);
|
||||||
ma_result ma_bpf_process_pcm_frames(ma_bpf* pBPF, void* pFramesOut, const void* pFramesIn, ma_uint64 frameCount);
|
ma_result ma_bpf2_process_pcm_frames(ma_bpf2* pBPF, void* pFramesOut, const void* pFramesIn, ma_uint64 frameCount);
|
||||||
ma_uint32 ma_bpf_get_latency(ma_bpf* pBPF);
|
ma_uint32 ma_bpf2_get_latency(ma_bpf2* pBPF);
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************************************************************************************************
|
/************************************************************************************************************************************************************
|
||||||
@@ -29706,9 +29706,9 @@ ma_uint32 ma_hpf2_get_latency(ma_hpf2* pHPF)
|
|||||||
Band-Pass Filtering
|
Band-Pass Filtering
|
||||||
|
|
||||||
**************************************************************************************************************************************************************/
|
**************************************************************************************************************************************************************/
|
||||||
ma_bpf_config ma_bpf_config_init(ma_format format, ma_uint32 channels, ma_uint32 sampleRate, double cutoffFrequency)
|
ma_bpf2_config ma_bpf2_config_init(ma_format format, ma_uint32 channels, ma_uint32 sampleRate, double cutoffFrequency)
|
||||||
{
|
{
|
||||||
ma_bpf_config config;
|
ma_bpf2_config config;
|
||||||
|
|
||||||
MA_ZERO_OBJECT(&config);
|
MA_ZERO_OBJECT(&config);
|
||||||
config.format = format;
|
config.format = format;
|
||||||
@@ -29720,7 +29720,7 @@ ma_bpf_config ma_bpf_config_init(ma_format format, ma_uint32 channels, ma_uint32
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static MA_INLINE ma_biquad_config ma_bpf__get_biquad_config(const ma_bpf_config* pConfig)
|
static MA_INLINE ma_biquad_config ma_bpf2__get_biquad_config(const ma_bpf2_config* pConfig)
|
||||||
{
|
{
|
||||||
ma_biquad_config bqConfig;
|
ma_biquad_config bqConfig;
|
||||||
double q;
|
double q;
|
||||||
@@ -29750,7 +29750,7 @@ static MA_INLINE ma_biquad_config ma_bpf__get_biquad_config(const ma_bpf_config*
|
|||||||
return bqConfig;
|
return bqConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
ma_result ma_bpf_init(const ma_bpf_config* pConfig, ma_bpf* pBPF)
|
ma_result ma_bpf2_init(const ma_bpf2_config* pConfig, ma_bpf2* pBPF)
|
||||||
{
|
{
|
||||||
ma_result result;
|
ma_result result;
|
||||||
ma_biquad_config bqConfig;
|
ma_biquad_config bqConfig;
|
||||||
@@ -29765,7 +29765,7 @@ ma_result ma_bpf_init(const ma_bpf_config* pConfig, ma_bpf* pBPF)
|
|||||||
return MA_INVALID_ARGS;
|
return MA_INVALID_ARGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
bqConfig = ma_bpf__get_biquad_config(pConfig);
|
bqConfig = ma_bpf2__get_biquad_config(pConfig);
|
||||||
result = ma_biquad_init(&bqConfig, &pBPF->bq);
|
result = ma_biquad_init(&bqConfig, &pBPF->bq);
|
||||||
if (result != MA_SUCCESS) {
|
if (result != MA_SUCCESS) {
|
||||||
return result;
|
return result;
|
||||||
@@ -29774,7 +29774,7 @@ ma_result ma_bpf_init(const ma_bpf_config* pConfig, ma_bpf* pBPF)
|
|||||||
return MA_SUCCESS;
|
return MA_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
ma_result ma_bpf_reinit(const ma_bpf_config* pConfig, ma_bpf* pBPF)
|
ma_result ma_bpf2_reinit(const ma_bpf2_config* pConfig, ma_bpf2* pBPF)
|
||||||
{
|
{
|
||||||
ma_result result;
|
ma_result result;
|
||||||
ma_biquad_config bqConfig;
|
ma_biquad_config bqConfig;
|
||||||
@@ -29783,7 +29783,7 @@ ma_result ma_bpf_reinit(const ma_bpf_config* pConfig, ma_bpf* pBPF)
|
|||||||
return MA_INVALID_ARGS;
|
return MA_INVALID_ARGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
bqConfig = ma_bpf__get_biquad_config(pConfig);
|
bqConfig = ma_bpf2__get_biquad_config(pConfig);
|
||||||
result = ma_biquad_reinit(&bqConfig, &pBPF->bq);
|
result = ma_biquad_reinit(&bqConfig, &pBPF->bq);
|
||||||
if (result != MA_SUCCESS) {
|
if (result != MA_SUCCESS) {
|
||||||
return result;
|
return result;
|
||||||
@@ -29792,7 +29792,7 @@ ma_result ma_bpf_reinit(const ma_bpf_config* pConfig, ma_bpf* pBPF)
|
|||||||
return MA_SUCCESS;
|
return MA_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
ma_result ma_bpf_process_pcm_frames(ma_bpf* pBPF, void* pFramesOut, const void* pFramesIn, ma_uint64 frameCount)
|
ma_result ma_bpf2_process_pcm_frames(ma_bpf2* pBPF, void* pFramesOut, const void* pFramesIn, ma_uint64 frameCount)
|
||||||
{
|
{
|
||||||
if (pBPF == NULL) {
|
if (pBPF == NULL) {
|
||||||
return MA_INVALID_ARGS;
|
return MA_INVALID_ARGS;
|
||||||
@@ -29801,7 +29801,7 @@ ma_result ma_bpf_process_pcm_frames(ma_bpf* pBPF, void* pFramesOut, const void*
|
|||||||
return ma_biquad_process_pcm_frames(&pBPF->bq, pFramesOut, pFramesIn, frameCount);
|
return ma_biquad_process_pcm_frames(&pBPF->bq, pFramesOut, pFramesIn, frameCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
ma_uint32 ma_bpf_get_latency(ma_bpf* pBPF)
|
ma_uint32 ma_bpf2_get_latency(ma_bpf2* pBPF)
|
||||||
{
|
{
|
||||||
if (pBPF == NULL) {
|
if (pBPF == NULL) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ ma_result test_bpf__f32(const char* pInputFilePath)
|
|||||||
ma_decoder decoder;
|
ma_decoder decoder;
|
||||||
drwav_data_format wavFormat;
|
drwav_data_format wavFormat;
|
||||||
drwav wav;
|
drwav wav;
|
||||||
ma_bpf_config bpfConfig;
|
ma_bpf2_config bpfConfig;
|
||||||
ma_bpf bpf;
|
ma_bpf2 bpf;
|
||||||
|
|
||||||
decoderConfig = ma_decoder_config_init(ma_format_f32, 0, 0);
|
decoderConfig = ma_decoder_config_init(ma_format_f32, 0, 0);
|
||||||
result = ma_decoder_init_file(pInputFilePath, &decoderConfig, &decoder);
|
result = ma_decoder_init_file(pInputFilePath, &decoderConfig, &decoder);
|
||||||
@@ -16,8 +16,8 @@ ma_result test_bpf__f32(const char* pInputFilePath)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bpfConfig = ma_bpf_config_init(decoder.outputFormat, decoder.outputChannels, decoder.outputSampleRate, 2000);
|
bpfConfig = ma_bpf2_config_init(decoder.outputFormat, decoder.outputChannels, decoder.outputSampleRate, 2000);
|
||||||
result = ma_bpf_init(&bpfConfig, &bpf);
|
result = ma_bpf2_init(&bpfConfig, &bpf);
|
||||||
if (result != MA_SUCCESS) {
|
if (result != MA_SUCCESS) {
|
||||||
ma_decoder_uninit(&decoder);
|
ma_decoder_uninit(&decoder);
|
||||||
return result;
|
return result;
|
||||||
@@ -41,7 +41,7 @@ ma_result test_bpf__f32(const char* pInputFilePath)
|
|||||||
framesJustRead = ma_decoder_read_pcm_frames(&decoder, tempIn, framesToRead);
|
framesJustRead = ma_decoder_read_pcm_frames(&decoder, tempIn, framesToRead);
|
||||||
|
|
||||||
/* Filter */
|
/* Filter */
|
||||||
ma_bpf_process_pcm_frames(&bpf, tempOut, tempIn, framesJustRead);
|
ma_bpf2_process_pcm_frames(&bpf, tempOut, tempIn, framesJustRead);
|
||||||
|
|
||||||
/* Write to the WAV file. */
|
/* Write to the WAV file. */
|
||||||
drwav_write_pcm_frames(&wav, framesJustRead, tempOut);
|
drwav_write_pcm_frames(&wav, framesJustRead, tempOut);
|
||||||
|
|||||||
Reference in New Issue
Block a user