├── .gitignore
├── docs
├── assets
│ └── favicon.ico
├── stylesheets
│ └── extra.css
├── Privacy.md
├── index.md
├── Configuration.md
├── EULA.md
├── Import.md
├── Troubleshooting.md
├── Features.md
└── Settings.md
├── README.md
└── mkdocs.yml
/.gitignore:
--------------------------------------------------------------------------------
1 | _site
2 | Gemfile.lock
3 | .bundles_cache
4 | /venv
5 | site
--------------------------------------------------------------------------------
/docs/assets/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Pittvandewitt/Wavelet/HEAD/docs/assets/favicon.ico
--------------------------------------------------------------------------------
/docs/stylesheets/extra.css:
--------------------------------------------------------------------------------
1 | [data-md-color-scheme="wavelet"] {
2 | --md-primary-fg-color: #FCFCFC;
3 | --md-primary-fg-color--light: #FCFCFC;
4 | --md-primary-fg-color--dark: #1B1B1B;
5 | }
6 |
7 | .md-header__topic:first-child {
8 | font-weight: 500;
9 | }
10 |
11 | @media (prefers-color-scheme: light) {
12 | .md-nav__source {
13 | background-color: var(--md-primary-fg-color--light);
14 | }
15 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # Wavelet documentation
4 |
5 | Source for Wavelet documentation website, containing a rundown on each feature and its settings and troubleshooting information.
6 |
7 | [pittvandewitt.github.io/Wavelet/](https://pittvandewitt.github.io/Wavelet/) is where the main event is
8 |
9 | Please check out [github.com/Pittvandewitt/Wavelet-strings](https://github.com/Pittvandewitt/Wavelet-strings/blob/master/README.md) if you wish to use Wavelet in your own language
--------------------------------------------------------------------------------
/docs/Privacy.md:
--------------------------------------------------------------------------------
1 | # Privacy policy
2 |
3 | ## How Wavelet uses your data:
4 | * No data accessed by Wavelet is shared or retained.
5 |
6 | ## Service providers
7 | Wavelet does make use of service providers; Google Play [1] if Wavelet was downloaded from the Google Play Store or HMS [2] [3] if Wavelet was downloaded from the Huawei AppGallery.
8 | These service providers are required for distribution, the in-app purchase and for delivering user statistics and crash logs in the respective developer console. The data collected by these service providers is anonymized and does not contain sensitive user data.
9 | For your convenience, you can refer to the respective privacy policies below.
10 |
11 | [1] [Google Play Terms of service](https://play.google.com/intl/en_us/about/play-terms/index.html)
12 |
13 | [2] [AppGallery User Agreement](https://consumer.huawei.com/minisite/cloudservice/hiapp/terms.htm?country=SG&branchid=1&language=en_US)
14 |
15 | [3] [Statement About HUAWEI In-App-Purchase and Privacy](https://consumer.huawei.com/minisite/cloudservice/iap/common/b0/latest/privacy-statement.htm)
--------------------------------------------------------------------------------
/docs/index.md:
--------------------------------------------------------------------------------
1 |
10 |
11 | # Quick start guide
12 |
13 | You installed [Wavelet] but it doesn't seem to work out of the box... Try these steps to get started quickly!
14 |
15 | - Most of the time you simply need to start playing some music before you're able to change settings in Wavelet
16 | - Some music players don't work out of the box. Check out [Music player setup] and follow the steps for the music player you use (if it's listed)
17 | - It is good practice to follow the instructions on [dontkillmyapp]. By completing the instructions, your device will allow Wavelet to detect music playback and not cause interruptions
18 | - Check out the [Troubleshooting] page
19 |
20 | [Wavelet]: https://play.google.com/store/apps/details?id=com.pittvandewitt.wavelet
21 | [dontkillmyapp]: https://dontkillmyapp.com/
22 | [Music player setup]: Configuration.md
23 | [Troubleshooting]: Troubleshooting.md
--------------------------------------------------------------------------------
/docs/Configuration.md:
--------------------------------------------------------------------------------
1 | # Configure your music player
2 |
3 | Some music players require additional configuration to support audio processing.
4 |
5 | ## Poweramp
6 | - Go to Settings - Audio engine - Advanced tweaks and enable MusicFX
7 | - Go back to the music player and open the equalizer settings by pressing the second item in the bottom bar
8 | - Go to the second (middle) page and enable the MusicFX button
9 |
10 | ## Neutron
11 | - Go to Settings - Audio Hardware - and enable DSP Effect (Device)
12 | - Press confirm at the bottom right to save the setting.
13 |
14 | ## Musicolet
15 | - Press the 3-dots menu in the upper right corner and open Settings - Audio
16 | - Press Equalizer to use and choose the second option: 'System Equalizer'
17 |
18 | ## BlackPlayer
19 | - Press the hamburger menu and open settings
20 | - Press Audio - Select Equalizer and select Default Equalizer
21 |
22 | ## Deezer
23 | - Play some music
24 | - In the bottom left corner, open sound settings
25 | - Under the Equalizer category, enable 'Activate' and press OK
26 |
27 | ## VLC
28 | - Select the 'More' tab in the bottom navigation
29 | - Press Settings in the top left corner
30 | - Under extra settings, press 'Audio' - Audio output
31 | - Select AudioTrack
32 |
33 | This list is exhaustive. Suggestions are welcome.
34 |
--------------------------------------------------------------------------------
/mkdocs.yml:
--------------------------------------------------------------------------------
1 | site_name: Wavelet
2 | site_url: https://pittvandewitt.github.io/Wavelet
3 | site_author: Pittvandewitt
4 | site_description: "A quick rundown on each feature and its settings"
5 |
6 | repo_name: Pittvandewitt/Wavelet
7 | repo_url: https://github.com/Pittvandewitt/Wavelet
8 |
9 | copyright: 'Wavelet maintained by Pittvandewitt'
10 |
11 | theme:
12 | name: 'material'
13 | palette:
14 | primary: 'white'
15 | accent: 'white'
16 | scheme: wavelet
17 | logo: assets/favicon.ico
18 | favicon: assets/favicon.ico
19 | font:
20 | text: Poppins
21 | feature:
22 | tabs: true
23 | features:
24 | - navigation.footer
25 | - content.code.copy
26 |
27 | extra_css:
28 | - stylesheets/extra.css
29 |
30 | markdown_extensions:
31 | - toc:
32 | permalink: true
33 | - pymdownx.tabbed:
34 | alternate_style: true
35 | - pymdownx.emoji:
36 | emoji_index: !!python/name:material.extensions.emoji.twemoji
37 | emoji_generator: !!python/name:material.extensions.emoji.to_svg
38 | - pymdownx.superfences
39 | - attr_list
40 |
41 | nav:
42 | - Configuration: Configuration.md
43 | - Features: Features.md
44 | - Import: Import.md
45 | - Settings: Settings.md
46 | - Troubleshooting: Troubleshooting.md
47 | - EULA: EULA.md
48 |
--------------------------------------------------------------------------------
/docs/EULA.md:
--------------------------------------------------------------------------------
1 | End User License Agreement (EULA)
2 |
3 | This license agreement ("Agreement") is a legal contract between you (the user) and pittvandewitt regarding your use of the mobile application Wavelet ("the App").
4 |
5 | 1. License
6 | You are granted a non-exclusive, non-transferable right to download and use the App for personal, non-commercial purposes. You may not copy, modify, distribute, rent, lend, sell, or reverse engineer the App.
7 |
8 | 2. Freemium Model
9 | The App offers both free and paid features. Certain features, content, or services are only accessible through a payment (in-app purchase or subscription).
10 |
11 | 3. Intellectual Property
12 | All rights, title, and interest in and to the App, including any updates, upgrades, and modifications, remain the property of pittvandewitt.
13 |
14 | 4. Termination
15 | This license will terminate automatically if you violate these terms. Upon termination, you must cease all use of the App and delete all copies.
16 |
17 | 5. Liability
18 | The App is provided "as is" without any warranties. pittvandewitt is not liable for any damages arising from the use of the App.
19 |
20 | 6. Privacy
21 | Please refer to our [privacy policy] for more information.
22 |
23 | 7. Miscellaneous
24 | This agreement is governed by the laws of the Netherlands.
25 |
26 | [privacy policy]: Privacy.md
--------------------------------------------------------------------------------
/docs/Import.md:
--------------------------------------------------------------------------------
1 | # Import custom AutoEq data in Wavelet
2 |
3 | The import feature allows you to use your own created compensation data in Wavelet, which is useful if your headphone model is not listed or if you wish to tweak the current result shipped with Wavelet.
4 |
5 | [AutoEq.app](https://autoeq.app){ .md-button } [Squig.link](https://squig.link){ .md-button }
6 | *Visit autoeq.app or squig.link to get started.*
7 |
8 | Wavelet will use the file name (without extension) of the GraphicEq file to display your imported result.
9 | Currently, the GraphicEQ file must meet the following format to be accepted by Wavelet:
10 |
11 | ```
12 | GraphicEQ: 20 0; 21 0; 22 0; 23 0; 24 0; 26 0; 27 0; 29 0; 30 0; 32 0; 34 0; 36 0; 38 0; 40 0; 43 0; 45 0; 48 0; 50 0; 53 0; 56 0; 59 0; 63 0; 66 0; 70 0; 74 0; 78 0; 83 0; 87 0; 92 0; 97 0; 103 0; 109 0; 115 0; 121 0; 128 0; 136 0; 143 0; 151 0; 160 0; 169 0; 178 0; 188 0; 199 0; 210 0; 222 0; 235 0; 248 0; 262 0; 277 0; 292 0; 309 0; 326 0; 345 0; 364 0; 385 0; 406 0; 429 0; 453 0; 479 0; 506 0; 534 0; 565 0; 596 0; 630 0; 665 0; 703 0; 743 0; 784 0; 829 0; 875 0; 924 0; 977 0; 1032 0; 1090 0; 1151 0; 1216 0; 1284 0; 1357 0; 1433 0; 1514 0; 1599 0; 1689 0; 1784 0; 1885 0; 1991 0; 2103 0; 2221 0; 2347 0; 2479 0; 2618 0; 2766 0; 2921 0; 3086 0; 3260 0; 3443 0; 3637 0; 3842 0; 4058 0; 4287 0; 4528 0; 4783 0; 5052 0; 5337 0; 5637 0; 5955 0; 6290 0; 6644 0; 7018 0; 7414 0; 7831 0; 8272 0; 8738 0; 9230 0; 9749 0; 10298 0; 10878 0; 11490 0; 12137 0; 12821 0; 13543 0; 14305 0; 15110 0; 15961 0; 16860 0; 17809 0; 18812 0; 19871 0
13 | ```
14 |
15 | Adding, changing or removing frequencies will lead to an incompable file. This format might change in the future if the output from AutoEq changes. It is highly recommended to save the CSV file you created, so you can rerun the calculations to easily adapt your custom compensation data to a new format.
16 |
17 | [Equalizing Headphones the Easy Way]: https://medium.com/@jaakkopasanen/make-your-headphones-sound-supreme-1cbd567832a9
18 | [AutoEq]: https://github.com/jaakkopasanen/AutoEq
--------------------------------------------------------------------------------
/docs/Troubleshooting.md:
--------------------------------------------------------------------------------
1 | # Troubleshooting
2 |
3 | ## In-app purchase no longer available
4 | The in-app purchase is a one time only purchase without expiry. It is saved to your Google account. Therefore, confirm you are logged in with the Google account you made the purchase with. In case your purchase is not detected by Wavelet, you are adviced to vist the Wavelet listing in the Play Store on the device where the purchase is not detected. Opening Wavelet through Google Play will restore the purchase.
5 | [Open Wavelet :fontawesome-brands-google-play:](https://play.google.com/store/apps/details?id=com.pittvandewitt.wavelet){ .md-button }
6 |
7 |
8 | ## Headphone model not listed in AutoEq
9 | All data included in Wavelet comes from the AutoEq project which takes its data from external sources. If none of the sources have measured a particular headphone model, the model cannot be included in AutoEq.
10 | If you were able to find a frequency response measurement of your headphones, you can try to create compensation data by following the [import instructions].
11 |
12 |
13 | ## Wavelet randomly stopping
14 | Many OEMs apply nasty battery saving techniques, such as limiting applications to start automatically or killing applications even when the application is in use. It is highly recommendend to check out [dontkillmyapp.com] and follow the instructions for your device brand to prevent issues like these from happening.
15 |
16 |
17 | ## Legacy mode does not work via Bluetooth
18 | Go to your device [developer options] and turn off "Disable Bluetooth A2DP hardware offload".
19 |
20 |
21 | ## No sound difference via Bluetooth device or external DAC
22 | Some devices ship libraries used by Wavelet that don't support the sample rate used by your Bluetooth device or DAC. To fix this issue for Bluetooth devices, go to your device [device developer] options and set the Bluetooth sample rate to 48kHz and/or the Bluetooth codec to SBC.
23 | Unfortunately no solution is known for external DACs.
24 |
25 |
26 | ## Clipping issues on Samsung devices
27 | Some Samsung devices have a UHQ upscaler in the 'Sound quality and effects' system settings. Change the UHQ upscaler to Bit upscaling only to avoid clipping issues.
28 |
29 |
30 | ## Other
31 | Wavelet will often not function as expected if other equalizer/hearing aid applications are installed, such as:
32 | - Sound assistant on some Samsung devices
33 | - AudioFX on LineageOS
34 | - 3rd party equalizer applications installed from the Play Store
35 |
36 | Freezing or uninstalling the offending application + rebooting your device will resolve issues caused by this.
37 |
38 | [import instructions]: Import.md
39 | [developer options]: https://developer.android.com/studio/debug/dev-options.html#enable
40 | [dontkillmyapp.com]: https://dontkillmyapp.com/
--------------------------------------------------------------------------------
/docs/Features.md:
--------------------------------------------------------------------------------
1 | # Features
2 |
3 | ## AutoEq
4 |
5 | The [AutoEq] feature contains precalculated results from jaakkopasanen's great work. Over 5000 entries are shipped with Wavelet and contain the optimal frequency response compensation for those specific headphone models.
6 |
7 | - __Headphone model__ lets you search the database or view your previously selected headphones. Tap the search icon next to the title to add new listings or tap the x icon to remove an item if you selected the wrong one. *Make sure to only use the entry that is meant for your headphone model*.
8 |
9 | - __Import__ Allows you to load custom generated AutoEq data. Details can be found at [import instructions].
10 |
11 | ## Graphic equalizer
12 |
13 | The graphic equalizer consists of 9 bands. You can set each slider independently to change the balance in frequency response or to remove obvious imbalance issues. You can also use this feature to compensate the frequency response of your speakers or your headphones if they're are not listed in the AutoEq section, or if you would like to add some coloration to your audio stream.
14 |
15 | - __Presets__ contains a few presets for a given set of sound signatures. The first entry will reset all bands to stock.
16 |
17 | ## Equal loudness
18 |
19 | Equal loudness implements the ISO 226 standard. This standard describes how strong certain frequencies must be reproduced in order to perceive them equally loud at various volume levels. This means with equal loudness enabled, the sound signature will stay the same no matter at which volume step you are listening. With equal loudness disabled, medium frequencies will be more noticable at a low volume levels for example.
20 |
21 | - __Volume threshold__ sets the threshold on which equal loudness becomes active. Set your device volume to the level you would normally prefer and set this slider to the lowest value just before the graph starts changing.
22 |
23 | ## Bass boost
24 |
25 | Bass boost is available on Android 9 exclusively. It amplifies the lower frequencies.
26 |
27 | - __Bass boost strength__ lets you set the strength.
28 |
29 | ## Reverberation
30 |
31 | Reverberation is available if legacy mode is disabled. It adds the effect of a sound bouncing off the wall from a room you would be listening in.
32 |
33 | - __Preset__ lets you choose the room size.
34 |
35 | ## Virtualizer
36 |
37 | Virtualization is the effect of spatializing audio channels. This effect will widen the stereo image (when listening in stereo).
38 |
39 | - __Strength__ determines the effect strength.
40 |
41 | ## Bass tuner
42 |
43 | Bass tuner allows you to set a very precise bass boost or reduction. This can be useful if your speaker system has a resonant peak in the lower frequencies or a point where long soundwaves cancel each other out.
44 |
45 | - __Bass type__ Allows you to choose between natural, transient compressor and sustain compressor types. The transient compressor adds the possibility to increase or decrease the initial bass punch. The sustain compressor preserves the transient and is able to increase or reduce the rumble. This can be used to reduce resonance without compromising the initial kick or to make balanced armature drivers sound less anemic.
46 |
47 | - __Cutoff frequency__ determines until what frequency the sound is processed.
48 |
49 | - __Post-gain__ sets the gain to compensate for. This value can either be negative or positive.
50 |
51 | ## Limiter
52 |
53 | The limiter removes volume spikes from your audio streams. Sometimes this is desired in noisy environments where you need to turn up the volume in quiet parts of the music and later turn it down when the music becomes louder.
54 |
55 | - __Attack time__ determines after how many milliseconds the effect will kick in. A fast time will help remove unwanted peaks very effectively, but is very noticable. A longer attack time might not be fast enough, but it will sound more natural.
56 |
57 | - __Release time__ determines how long the effect will be active. A fast time will give that pumping sound. A long time will sound smoother, but may negate a fast attack time and affect transients in your music.
58 |
59 | - __Ratio__ sets the effect strength. If a signal is 1dB over the threshold, it will reduce the output by the ratio level you set.
60 |
61 | - __Threshold__ determines above what volume level the limiter should become effective.
62 |
63 | - __Automatic post-gain__ calculates the highest gain of all features combined and then substracts this value from the output gain. This makes sure you never boost your volume above the hardware limit, to prevent distortion or clipping from happening.
64 |
65 | - __Post-gain__ allows you to compensate for volume changes caused ratio and threshold.
66 |
67 | ## Channel balance
68 |
69 | Channel balance allows you to control the left and right channel output volumes separately. This can come in handy when you can't sit in center of your speaker setup or when your headphones have a difference in impedance between their left and right channels.
70 | Some phones have a limiter built in that causes volume ducking when you boost above a certain amount of dB. You can also use this feature to control the overall volume output and to prevent this ducking from happening.
71 |
72 | - __Channel gain__ controls the balance between left and right.
73 |
74 | [AutoEq]: https://github.com/jaakkopasanen/AutoEq
75 | [import instructions]: Import.md
--------------------------------------------------------------------------------
/docs/Settings.md:
--------------------------------------------------------------------------------
1 | # Settings
2 |
3 | ## Buffer size
4 |
5 | Buffer size allows for setting the audio processing precision. A low buffer size corresponds to less precision and lower latency. A high buffer size corresponds to better precision and higher latency.
6 | A low buffer size is recommended when watching videos but not when listening to music.
7 | *On Android 9 it is recommended to max out buffer size, to minimize clipping issues in the lower frequencies*
8 |
9 | ## AIDL mode
10 |
11 | AIDL mode is a workaround for the issues Google introduced with the new AIDL Audio HAL. Less features are available in this mode unfortunately. Enable this setting if Wavelet stopped working properly after a system update or if changing any setting in the equalization options has no effect. Currently known affected devices are the Pixel 9 series and Xiaomi 15. More devices are expected to suffer from these issues.
12 |
13 | ## Legacy mode
14 |
15 | Legacy mode is turned off by default, because features will become available in Wavelet whenever an application notifies your device system about music playback becoming active. Some music players do not notify your device system, therefore no features will show up. You can try enabling legacy mode and see if your device allows Wavelet to process your music in this mode. Legacy might work, depending on your device manufacturer's audio framework implementation.
16 | You will have to experiment with legacy mode and see what works best.
17 |
18 | :white_check_mark: List of players with support for audio processing:
19 |
20 | * [YouTube Music]
21 | * [Spotify]
22 | * [Plexamp]
23 | * [Auxio]
24 | * [Music Player GO]
25 | * [Jair Music Player]
26 | * [Phonograph Music Player]
27 | * [Shuttle Music Player]
28 | * [Samsung Music]
29 | * [Just (Video) Player]
30 | * [Podcast Addict]
31 | * [Poweramp Music Player] (requires [additional configuration](Configuration.md#poweramp))
32 | * [Neutron Music Player] (requires [additional configuration](Configuration.md#neutron))
33 | * [Musicolet Music Player] (requires [additional configuration](Configuration.md#musicolet))
34 | * [BlackPlayer Music Player] (requires [additional configuration](Configuration.md#blackplayer))
35 | * [Deezer] (requires [additional configuration](Configuration.md#deezer))
36 | * [VLC for Android] (requires [additional configuration](Configuration.md#vlc))
37 |
38 | ❌ List of players lacking support for audio processing:
39 |
40 | * [TIDAL Music]
41 | * [SoundCloud]
42 | * [Apple Music] (Sometimes it does, but very buggy)
43 | * [Music Player & MP3 Player]
44 | * [Amazon Music]
45 | * [Pulsar Music Player]
46 | * [Pocket Casts]
47 | * [YouTube]
48 | * [Pandora]
49 | * [Qobuz]
50 | * [foobar2000]
51 | * [LibreTube]
52 | * Most music applications that came preinstalled on your device
53 |
54 | ## Enhanced session detection
55 |
56 | **Disclaimer:** Enhanced session detection is experimental and available only for Android 10 and up.
57 | If you choose to activate enhanced session detection, Wavelet will actively listen for music sessions instead of relying on being notified when a session starts. The DUMP permission is required to allow Wavelet to filter the required information from the device system services needed to attach and release audio effects to audio sessions. The advantage of enhanced session detection is that there is no need to depend on other applications opening and closing their audio sessions properly, which means it should work properly with every media session.
58 |
59 | Instructions to activate enhanced session detection:
60 |
61 | 1. Activate developer options and enable USB debugging on your device as instructed on [developer.android.com/studio/debug/dev-options]
62 | - On Xiaomi devices, it is mandatory to enable 'USB debugging (Security Settings)' in developer options
63 | - On Realme and OPPO devices, it is mandatory to disable 'permission monitoring' under settings - security center
64 | - On OnePlus devices, it is mandatory to enable 'Disable permission monitoring' in developer options
65 | 2. Grant DUMP permission
66 | 1. Connect your device to any device with Chrome installed (or go to d.)
67 | 2. Open Chrome on the host device, browse to [app.webadb.com/shell] and add and connect your device
68 | 3. Run this command in the webadb shell:
69 | ```shell
70 | pm grant com.pittvandewitt.wavelet android.permission.DUMP
71 | ```
72 | 4. Alternatively, if your device has a shell with ADB installed, run:
73 | ```shell
74 | adb shell pm grant com.pittvandewitt.wavelet android.permission.DUMP
75 | ```
76 | 3. Go to notification listener access and enable the permission for Wavelet
77 |
78 | If you wish to switch back to the old behaviour, you can do so by disabling notification listener access for Wavelet and/or by running:
79 | ```shell
80 | pm revoke com.pittvandewitt.wavelet android.permission.DUMP
81 | ```
82 |
83 | [app.webadb.com/shell]: https://app.webadb.com/shell
84 | [developer.android.com/studio/debug/dev-options]: https://developer.android.com/studio/debug/dev-options.html#enable
85 |
86 | [Youtube Music]: https://play.google.com/store/apps/details?id=com.google.android.apps.youtube.music
87 | [Spotify]: https://play.google.com/store/apps/details?id=com.spotify.music
88 | [Plexamp]: https://play.google.com/store/apps/details?id=tv.plex.labs.plexamp
89 | [Auxio]: https://f-droid.org/packages/org.oxycblt.auxio/
90 | [Music Player GO]: https://play.google.com/store/apps/details?id=com.iven.musicplayergo
91 | [Jair Music Player]: https://play.google.com/store/apps/details?id=aj.jair.music
92 | [Phonograph Music Player]: https://play.google.com/store/apps/details?id=com.kabouzeid.gramophone
93 | [Shuttle Music Player]: https://play.google.com/store/apps/details?id=another.music.player
94 | [Samsung Music]: https://play.google.com/store/apps/details?id=com.sec.android.app.music
95 | [Just (Video) Player]: https://play.google.com/store/apps/details?id=com.brouken.player
96 | [Podcast Addict]: https://play.google.com/store/apps/details?id=com.bambuna.podcastaddict
97 | [Poweramp Music Player]: https://play.google.com/store/apps/details?id=com.maxmpz.audioplayer
98 | [Neutron Music Player]: https://play.google.com/store/apps/details?id=com.neutroncode.mp
99 | [Musicolet Music Player]: https://play.google.com/store/apps/details?id=in.krosbits.musicolet
100 | [BlackPlayer Music Player]: https://play.google.com/store/apps/details?id=com.musicplayer.blackplayerfree
101 | [Deezer]: https://play.google.com/store/apps/details?id=deezer.android.app
102 | [VLC for Android]: https://play.google.com/store/apps/details?id=org.videolan.vlc
103 |
104 | [TIDAL Music]: https://play.google.com/store/apps/details?id=com.aspiro.tidal
105 | [SoundCloud]: https://play.google.com/store/apps/details?id=com.soundcloud.android
106 | [Apple Music]: https://play.google.com/store/apps/details?id=com.apple.android.music
107 | [Music Player & MP3 Player]: https://play.google.com/store/apps/details?id=musicplayer.musicapps.music.mp3player
108 | [Amazon Music]: https://play.google.com/store/apps/details?id=com.amazon.mp3
109 | [Pulsar Music Player]: https://play.google.com/store/apps/details?id=com.rhmsoft.pulsar
110 | [Pocket Casts]: https://play.google.com/store/apps/details?id=au.com.shiftyjelly.pocketcasts
111 | [YouTube]: https://play.google.com/store/apps/details?id=com.google.android.youtube
112 | [Pandora]: https://play.google.com/store/apps/details?id=com.pandora.android
113 | [Qobuz]: https://play.google.com/store/apps/details?id=com.qobuz.music
114 | [foobar2000]: https://play.google.com/store/apps/details?id=com.foobar2000.foobar2000
115 | [LibreTube]: https://f-droid.org/packages/com.github.libretube/
--------------------------------------------------------------------------------