AutoEQ is an innovative application designed to enhance the listening experience across all audio sources on your computer. It provides a customizable 10-band graphic equalizer, includes genre-specific presets, integrates with Spotify to display the currently playing track, and enables automatic genre-based equalizer adjustments.
Full Application:
Here are some images showing the different genres available in the AutoEQ:
| Hip-Hop | R&B |
|---|---|
![]() |
![]() |
| Hip-Hop | R&B |
| Pop | Rock |
|---|---|
![]() |
![]() |
| Pop | Rock |
- 10-Band Equalizer: Adjust frequencies ranging from 60 Hz to 16,000 Hz.
- Custom Presets: Create, save, and load personalized EQ settings.
- Built-in Genre Presets: Includes presets for genres like Pop, Rock, Classical, and more.
- Real-Time Adjustment: Applies equalizer settings to system-wide audio with low latency.
- Flat Mode: Reset all bands to 0 dB using the "Flat" preset.
- "Now Playing" Display: Displays the currently playing track in real time.
- Automatic Updates: Updates every second to show the latest song from your Spotify account.
- Genre Detection: Detects the genre of the currently playing track and automatically adjusts the EQ based on pre-trained machine learning models.
- Genre Assignment: Assign specific genres to artists, allowing for management of "Unknown" genres and correction of mislabeled ones.
| Genre | 60 Hz | 170 Hz | 310 Hz | 600 Hz | 1 kHz | 3 kHz | 6 kHz | 12 kHz | 14 kHz | 16 kHz |
|---|---|---|---|---|---|---|---|---|---|---|
| Pop | +2 | +1 | 0 | 0 | +2 | +3 | +2 | +3 | +2 | +1 |
| Rock | +4 | +3 | +2 | +1 | 0 | +1 | 0 | -1 | -2 | -2 |
| Classical | 0 | 0 | +1 | +1 | +2 | +3 | +2 | +3 | +2 | +1 |
| Jazz | +2 | +3 | +2 | +1 | +1 | +2 | +1 | +1 | +1 | 0 |
| Hip-Hop | +6 | +4 | +2 | +1 | 0 | +2 | +3 | +4 | +2 | +1 |
| Electronic | +6 | +4 | +3 | +2 | 0 | +2 | +4 | +6 | +5 | +3 |
| Acoustic | +1 | +1 | +2 | +2 | +3 | +3 | +2 | +2 | +1 | 0 |
| Metal | +5 | +4 | +3 | +1 | +1 | +1 | 0 | -1 | -2 | -3 |
| Dance | +5 | +3 | +2 | +1 | 0 | +2 | +4 | +5 | +3 | +2 |
| R&B | +4 | +3 | +2 | +1 | +1 | +1 | +2 | +2 | +1 | 0 |
- Python 3.8 or higher
- Required Python packages:
- PyQt5
- pyaudio
- scipy
- spotipy
- python-dotenv
- scikit-learn
- Virtual Audio Cable:
- Required to route audio for processing by the application.
- Install and configure a virtual audio cable of your choice (e.g., VB-CABLE).
-
Clone the repository:
git clone https://github.com/yourusername/adaptive-audio-equalizer.git cd adaptive-audio-equalizer -
Install dependencies:
pip install -r requirements.txt
-
Configure Spotify API:
- Create a Spotify app at Spotify Developer Dashboard.
- Note the Client ID, Client Secret, and Redirect URI.
- Create a
.envfile in themain/directory with the following content:SPOTIFY_CLIENT_ID=your_client_id SPOTIFY_CLIENT_SECRET=your_client_secret SPOTIFY_REDIRECT_URI=http://localhost:8888/callback
-
Set up virtual audio devices:
- Run the application to list available audio devices.
- Note the input and output device indices from the terminal output.
- Update
input_device_indexandoutput_device_indexinstart_stream()inequalizer.py.
-
Run the application:
python main.py
Here’s the structure of the AutoEQ project:
autoeq/
│
├── archive/ # Archived/old files
│
├── images/ # Folder for images
│ ├── full.png # Full application screenshot
│ ├── hiphop.png # Hip-Hop genre image
│ ├── pop.png # Pop genre image
│ ├── rnb.png # R&B genre image
│ └── rock.png # Rock genre image
│
├── main/ # Main application directory
│ ├── __pycache__/ # Python cache files
│ ├── build # Build files for PyInstaller
│ ├── dist # Distribution files for PyInstaller
│ ├── genre/ # Genre detection files
│ │ ├── dataset.json # Dataset for genre detection
│ │ ├── genre_detection.py # Genre detection logic
│ │ └── genre_model.pkl # Pre-trained genre classification model
│ ├── presets/ # Presets directory
│ │ ├── custom_presets.pkl # Saved custom EQ presets
│ │ ├── genre_presets.pkl # Pre-defined genre classification presets
│ ├── .env # Environment variables for Spotify API
│ ├── artist_genres.pkl # Artist-genre mapping
│ ├── equalizer.py # Main equalizer logic and UI
│ ├── main.py # Entry point of the application
│ ├── requirements.txt # Python dependencies
│ ├── spotify_integration.py # Spotify integration logic
│ ├── styles.qss # Styles for the application
│ ├── icon.jpg # Application icon
│
├── .gitattributes # Git attributes file
├── .gitignore # Ignored files for Git
├── README.md # Project documentation
- Use the sliders to adjust the gain for each frequency band.
- Select a genre preset from the dropdown to apply genre-specific settings.
- Create custom presets:
- Adjust the sliders as desired.
- Enter a preset name in the text field.
- Click "Save Custom."
- Delete custom presets by selecting the preset and clicking "Delete Custom."
- Enter Artist Name: In the "Assign Genre" section, enter the name of the artist you want to assign a genre to.
- Select Genre: Choose the desired genre from the dropdown menu.
- Assign Genre: Click the "Assign Genre" button to save the assignment.
- Enter Artist Name: In the "Assign Genre" section, enter the name of the artist whose genre you want to reset.
- Click Reset Genre: Click the "Reset Genre" button to remove the genre assignment for that artist.
- Update credentials in
.envfile. Refer to installation section. - The "Currently streaming" section displays the current track and genre.
- If Auto EQ is enabled, the EQ will automatically adjust based on the detected genre.
-
No Sound Output/Input Detected:
- Verify input/output device indices in
start_stream()inequalizer.py. - Ensure PyAudio is correctly installed.
- Verify input/output device indices in
-
Spotify Integration Fails:
- Verify
.envfile contains valid Spotify credentials. - Ensure your browser is logged into Spotify.
- Verify
-
Custom Presets Not Saving:
- Ensure the application has write permissions for
custom_presets.pkl.
- Ensure the application has write permissions for
Contributions are welcome! Follow these steps:
- Fork the repository.
- Create a new branch:
git checkout -b feature-name. - Commit your changes:
git commit -m "Add feature-name". - Push to the branch:
git push origin feature-name. - Submit a pull request.
This project is licensed under the MIT License. See the LICENSE file for details.




