# FM95 config file

By default the config file path is on /etc/fm95.conf, it's a ini formatted config consisting of this syntax:

```ini
[section]
key=value
```

## Audio Pipeline

`Pulse` -> `Audio Preamp` -> `AGC` -> `LPF` -> `Pre-Emphasis` -> `Audio Volume` -> `Audio Clipper` -> `Stereo Encoder` -> `BS412` -> `Master Volume` -> `Output Clipper`

Below are the sections and their keys

## fm95

### stereo

Simple boolean, set to 0, or 1

### rds_streams

Integer from 0 to 4, it sets how many channels to capture from RDS95, note that both values have to match, otherwise god may have mercy on your RDS decoders

### clipper_threshold

Sets the peak to peak value of the Audio Clipper, defaults to one, but can be disabled by setting 0

### preemphasis

Sets the Preemphasis tau, basically how much highs is boosted, by default and in Europe it is 50µs, but in the USA and South Korea, use 75µs. Expects unit in integer microseconds

### calibration

Simple integer, set to 1 to output a sine wave at 400 Hz, which should correspond to 75 KHz deviation by default. Set to 2 for a 60 Hz square wave, this test is to set the tilt, more on which later

### master_volume

Float value to set the master volume, 1 by default, set to 0 to mute MPX

### audio_volume

Float value to set the audio volume, also 1 by default, set to 0 to mute audio itself, but stereo pilot and RDS should remain

### audio_preamp

Pre-amplification of the audio, before any filters, set to 1 by default, set to 0 to mute audio

### deviation

Set the deviation, you can use this to easily change to 50 KHz deviation if needed, by default 75 KHz, under the hood it just sets the master volume to x/75000. Expects unit in Hz

### tilt

This is needed for most DACs, as they have output high pass filtering for DC, such filtering is not phase-linear, for example when DC is played, it will slowly go back to 0, such filtering is bad for square waves and some bass, use calibration 2 to test for tilt, you can use a oscilloscope with a receiver or a RF spectrometer as well as a SDR, if in tilt, you should see a perfect square wave, a signal abruptly jumping between 1 and -1 on a oscilloscope or a signal jumping between -75 and 75 khz on a RF spectrum, for the setting itself this is a simple float with values between 0 (off) and 1

### bs412_max

This is usually not needed to set, but it sets the max gain for the BS412 compressor, so if it is the default 1, the BS412 compressor will never make the signal louder than it is on the input

### agc_target

Target of the AGC, usually not needed to set, defaults to 0.625 (higher is louder)

### agc_attack

How fast will the AGC react to the signal going over the target, unit in seconds

### agc_release

How fast will the AGC react to the signal going lesser than the target, in seconds

### agc_min

Default is 0.1, this is usually not needed, for what it does, see bs412_max, but instead of louder quieter, and not bs412 but agc

### agc_max

See agc_min, but its louder not quieter, and the default is 1.5

### bs412_attack

See agc_attack, but BS412, not AGC

### bs412_release

See bs412_attack, but its release instead

## advanced

### lpf_order

Sets the quality of the LPF, unless running on a weak system, this does not need change from the default 15 (lower is less cpu usage)

### preemp_unity

Sets the unity gain for preemphasis, if you don't know what that means you shouldn't touch this, but it defaults to 15 khz, unit in hz

### sample_rate

Default 192 khz, does not need change under most systems, and unit is in hz

### lpf_cutoff

lpf cutoff, some run this at 15, because Big FM™ tells them to, but running this higher has no costs (unless you're running it above 18.5 khz), but no gains either, unit in hz

### headroom

fm95 now computes the volumes for mono and stereo automatically, and headroom is to select how much headroom you want to leave for the mpx, takes a simple float, 100 percent to mute audio
