From 842a87a120f532aaef2ece8e525c0d1facc2ae6a Mon Sep 17 00:00:00 2001 From: KubaPro010 Date: Mon, 16 Jun 2025 10:57:36 +0200 Subject: [PATCH] clean up a bit --- .vscode/settings.json | 4 ++- dsp/bs412.c | 12 +-------- io/audio.c | 12 ++------- io/audio.h | 6 ++--- src/chimer95.c | 2 +- src/dcf95.c | 3 +-- src/fm95.c | 59 ++++++++++++++++++++----------------------- src/vban95.c | 8 ++---- 8 files changed, 39 insertions(+), 67 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 7afaac6..006e659 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -33,7 +33,9 @@ "string_view": "c", "version.h": "c", "cdecl.h": "c", - "algorithm": "c" + "algorithm": "c", + "socket.h": "c", + "time.h": "c" }, "C_Cpp.errorSquiggles": "disabled" } \ No newline at end of file diff --git a/dsp/bs412.c b/dsp/bs412.c index d8f8403..1dd103e 100644 --- a/dsp/bs412.c +++ b/dsp/bs412.c @@ -1,7 +1,5 @@ #include "bs412.h" -#define BS412_RMS - #define LOG2_19000 log2f(19000.0f) inline float dbr_to_deviation(float dbr) { @@ -23,19 +21,11 @@ void init_modulation_power_measure(MPXPowerMeasurement* mpx, int sample_rate) { } float measure_mpx(MPXPowerMeasurement* mpx, float deviation) { -#ifdef BS412_RMS mpx->sample += deviation * deviation; // rmS -#else - mpx->sample += fabsf(deviation); -#endif mpx->sample_counter++; float inv_counter = 1.0f / mpx->sample_counter; -#ifdef BS412_RMS float avg_deviation = sqrtf(mpx->sample * inv_counter); // RMs -#else - float avg_deviation = mpx->sample * inv_counter; -#endif float modulation_power = deviation_to_dbr(avg_deviation); #ifdef BS412_DEBUG @@ -48,7 +38,7 @@ float measure_mpx(MPXPowerMeasurement* mpx, float deviation) { #ifdef BS412_DEBUG debug_printf("Resetting MPX power measurement\n"); #endif - mpx->sample = deviation * deviation; + mpx->sample = avg_deviation * avg_deviation; mpx->sample_counter = 1; } diff --git a/io/audio.c b/io/audio.c index 63f2f07..812a625 100644 --- a/io/audio.c +++ b/io/audio.c @@ -1,6 +1,6 @@ #include "audio.h" -int init_PulseInputDevicef(PulseInputDevice* dev, int sample_rate, int channels, char* app_name, char *stream_name, char* device, pa_buffer_attr* buffer_attr, enum pa_sample_format format) { +int init_PulseInputDevice(PulseInputDevice* dev, int sample_rate, int channels, char* app_name, char *stream_name, char* device, pa_buffer_attr* buffer_attr, enum pa_sample_format format) { #ifdef PULSE_DEBUG debug_printf("Initializing PulseInputDevice format with app_name: %s, stream_name: %s, device: %s, sample_rate: %d, channels: %d, format: %d\n", app_name, stream_name, device, sample_rate, channels, format); #endif @@ -22,10 +22,6 @@ int init_PulseInputDevicef(PulseInputDevice* dev, int sample_rate, int channels, return 0; } -int init_PulseInputDevice(PulseInputDevice* dev, int sample_rate, int channels, char* app_name, char *stream_name, char* device, pa_buffer_attr* buffer_attr) { - return init_PulseInputDevicef(dev, sample_rate, channels, app_name, stream_name, device, buffer_attr, PA_SAMPLE_FLOAT32NE); -} - int read_PulseInputDevice(PulseInputDevice* dev, void* buffer, size_t size) { if (!dev->initialized) return -1; int error = 0; @@ -52,7 +48,7 @@ void free_PulseInputDevice(PulseInputDevice* dev) { dev->initialized = 0; } -int init_PulseOutputDevicef(PulseOutputDevice* dev, int sample_rate, int channels, char* app_name, char *stream_name, char* device, pa_buffer_attr* buffer_attr, enum pa_sample_format format) { +int init_PulseOutputDevice(PulseOutputDevice* dev, int sample_rate, int channels, char* app_name, char *stream_name, char* device, pa_buffer_attr* buffer_attr, enum pa_sample_format format) { #ifdef PULSE_DEBUG debug_printf("Initializing PulseOutputDevice format with app_name: %s, stream_name: %s, device: %s, sample_rate: %d, channels: %d, format: %d\n", app_name, stream_name, device, sample_rate, channels, format); #endif @@ -88,10 +84,6 @@ int init_PulseOutputDevicef(PulseOutputDevice* dev, int sample_rate, int channel return 0; } -int init_PulseOutputDevice(PulseOutputDevice* dev, int sample_rate, int channels, char* app_name, char *stream_name, char* device, pa_buffer_attr* buffer_attr) { - return init_PulseOutputDevicef(dev, sample_rate, channels, app_name, stream_name, device, buffer_attr, PA_SAMPLE_FLOAT32NE); -} - int write_PulseOutputDevice(PulseOutputDevice* dev, void* buffer, size_t size) { if (!dev->initialized) return -1; int error = 0; diff --git a/io/audio.h b/io/audio.h index 0ec1bfb..e3901b3 100644 --- a/io/audio.h +++ b/io/audio.h @@ -24,13 +24,11 @@ typedef struct } PulseDevice; typedef PulseDevice PulseInputDevice; -int init_PulseInputDevicef(PulseInputDevice *dev, int sample_rate, int channels, char *app_name, char *stream_name, char *device, pa_buffer_attr *buffer_attr, pa_sample_format_t format); -int init_PulseInputDevice(PulseInputDevice *dev, int sample_rate, int channels, char *app_name, char *stream_name, char *device, pa_buffer_attr *buffer_attr); +int init_PulseInputDevice(PulseInputDevice *dev, int sample_rate, int channels, char *app_name, char *stream_name, char *device, pa_buffer_attr *buffer_attr, pa_sample_format_t format); int read_PulseInputDevice(PulseInputDevice *dev, void *buffer, size_t size); void free_PulseInputDevice(PulseInputDevice *dev); typedef PulseDevice PulseOutputDevice; -int init_PulseOutputDevicef(PulseOutputDevice *dev, int sample_rate, int channels, char *app_name, char *stream_name, char *device, pa_buffer_attr *buffer_attr, pa_sample_format_t format); -int init_PulseOutputDevice(PulseOutputDevice *dev, int sample_rate, int channels, char *app_name, char *stream_name, char *device, pa_buffer_attr *buffer_attr); +int init_PulseOutputDevice(PulseOutputDevice *dev, int sample_rate, int channels, char *app_name, char *stream_name, char *device, pa_buffer_attr *buffer_attr, pa_sample_format_t format); int write_PulseOutputDevice(PulseOutputDevice *dev, void *buffer, size_t size); void free_PulseOutputDevice(PulseOutputDevice *dev); \ No newline at end of file diff --git a/src/chimer95.c b/src/chimer95.c index 7c06334..8bb3a02 100644 --- a/src/chimer95.c +++ b/src/chimer95.c @@ -243,7 +243,7 @@ int main(int argc, char **argv) { printf("Connecting to output device... (%s)\n", audio_output_device); - pulse_error = init_PulseOutputDevice(&output_device, sample_rate, 1, "chimer95", "Main Audio Output", audio_output_device, &output_buffer_atr); + pulse_error = init_PulseOutputDevice(&output_device, sample_rate, 1, "chimer95", "Main Audio Output", audio_output_device, &output_buffer_atr, PA_SAMPLE_FLOAT32NE); if (pulse_error) { fprintf(stderr, "Error: cannot open output device: %s\n", pa_strerror(pulse_error)); return 1; diff --git a/src/dcf95.c b/src/dcf95.c index 11239f3..dd9d19a 100644 --- a/src/dcf95.c +++ b/src/dcf95.c @@ -1,5 +1,4 @@ #include -#include #include #include #include @@ -281,7 +280,7 @@ int main(int argc, char **argv) { printf("Connecting to output device... (%s)\n", audio_output_device); - opentime_pulse_error = init_PulseOutputDevice(&output_device, sample_rate, 1, "dcf95", "Main Audio Output", audio_output_device, &output_buffer_atr); + opentime_pulse_error = init_PulseOutputDevice(&output_device, sample_rate, 1, "dcf95", "Main Audio Output", audio_output_device, &output_buffer_atr, PA_SAMPLE_FLOAT32NE); if (opentime_pulse_error) { fprintf(stderr, "Error: cannot open output device: %s\n", pa_strerror(opentime_pulse_error)); return 1; diff --git a/src/fm95.c b/src/fm95.c index 471f6ff..94f4a0b 100644 --- a/src/fm95.c +++ b/src/fm95.c @@ -1,5 +1,3 @@ -#include -#include #include #include @@ -15,7 +13,7 @@ #define DEFAULT_SCA_FREQUENCY 67000.0f #define DEFAULT_SCA_DEVIATION 7000.0f #define DEFAULT_SCA_CLIPPER_THRESHOLD 1.0f -#define DEFAULT_PREEMPHASIS_TAU 50e-6 // Europe, the freedomers use 75µs +#define DEFAULT_PREEMPHASIS_TAU 50e-6 // Europe, the freedomers use 75µs (75e-6) #define DEFAULT_MPX_POWER 3.0f // dbr, this is for BS412, simplest bs412 #define DEFAULT_MPX_DEVIATION 75000.0f // for BS412 #define DEFAULT_DEVIATION 75000.0f // another way to set the volume @@ -36,7 +34,7 @@ #define MPX_DEVICE "FM_MPX.monitor" #define SCA_DEVICE "\0" // Disabled -#define BUFFER_SIZE 2048 // Make sure that this is divisible by two +#define BUFFER_SIZE 2048 #include "../io/audio.h" @@ -113,9 +111,7 @@ void show_help(char *name) { int main(int argc, char **argv) { printf("fm95 (an FM Processor by radio95) version 1.7\n"); - PulseInputDevice mpx_device, rds_device, rds2_device, sca_device; - - PulseInputDevice input_device; + PulseInputDevice input_device, mpx_device, rds_device, rds2_device, sca_device; PulseOutputDevice output_device; float clipper_threshold = DEFAULT_CLIPPER_THRESHOLD; @@ -126,12 +122,12 @@ int main(int argc, char **argv) { float sca_deviation = DEFAULT_SCA_DEVIATION; float sca_clipper_threshold = DEFAULT_SCA_CLIPPER_THRESHOLD; - char audio_input_device[64] = INPUT_DEVICE; - char audio_output_device[64] = OUTPUT_DEVICE; - char audio_mpx_device[64] = MPX_DEVICE; - char audio_rds_device[64] = RDS_DEVICE; - char audio_rds2_device[64] = RDS2_DEVICE; - char audio_sca_device[64] = SCA_DEVICE; + char audio_input_device[48] = INPUT_DEVICE; + char audio_output_device[48] = OUTPUT_DEVICE; + char audio_mpx_device[48] = MPX_DEVICE; + char audio_rds_device[48] = RDS_DEVICE; + char audio_rds2_device[48] = RDS2_DEVICE; + char audio_sca_device[48] = SCA_DEVICE; float preemphasis_tau = DEFAULT_PREEMPHASIS_TAU; uint8_t calibration_mode = 0; @@ -177,22 +173,22 @@ int main(int argc, char **argv) { else stereo = 1; break; case 'i': // Input Device - memcpy(audio_input_device, optarg, 63); + memcpy(audio_input_device, optarg, 47); break; case 'o': // Output Device - memcpy(audio_output_device, optarg, 63); + memcpy(audio_output_device, optarg, 47); break;; case 'M': //MPX in - memcpy(audio_mpx_device, optarg, 63); + memcpy(audio_mpx_device, optarg, 47); break; case 'r': // RDS in - memcpy(audio_rds_device, optarg, 63); + memcpy(audio_rds_device, optarg, 47); break; case 'R': // RDS2 in - memcpy(audio_rds2_device, optarg, 63); + memcpy(audio_rds2_device, optarg, 47); break; case 'S': //SCA in - memcpy(audio_sca_device, optarg, 63); + memcpy(audio_sca_device, optarg, 47); break; case 'f': //SCA freq sca_frequency = strtof(optarg, NULL); @@ -260,7 +256,7 @@ int main(int argc, char **argv) { int opentime_pulse_error; printf("Connecting to input device... (%s)\n", audio_input_device); - opentime_pulse_error = init_PulseInputDevice(&input_device, sample_rate, 2, "fm95", "Main Audio Input", audio_input_device, &input_buffer_atr); + opentime_pulse_error = init_PulseInputDevice(&input_device, sample_rate, 2, "fm95", "Main Audio Input", audio_input_device, &input_buffer_atr, PA_SAMPLE_FLOAT32NE); if (opentime_pulse_error) { fprintf(stderr, "Error: cannot open input device: %s\n", pa_strerror(opentime_pulse_error)); return 1; @@ -269,7 +265,7 @@ int main(int argc, char **argv) { if(mpx_on) { printf("Connecting to MPX device... (%s)\n", audio_mpx_device); - opentime_pulse_error = init_PulseInputDevice(&mpx_device, sample_rate, 1, "fm95", "MPX Input", audio_mpx_device, &input_buffer_atr); + opentime_pulse_error = init_PulseInputDevice(&mpx_device, sample_rate, 1, "fm95", "MPX Input", audio_mpx_device, &input_buffer_atr, PA_SAMPLE_FLOAT32NE); if (opentime_pulse_error) { fprintf(stderr, "Error: cannot open MPX device: %s\n", pa_strerror(opentime_pulse_error)); free_PulseInputDevice(&input_device); @@ -279,7 +275,7 @@ int main(int argc, char **argv) { if(rds_on) { printf("Connecting to RDS95 device... (%s)\n", audio_rds_device); - opentime_pulse_error = init_PulseInputDevice(&rds_device, sample_rate, 2, "fm95", "RDS95 Input", audio_rds_device, &input_buffer_atr); + opentime_pulse_error = init_PulseInputDevice(&rds_device, sample_rate, 2, "fm95", "RDS95 Input", audio_rds_device, &input_buffer_atr, PA_SAMPLE_FLOAT32NE); if (opentime_pulse_error) { fprintf(stderr, "Error: cannot open RDS device: %s\n", pa_strerror(opentime_pulse_error)); free_PulseInputDevice(&input_device); @@ -290,7 +286,7 @@ int main(int argc, char **argv) { if(rds2_on) { printf("Connecting to RDS2 device... (%s)\n", audio_rds2_device); - opentime_pulse_error = init_PulseInputDevice(&rds2_device, sample_rate, 1, "fm95", "RDS2 Input", audio_rds2_device, &input_buffer_atr); + opentime_pulse_error = init_PulseInputDevice(&rds2_device, sample_rate, 1, "fm95", "RDS2 Input", audio_rds2_device, &input_buffer_atr, PA_SAMPLE_FLOAT32NE); if (opentime_pulse_error) { fprintf(stderr, "Error: cannot open RDS2 device: %s\n", pa_strerror(opentime_pulse_error)); free_PulseInputDevice(&input_device); @@ -303,7 +299,7 @@ int main(int argc, char **argv) { if(sca_on) { printf("Connecting to SCA device... (%s)\n", audio_sca_device); - opentime_pulse_error = init_PulseInputDevice(&sca_device, sample_rate, 1, "fm95", "SCA Input", audio_sca_device, &input_buffer_atr); + opentime_pulse_error = init_PulseInputDevice(&sca_device, sample_rate, 1, "fm95", "SCA Input", audio_sca_device, &input_buffer_atr, PA_SAMPLE_FLOAT32NE); if (opentime_pulse_error) { fprintf(stderr, "Error: cannot open SCA device: %s\n", pa_strerror(opentime_pulse_error)); free_PulseInputDevice(&input_device); @@ -316,7 +312,7 @@ int main(int argc, char **argv) { printf("Connecting to output device... (%s)\n", audio_output_device); - opentime_pulse_error = init_PulseOutputDevice(&output_device, sample_rate, 1, "fm95", "Main Audio Output", audio_output_device, &output_buffer_atr); + opentime_pulse_error = init_PulseOutputDevice(&output_device, sample_rate, 1, "fm95", "Main Audio Output", audio_output_device, &output_buffer_atr, PA_SAMPLE_FLOAT32NE); if (opentime_pulse_error) { fprintf(stderr, "Error: cannot open output device: %s\n", pa_strerror(opentime_pulse_error)); free_PulseInputDevice(&input_device); @@ -344,7 +340,8 @@ int main(int argc, char **argv) { output[i] = sample*master_volume; } if((pulse_error = write_PulseOutputDevice(&output_device, output, sizeof(output)))) { // get output from the function and assign it into pulse_error, this comment to avoid confusion - fprintf(stderr, "Error writing to output device: %s\n", pa_strerror(pulse_error)); + if(pulse_error == -1) fprintf(stderr, "Main PulseOutputDevice reported as uninitialized."); + else fprintf(stderr, "Error writing to output device: %s\n", pa_strerror(pulse_error)); to_run = 0; break; } @@ -360,23 +357,21 @@ int main(int argc, char **argv) { } Oscillator osc; - init_oscillator(&osc, polar_stereo ? 3906.25 : 4750, sample_rate); // 3906.25 * 8 = 31250.0, this is to reduce branching + init_oscillator(&osc, polar_stereo ? 3906.25 : 4750, sample_rate); // 3906.25 * 8 = 31250.0, this is to reduce branching later on FMModulator sca_mod; init_fm_modulator(&sca_mod, sca_frequency, sca_deviation, sample_rate); - iirfilt_rrrf lpf_l, lpf_r; + iirfilt_rrrf lpf_l, lpf_r, mpx_lpf; lpf_l = iirfilt_rrrf_create_prototype(LIQUID_IIRDES_CHEBY2, LIQUID_IIRDES_LOWPASS, LIQUID_IIRDES_SOS, LPF_ORDER, (15000.0f/sample_rate), 0.0f, 1.0f, 40.0f); lpf_r = iirfilt_rrrf_create_prototype(LIQUID_IIRDES_CHEBY2, LIQUID_IIRDES_LOWPASS, LIQUID_IIRDES_SOS, LPF_ORDER, (15000.0f/sample_rate), 0.0f, 1.0f, 40.0f); - - iirfilt_rrrf mpx_lpf = iirfilt_rrrf_create_prototype(LIQUID_IIRDES_BUTTER, LIQUID_IIRDES_LOWPASS, LIQUID_IIRDES_SOS, 1, (polar_stereo ? (46250.0f/sample_rate) : (53000.0f/sample_rate)), 0.0f, 1.0f, 1.0f); + mpx_lpf = iirfilt_rrrf_create_prototype(LIQUID_IIRDES_BUTTER, LIQUID_IIRDES_LOWPASS, LIQUID_IIRDES_SOS, 1, (polar_stereo ? (46250.0f/sample_rate) : (53000.0f/sample_rate)), 0.0f, 1.0f, 1.0f); ResistorCapacitor preemp_l, preemp_r; init_preemphasis(&preemp_l, preemphasis_tau, sample_rate, 15250.0f); init_preemphasis(&preemp_r, preemphasis_tau, sample_rate, 15250.0f); - MPXPowerMeasurement power; - MPXPowerMeasurement mpx_only_power; + MPXPowerMeasurement power, mpx_only_power; init_modulation_power_measure(&power, sample_rate); init_modulation_power_measure(&mpx_only_power, sample_rate); diff --git a/src/vban95.c b/src/vban95.c index 1811e2f..d953fa1 100644 --- a/src/vban95.c +++ b/src/vban95.c @@ -1,10 +1,6 @@ -#include -#include #include #include #include -#include -#include #include #include #include @@ -20,7 +16,7 @@ #define BUF_SIZE 1500 #define MAX_AUDIO_DATA_SIZE (BUF_SIZE - sizeof(VBANHeader)) -#define MAX_BUFFER_PACKETS 16 +#define MAX_BUFFER_PACKETS 24 #define POLL_TIMEOUT_MS 75 @@ -391,7 +387,7 @@ int main(int argc, char *argv[]) { if (output.initialized) free_PulseOutputDevice(&output); - int result = init_PulseOutputDevicef( // the f suffix is to specify the format, because without f it defaults to float + int result = init_PulseOutputDevice( &output, VBAN_SRList[vban_last_sr], vban_last_channels + 1, // Add 1 because VBAN channels are 0-based