SongRec is an unofficial Shazam client for Linux, written in Rust. It allows you to easily recognize songs from your speakers, microphone or audio files.
Features:
- Recognize audio from an arbitrary audio file.
- Recognize audio from the microphone.
- Usage from both GUI and command line (for the file recognition part).
- Provide an history of the recognized songs on the GUI, exportable to CSV.
- Continuous song detection from the microphone, with the ability to choose your input device.
- Ability to recognize songs from your speakers rather than your microphone (on compatible PulseAudio setups).
Update dependencies, including using a non-deprecated library for the MPRIS module (issue #243)
Use a monochrome tray icon for better GNOME integration (issue #255)
Update the Brazilian translation thanks to @marcelocripe
Update the Arabic translation thanks to @mu7basha
Update the Slovak translation thanks to @dodog
Update the Spanish translation thanks to @feramirez
Allow shrinking down the window to arbitary sizes in windowed mode
Fix translations other than fr_FR not being loaded in the Flatpak build (see issue #247)
Make extra Pulseaudio-related debugging output to be displayed when -v is passed, to allow troubleshoot SongRec not working on Snap with the Ubuntu 26.04+ kernel (see issue #111)
Prepare supporting CPAL 0.18+ which will have libpulse and libpipewire backends (that adds dependencies in the install instructions which are not actually used for the moment)
Update the Czech translation thanks to @Fjuro
Update the Dutch translation thanks to @Vistaus
Fix cross-platform support and building without the GUI (issue #231)
Fix legacy command line support (PR #233 thanks to @bodoque-01)
Update the Slovak translation (PR #237 thanks to @dodog)
Update the Russian translation (PR #239 thanks to @AlexanderShad)
Implement Snapcraft compatibility (issues #111 and #244)
Update the Arabic translation thanks to @mu7basha
Update the "rodio" dependency and make the ALSA device names look native
Select history rows only after a left-click to better match the native GTK-4 behavior (issue #245)
Handle the Context key and Ctrl+C key bindings when an history row is selected (issues #245 and #200)
Fix supporting MPRIS over Flatpak (issue #214)
Handle left-clicks on the system tray icon over KDE
Add an UI button to refresh the PulseAudio device list
Add a status icon through the KSNI rust crate
Add a no duplicate entries setting (issue #198)
Set the default request interval to a tunable 8 seconds
Don't try to fingerprint empty audio buffers
Fix a display glitch
Reduce song history load time when the history is large (issue #224)
Drop reqwest for libsoup for network requests, this will make the binary and the compile time smaller
Make the network code asynchronous (issue #223)
Increase the default request interval from 4 to 10 seconds to decrease the odds of rate-limiting, and make it fully configurable (issues #222, #154, #164, #218)
Try a colorful icon
Implement more standard shortcuts for GNOME Circle criteria compliance
Add Snapcraft compatibility
Move command line output to the new fern-based logging system
Add a --list-devices flag for CLI commands like "listen" and "recognize"
Add a --request-interval flag for CLI commands like "listen" and "recognize"
Avoid to spam the debugging output with huge raw song cover data
Avoid stack overflow when compiling in debug mode on Linux
Add support building the GTK 4 nativaly for Ubuntu 24.04 LTS in addition to 25.04, 25.10 and Flatpak
Use a steel icon matching the recommended bounds for a Flathub icon
Synchronize Czech, Brazilian and French translations (thanks to @Fjuro and @marcelocripe)
Add copiable debug information in the About panel
Add UI settings for the amp.shazam buffer size and recognition interval (see issues #154, #164, #81)
Notify users about the rate limit status
Use a flat-looking icon consistent with both the previous releases of SongRec and the GNOME UI guidelines
Improve accessibility
Update metainfo.xml to better fit the GNOME Circle and Flathub guidelines
Move translations to Weblate (weblate.fossplant.re)
Auto-generate manpage files
Add CI and DOAP files
Update interface to GTK 4 (issue #206)
Fix using MPRIS over Flatpak (issue #214)
Add advanced logs using the -v command line flag
Update upstream translations (Czech by @Fjuro, Brazilian by @marcelocripe)
Packaging: Change the translations path to /usr/share/locale instead of /usr/share/songrec/translations (this may require action from distribution package maintainers)
Packaging: Change the package name to re.fossplant.songrec instead of com.github.marinm.songrec so that the application can be correctly verified on Flathub
Branding: Update the Flathub landing page to comply with style guidelines
Branding: Change the project homepage URL
Wrap the name of long microphone devices names in the GUI
Handle network-related variables correctly (PR #191 thanks to @losynix)
Fix the chronological order when displaying songs onto the UI (PR #192 thanks to @nt8r)
Add Russian translation (PR #193 thanks to @AlexanderShad)
Rectify the window icon under Wayland (PR #203 thanks to @Integral-Tech)
Add the recognition date to favorites window, and made all columns sortable (PR #208 thanks to @damonhayhurst)
Fix MPRIS cover art display under certain platforms (PR #210 thanks to @micahlt)
Prevent mission application icon when running (PR #163 thanks to @heldderarbeit)
Quit the application when doing Ctrl+Q (issue #181)
Change the Flatpak permission from --device=dri to --device=all, because --device=dri made it impossible to change the audio input source to monitor mode on certain recent Flatpak/PipeWire combinations (issue #177)
Fix usage of the Context menu in the Favourites window (PR #179 from @damonhayhurst and issue #178)
Minor code refactoring (PR #153 from @dotX12) and bug fixes, including with building in --debug mode (issue #159)
Remove the "Play Shazam lure" button, as it is no more functional with recent Shazam versions (issue #170)
Update Slovak translation from issue #23 (thanks to @dodog)
Update Portuguese translation from PR #172 (thanks to @marcelocripe)
Update the `rodio` crate dependency to drop the requirement on the `minimp3` library, that prevented building on certain platforms
Add a Catalan translation (thanks to @pgiuli in issue #23)
Make the UI more clear so that it is visible that we are toggling the recognition from the speakers rather than the microphone when the monitor mode is on (see issue #149)
Fix a bug that had certain strings to be mistakenly copied at the bad places in the internationalized versions of the application, due to the fuzzy mode of msgmerge/gettext
Update the Dutch translation (thanks to @Vistaus in PR #150)
Update compilation instructions in the README.md file
Allow to compile the app with the libpulse and MPRIS module enabled on non-Linux UNIX systems such as BSD (see issue #152)
Possibly improve the compatibility of the recognize-from-speakers feature
Add a Korean translation (thanks to @MarongHappy in PR #146)
Re-integrate MPRIS compatibility code in the default builds, with an opt-in GUI option
Add a simple preference window and an about dialog
Use libpulse (when available) for displaying the list of selectable audio input devices by default, instead of alsalib for listing audio inputs and pactl for switching to a monitor mode device, so that the list of devices displays correct values on PipeWire/PulseAudio-based systems.
Make the dependencies over libpulse and DBus MPRIS fully optional, through Cargo features.
Disable MPRIS signalling in default builds, as it may interfer inopportunely with media keys control from other media players (as submitted in issue #89)
Fix build issues on non-Linux platforms (thanks to pull request #144 from @dotX12)
Add a Favourite songs list in the interface (thanks to pull request #123 from @damonhayhurst)
Add a Spanish UI translation (as submitted by @Swyter in issue #23)
Add a German UI translation (as submitted in issue #23)
Update the Italian UI translation (thanks to pull request #133 from @M0Rf30)
Add a checkbox into the graphical interface in order to disable or enable system notifications whenever recognizing a song (thanks to @damonhayhurst).
Fix the bug that previously caused the Firefox user interface menus to blink on Linux after the "Search on YouTube" feature has been used (thanks to @ducaton).
Update the French translation.
Add safety checks in order to prevent potential crashes when handling corrupt configuration files or invalid audio devices.
Change the path of the files saving user interface-related preferences in order to update a deprecated Rust crate (this may create a symbolic link from "~/.local/share/songrec" towards an preexisting "~/.local/share/SongRec" directory under Linux).
- Fix the behavior of the new "recognize" command, when recognizing from a file.
- Add album artwork, if it exists, to the desktop notification when a song is recognized (thanks to @damonhayhurst).
- Update the Dutch translation (thanks to @Vistaus).
- Introduce a new command-line interface allowing to use microphone recognition from the command line, with the "recognize" and "listen" commands (thanks to @Hummer12007), keeping older command backwards compatibility.
- Update the CSV export format in order to introduce new "track_key", "release_year" and "genre" columns (thanks to @tyd), where "track_key" is an identifier internal to the Shazam database.
- Allow exposing song metadata through the standard DBus MPRIS interface (thanks to @Hummer12007).
- Improve source code structure in order to split the dual CLI/GUI parts from the core thread communication and fingerprinting parts and from other platform-dependant utility code.
- Update certain dependent crates to more recent minor versions, among other possible things in order to accept a higher LibreSSL version.
- Add the program version without the program help output (see the "-h" or "-V", "--version" options).
- Add a Polish translation (thanks to @qarmin).
- Update the French translation according to recent changes.
- Don't crash when there is no input device available on the host machine.
- Update the Dutch translation.
- Add Japanese and Italian translations.
- Fix PipeWire compatibility.
- Add support for a possible XDG action for recognizing from a file.
- Add French and Dutch translations.
- Ensure that only one window of SongRec is present.
- Avoid to display "No match for this song" when multiple instances of SongRec would be displayed and one would be closed.
- Include a "Cargo.lock" file in the project so that it can be accepted in certain packaging systems that require freezing Rust dependencies to a known subversion.
- Change the locale sent in HTTP requests to avoid to display internationalized song titles, in certain cases.
- Fix a minor typo in the algorithm implementation that shouldn't impact recognition.
- Improve portability.
- Display a clean "Shazam servers are not reachable, are you connected?" message on the GUI when the computer has been offline, rather than showing low-level errors.
- Improve cross-platform support.
- Try to decode input files with FFMpeg when it is available on the target system, in order to support more audio and video formats when recognizing from a file.
- The song recognition history now has a right-click context menu that allows to copy the name of the songs, artists, tracks or albums, or to search previously recognized songs on YouTube.
- It is now possible to select the name of the last recognized song so that it can be copy-pasted somewhere easily.
- Add the ability to recognize songs from your speakers rather than your microphone, through a checkbox that will be visible when the functionality is available, on compatible PulseAudio setups.
- Make the application fully responsive for mobile devices using GtkFlowBox, thanks to @a33k.
- Use GtkFileChooserNative so that the application is able to graphically pick files through Flatpak without requiring further file system permissions.
- Add Flatpak packaging scripts and assets.
- Ensure that generated song lures don't last too long enough in certain cases.
- Remove the dash in the long application ID as it was incompatible with Flatpak.
Initial crates.io release