mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-24 01:04:02 +02:00
Add some brief documentation for the new filters.
This commit is contained in:
+102
-12
@@ -1029,8 +1029,11 @@ input rate and the output rate with `ma_data_converter_get_input_latency()` and
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Filtering
|
||||||
|
=========
|
||||||
|
|
||||||
Biquad Filtering
|
Biquad Filtering
|
||||||
================
|
----------------
|
||||||
Biquad filtering is achieved with the `ma_biquad` API. Example:
|
Biquad filtering is achieved with the `ma_biquad` API. Example:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
@@ -1065,12 +1068,21 @@ do a full initialization which involves clearing the registers to 0. Note that c
|
|||||||
result in an error.
|
result in an error.
|
||||||
|
|
||||||
|
|
||||||
|
Low-Pass Filtering
|
||||||
|
------------------
|
||||||
|
Low-pass filter is achieved with the following APIs:
|
||||||
|
|
||||||
Low-Pass, High-Pass and Band-Pass Filtering
|
|---------|-----------------------------------------|
|
||||||
===========================================
|
| API | Description |
|
||||||
Low-pass, high-pass and band-pass filtering is achieved with the `ma_lpf`, `ma_hpf` and `ma_bpf` APIs respectively. Low-pass filter example:
|
|---------|-----------------------------------------|
|
||||||
|
| ma_lpf1 | First order low-pass filter |
|
||||||
|
| ma_lpf2 | Second order low-pass filter |
|
||||||
|
| ma_lpf | Low-pass filter with configurable order |
|
||||||
|
|---------|-----------------------------------------|
|
||||||
|
|
||||||
```c
|
Low-pass filter example:
|
||||||
|
|
||||||
|
```c
|
||||||
ma_lpf_config config = ma_lpf_config_init(ma_format_f32, channels, sampleRate, cutoffFrequency, poles);
|
ma_lpf_config config = ma_lpf_config_init(ma_format_f32, channels, sampleRate, cutoffFrequency, poles);
|
||||||
ma_result result = ma_lpf_init(&config, &lpf);
|
ma_result result = ma_lpf_init(&config, &lpf);
|
||||||
if (result != MA_SUCCESS) {
|
if (result != MA_SUCCESS) {
|
||||||
@@ -1103,15 +1115,93 @@ 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_hpf` and `ma_bpf` APIs
|
The `ma_lpf` object supports a configurable number of poles, but if you only need a 1-pole filter you may want to consider using `ma_lpf1`. Likewise, if you
|
||||||
instead.
|
only need a 2-pole filter you can use `ma_lpf2`. The advantage of this is that they're lighter weight and a bit more efficient.
|
||||||
|
|
||||||
The `ma_lpf`, `ma_hpf` and `ma_bpf` objects support a configurable number of poles, but if you only need a 1-pole filter you may want to consider using
|
|
||||||
`ma_lpf1`, `ma_hpf1` and `ma_bpf1`. Likewise, if you only need a 2-pole filter you can use `ma_lpf2`, `ma_hpf2` and `ma_bpf2`. The advantage of this is that
|
|
||||||
they're lighter weight and a bit more efficient.
|
|
||||||
|
|
||||||
If an even number of poles are specified, a series of 2-pole filters will be processed in a chain. If an odd number of poles are specified, a series of 2-pole
|
If an even number of poles are specified, a series of 2-pole filters will be processed in a chain. If an odd number of poles are specified, a series of 2-pole
|
||||||
filters will be processed in a chain, followed by a final 1-pole filter. Note that the pole count for band-pass filters must be an even number.
|
filters will be processed in a chain, followed by a final 1-pole filter.
|
||||||
|
|
||||||
|
|
||||||
|
High-Pass Filtering
|
||||||
|
-------------------
|
||||||
|
High-pass filtering is achieved with the following APIs:
|
||||||
|
|
||||||
|
|---------|------------------------------------------|
|
||||||
|
| API | Description |
|
||||||
|
|---------|------------------------------------------|
|
||||||
|
| ma_hpf1 | First order high-pass filter |
|
||||||
|
| ma_hpf2 | Second order high-pass filter |
|
||||||
|
| ma_hpf | High-pass filter with configurable order |
|
||||||
|
|---------|------------------------------------------|
|
||||||
|
|
||||||
|
High-pass filters work exactly the same as low-pass filters, only the APIs are called `ma_hpf1`, `ma_hpf2` and `ma_hpf`. See example code for low-pass filters
|
||||||
|
for example usage.
|
||||||
|
|
||||||
|
|
||||||
|
Band-Pass Filtering
|
||||||
|
-------------------
|
||||||
|
Band-pass filtering is achieved with the following APIs:
|
||||||
|
|
||||||
|
|---------|------------------------------------------|
|
||||||
|
| API | Description |
|
||||||
|
|---------|------------------------------------------|
|
||||||
|
| ma_bpf2 | Second order band-pass filter |
|
||||||
|
| ma_bpf | Band-pass filter with configurable order |
|
||||||
|
|---------|------------------------------------------|
|
||||||
|
|
||||||
|
Band-pass filters work exactly the same as low-pass filters, only the APIs are called `ma_bpf2` and `ma_hpf`. See example code for low-pass filters for example
|
||||||
|
usage. Note that the order for band-pass filters must be an even number which means there is no first order band-pass filter, unlike low-pass and high-pass
|
||||||
|
filters.
|
||||||
|
|
||||||
|
|
||||||
|
Notch Filtering
|
||||||
|
---------------
|
||||||
|
Notch filtering is achieved with the following APIs:
|
||||||
|
|
||||||
|
|-----------|------------------------------------------|
|
||||||
|
| API | Description |
|
||||||
|
|-----------|------------------------------------------|
|
||||||
|
| ma_notch2 | Second order notching filter |
|
||||||
|
|-----------|------------------------------------------|
|
||||||
|
|
||||||
|
|
||||||
|
Peaking EQ Filtering
|
||||||
|
--------------------
|
||||||
|
Peaking filtering is achieved with the following APIs:
|
||||||
|
|
||||||
|
|----------|------------------------------------------|
|
||||||
|
| API | Description |
|
||||||
|
|----------|------------------------------------------|
|
||||||
|
| ma_peak2 | Second order peaking filter |
|
||||||
|
|----------|------------------------------------------|
|
||||||
|
|
||||||
|
|
||||||
|
Low Shelf Filtering
|
||||||
|
-------------------
|
||||||
|
Low shelf filtering is achieved with the following APIs:
|
||||||
|
|
||||||
|
|-------------|------------------------------------------|
|
||||||
|
| API | Description |
|
||||||
|
|-------------|------------------------------------------|
|
||||||
|
| ma_loshelf2 | Second order low shelf filter |
|
||||||
|
|-------------|------------------------------------------|
|
||||||
|
|
||||||
|
Where a high-pass filter is used to eliminate lower frequencies, a low shelf filter can be used to just turn them down rather than eliminate them entirely.
|
||||||
|
|
||||||
|
|
||||||
|
High Shelf Filtering
|
||||||
|
--------------------
|
||||||
|
High shelf filtering is achieved with the following APIs:
|
||||||
|
|
||||||
|
|-------------|------------------------------------------|
|
||||||
|
| API | Description |
|
||||||
|
|-------------|------------------------------------------|
|
||||||
|
| ma_hishelf2 | Second order high shelf filter |
|
||||||
|
|-------------|------------------------------------------|
|
||||||
|
|
||||||
|
The high shelf filter has the same API as the low shelf filter, only you would use `ma_hishelf` instead of `ma_loshelf`. Where a low shelf filter is used to
|
||||||
|
adjust the volume of low frequencies, the high pass filter does the same thing for high frequencies.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user