What is 4EV Software?

A trademark of 4EV Dirk Jan Buter, a company in formation. 4EV Software makes software for your ears and eyes, like audio or video software, tools and more. For example, we make software tools for radio and TV broadcasting.

Who is Dirk Jan Buter?

The founder of 4EV Dirk Jan Buter is a born entrepreneur, software developer and writer. He is a dyslexic thinker because he has this unique way of thinking. Strong problem solving ability, great imagination, creative and great thinker. He has many years of experience in software design and development and in entrepreneurship. He is your best partner in the world if you need a software solution for a/v applications.

Radio Booster

Radio Booster is a tool to increase the audio volume to the maximum if the sound is occasional too soft. For example, if the radio DJ is too far from the microphone or speaks too softly, this tool makes the DJ understandable. The same goes for music, some music is recorded at a different volume than other music. That is very annoying for the listener, because he has to adjust the volume per song. This tool does that automatically.

This application works together with Liquidsoap, an audio/ video streaming tool for broadcasters, but also available as standalone. The standalone version is used for post possessing of recordings.

radio_booster.c example (16 bits samples only)

// radio_booster.c
// Author: Dirk Jan Buter;
// Date: 01-09-2022;
// Copyright: (c) Dirk Jan Buter;
// License: Free for personal and non-profit use; 
// Note: Please send me the changes if you make them.

#define STP_SEC	0.005 // Decrease boost steps per second
#define BST_MIN	0.25 // Boost minimal, no low sounds (value between 0.0-1.0)
#define BST_INIT	0.75 // Boost initial start value (value between 0.0-1.0)

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdint.h>

// Data header
typedef struct WAVEHEADER {
	uint8_t chunkID[4];
	uint32_t chunkSize;
	uint8_t format[4];
	uint8_t subchunk1ID[4];
	uint32_t subchunk1Size;
	uint16_t audioFormat;
	uint16_t numChannels;
	uint32_t sampleRate;
	uint32_t byteRate;
	uint16_t blockAlign;
	uint16_t bitsPerSample;
	uint8_t subchunk2ID[4];
	uint32_t subchunk2Size;

int main(int argc, char * argv[])
	WAVEHEADER waveHeader;
	int16_t smp; // Sample
	double tmp; // Temp of sample
	double nrm; // Normal of sample 
	double bst = BST_INIT; // Start boost
	double stp; // Step size

	// Read wave header from stdin
	fread(&waveHeader, sizeof(WAVEHEADER), 1, stdin);

	// Write wave header to stdout
	fwrite(&waveHeader, sizeof(WAVEHEADER), 1, stdout);

	// Calculate step size;
	stp = (STP_SEC / waveHeader.sampleRate) * waveHeader.numChannels;

		fread(&smp, sizeof(int16_t), 1, stdin);
		if(waveHeader.bitsPerSample == 16)
			tmp = (double)smp / (double)0x7FFF;
			// Absolute value
			nrm = tmp < 0 ? -tmp : tmp;
			// Determine max boost
			if(bst < nrm)
				bst = nrm;
				bst -= stp;	
			// Don't boost low sounds
			if(bst < BST_MIN)
				bst = BST_MIN;

			// Boost
			tmp = tmp / bst;
			smp = (int16_t)(tmp * (double)0x7FFF / 1.0);
		fwrite(&smp, sizeof(int16_t), 1, stdout);

	return 0;

Compile with GCC:

>gcc radio_booster.c -o radio_booster

Contact Information


4EV Dirk Jan Buter
Krijtmolen 53
3844TK Zwolle
The Netherlands