Metadata-Version: 2.1
Name: audio-normalizer
Version: 1.2.0
Summary: Audio Normalizer for MP3 and WAV files
Author: Matthias Christopher Schmid
Author-email: Matthias Christopher Schmid <schmid.mat93@gmail.com>
Project-URL: Homepage, https://github.com/MatthiasSchmid93/AudioNormalizer
Project-URL: Bug Tracker, https://github.com/MatthiasSchmid93/AudioNormalizer/issues
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Operating System :: Microsoft :: Windows
Requires-Python: >=3.7
Description-Content-Type: text/markdown
License-File: LICENCE
Requires-Dist: setuptools
Requires-Dist: mutagen (==1.46.0)
Requires-Dist: numpy (==1.21.5)
Requires-Dist: pydub (==0.25.1)
Requires-Dist: PyQt5 (==5.12.3)
Requires-Dist: PySimpleGUI (==4.60.5)
Requires-Dist: scipy (==1.9.1)
Requires-Dist: jsonschema (>=3.2.0)
Requires-Dist: matplotlib (==3.5.2)

# ![plot](https://raw.githubusercontent.com/MatthiasSchmid93/AudioNormalizer/main/audio_normalizer/assets/nor.png) AudioNormalizer
<p align="center">
 <img src="https://raw.githubusercontent.com/MatthiasSchmid93/AudioNormalizer/main/audio_normalizer/assets/UI.png">
</p>
<br/>
<p align="center">
This is a normalizer for mp3 and wav files. Its a final project for Havard CS50P.

The approach in this program to normalize audio differs in comparison to most other programs that implement this task. Most normalizers amplify an audio signal  until the highest transient reaches 0 dB. The downside of this approach is that the audio signal can only be amplified based on a single maximum transient.     In other words, the whole normalizing process depends on one transient, which is inefficient.

This program, however, doesn't depend on a single transient. It rather splits the original signal into four separate signals (left positive, left negative,     right positive, and right negative). Then it uses an algorithm that finds several transients that exceed a calculated value based on the audio file's           duration and actual volume. For each split signal, a copy is being created, a dummy signal. In the dummy signals, the found transients are turned into the       value of zero. The next task is to find the new maximum transient in each modified dummy signal like any other simple normalizer. The new maximum value is       then saved for the final amplification.

At this stage, the program finds all amplitudes in the original split signals where the previously found transients are sitting. The split audio signals are     then amplified based on the new maximum transient. All amplitudes that exceed (clip) above 0 dB are lowered to 0 dB without manipulating the original signal     except for the volume.

Finally, all the amplified split signals are merged together and are saved as the original file name and type. All the ID3 tags, including the album cover,     are also maintained in the new normalized file.

As a result, the user gets an audiofile normalized to 0 dB without losing noticeable dynamic range or the overall audio quality.


## Installation

```bash
pip install audio_normalizer
```

## Usage

```python
import audio_normalizer

audio_normalizer.open_window()
```
