Antennapod: Please consider adding an equalizer in AntennaPod itself

Created on 26 Apr 2020  Â·  15Comments  Â·  Source: AntennaPod/AntennaPod

Would it please be possible to have an equalizer directly in AntennaPod? It would help with correcting sound problems in some podcasts.

App version: 1.8.1 (from Google Play)

Problem I am having:

A bunch of sound problems pop up in podcasts over and over, with the effect ranging from annoyance to making the speech incomprehensible. The spread of the problems is exacerbated by podcasts generally being less-professionally produced compared to, say, audiobooks.

  • Quite often, sibilants make prominent and jarring high-pitched hissing sound, over the course of the entire podcast.

  • Guests on some podcasts are recorded like they're speaking through a metal pipe (perhaps actually over a phone call or via conferencing software).

  • Going to older episodes on e.g. ‘No Such Thing As A Fish’ turns into a festival of questionable mastering: the four hosts may be recorded differently, with the men's speech having the metal-pipe effect while the woman is barely audible.

Suggested solution:

Often these problems can be at least partially corrected with an equalizer: audiobooks similarly sometimes have them, and I've used the EQ in VLC with considerable success. The metal-pipe thing is fixed by bringing down bass frequencies, while hissing is eliminated by cutting off most sound above 8 kHz. Different people can be mixed better to some extent by tuning low and high pitches louder or quieter (though a compressor would do better here).

It's preferable to have an equalizer with a separate pre-amp dial so it would also help with some podcasts being too quiet while the phone imposes ridiculous limits on the loudness for headphones (Pixels do this).

While several issues talk about AntennaPod's interaction with a system-wide equalizer, that doesn't seem to be a standard feature—at least not on stock Android 10. Besides, podcasts' problems don't affect other media played on a phone, such as music or videos, so the solution should also touch only podcasts.

Technical details:

Alas, I'm not versed in Android programming. Cursory search on Github shows a bunch of visual equalizer components but only a few actual audio libraries, so I'm not sure how feasible this request is, on the platform (one would hope that by now there's a choice of quality effect libraries).

It would also be greatly appreciated if AntennaPod had audio compression, since podcasts often have musical snippets that are too loud compared to speech, in the ‘whisper and explosions’ manner, or people recorded at different volume. There are several issues asking for this—so actually I hope it would make sense to have one DSP library that manages several effects: equalizer, compression, preamp/volume. I guess AudioFX is something in this vein?

It appears that at least Exoplayer can accept equalizers being plugged into it—via AudioFX if I understand it right.

However, it seems that AudioFX' stock equalizer has just five bands (and visual components on Github mirror this arrangement). It looks like the upper bands are 3600 kHz and then 16000 kHz. A ten-band equalizer would allow better control over the quality—so e.g. noise above 8 kHz could be cut while keeping the speech clear. Hopefully such an EQ could be created from a five-band one simply by copy-pasting the code and changing the numbers.

feature request

Most helpful comment

I did a bit of research and dirtied my hands somewhat. To clarify: AudioFX is a collection of classes under android.media.audiofx in the Android SDK, which seem to provide several audio effects. However, it turns out that AudioFX is not a DSP library itself, i.e. it doesn't do any processing per se: it's an API for effects that are implemented in Android's audio system.

Good thing about this is that it's very easy to enable these effects: barely knowing anything about Android development and Java in general, I kludged up ExoPlayerWrapper to use AudioFX' LoudnessEnhancer (because I like having the choice to listen to quiet podcasts too). Also found the PR #726 which is pretty much all that's needed to enable the effect. Though, since the effects are bound to system-wide ‘audio session ids’, I haven't yet figured out when this session id is deleted and the effect should be ‘freed up’. But in general, adding the UI for effect settings and tying them to podcasts will likely take more effort than the code to control the effects.

The downside is, available effects depend on a particular version of Android and its audiosystem, including vendors' modifications and third-party ROMs. E.g. the compressor seems to only appear since API 28, under android.media.audiofx.DynamicsProcessing. Also I've noticed a couple apps unsuccessfully trying to use the equalizer on my phone (including the open-source app Voice for audiobooks)—which suggests that the EQ just isn't there, despite the system being Android 10; while Samsung phones seem to have it, from what I've heard.

BTW, the Voice app works with effects in pretty much the same way as AntennaPod would, so it probably can be used as a reference. (And I should take a look at its code in regard to freeing up the effects.)

All 15 comments

Surprisingly, I haven't found an issue that already requests an equalizer, though it's possible that I missed it.

There are however other issues that might be well served by a library implementing several effects:

#612 Loudness enhancer for 4.4+
#2187 Loudness normalization (compressor/limiter)
#1085 Audio-normalisation (& volume correction) — more about normalization but could benefit from compression and/or a limiter

Surprisingly, I haven't found an issue that already requests an equalizer, though it's possible that I missed it.

Probably because it's kind of a useless feature. Podcasts are almost entirely speech. The devs would have to make one from scratch or add an existing one. It's too much work for little usage.

I must say that while indeed normalisation would be very helpful (as per issues @decadent already linked), an equaliser feels like overkill for AntennaPod.

@keunes I'm more hoping to peddle the use of a ‘universal’ DSP library—then it should be easier to add effects as desired (as personally I'm also pining for a compressor and master gain). I looked a little at the docs for AudioFX, and it seems to be exactly the thing, having readymade effects that are requested and useful: compressor, equalizer, hopefully gain. Plus afaict ExoPlayer certainly can work with AudioFX. Though there are also other options: like JamesDSPManager in C, but not sure what its benefits would be.

I'm thinking of trying my hand at this myself, however the hard part is likely correctly managing the lifetime of the effects: adding them when restarting playback and stopping afterwards. Alas, that's exactly where Android-specific experience is probably necessary.

Another consideration is that desired corrections are usually specific to certain podcasts (e.g. some of them are consistently too quiet)—so effect settings would work better being associated with a subscription, which involves interface additions that might not be straightforward. Then again, it should be manageable if the workflow is not overcomplicated and the applied effects are always dependent on the playing podcast.

As for equalizer in particular, I'm not sure what other people do when they happen upon an episode with incessant hissing on sibilants or booming low frequencies from a bad mic setup—but personally I'm exporting the file and using the equalizer in VLC. It helped me with quite a number of podcast episodes and audiobooks, especially when walking on streets that are already noisy. Hopefully, if a DSP library is used then implementing an equalizer becomes a matter of adding calls to initialize or destroy it, and a dialog to set gain values.

I'm more hoping to peddle the use of a ‘universal’ DSP library—then it should be easier to add effects as desired (as personally I'm also pining for a compressor and master gain)

This sounds a bit like abracadabra to me. But glad you did some thinking that might help people with a better understanding of this forward :)

I'm thinking of trying my hand at this myself 
 manageable if the workflow is not overcomplicated

The first thing would be to come up with UI & UX proposals: how would it look & how would people use it (without getting it in the way for others). So if you want to make a start with this, you actually can ;)

I'm exporting the file and using the equalizer in VLC

Oh my, that sounds like quite a bit of hassle. Glad I'm not subscribed to podcasts that are so bad :P

I did a bit of research and dirtied my hands somewhat. To clarify: AudioFX is a collection of classes under android.media.audiofx in the Android SDK, which seem to provide several audio effects. However, it turns out that AudioFX is not a DSP library itself, i.e. it doesn't do any processing per se: it's an API for effects that are implemented in Android's audio system.

Good thing about this is that it's very easy to enable these effects: barely knowing anything about Android development and Java in general, I kludged up ExoPlayerWrapper to use AudioFX' LoudnessEnhancer (because I like having the choice to listen to quiet podcasts too). Also found the PR #726 which is pretty much all that's needed to enable the effect. Though, since the effects are bound to system-wide ‘audio session ids’, I haven't yet figured out when this session id is deleted and the effect should be ‘freed up’. But in general, adding the UI for effect settings and tying them to podcasts will likely take more effort than the code to control the effects.

The downside is, available effects depend on a particular version of Android and its audiosystem, including vendors' modifications and third-party ROMs. E.g. the compressor seems to only appear since API 28, under android.media.audiofx.DynamicsProcessing. Also I've noticed a couple apps unsuccessfully trying to use the equalizer on my phone (including the open-source app Voice for audiobooks)—which suggests that the EQ just isn't there, despite the system being Android 10; while Samsung phones seem to have it, from what I've heard.

BTW, the Voice app works with effects in pretty much the same way as AntennaPod would, so it probably can be used as a reference. (And I should take a look at its code in regard to freeing up the effects.)

Could you share some screenshots of this Voice app, and/or a link to a store or website to get an idea of the UX/UI?

Ah, yes: here it is in the Play Store and in F-Droid, and here's the Github project. In regard to the effects UI, it simply has a toolbar button for the playback speed dialog and two menu items for the equalizer and the loudness control (they might move dynamically between the toolbar and the menu depending on the screen width—not sure). The EQ invokes some seemingly system-provided dialog that has a few dials but doesn't do anything on my device. Playback speed and loudness are just one slider each.

The amount of overlap with AntennaPod in terms of the playback UI is quite remarkable (even if it's “just an Android playback app” by now). One difference is, since Voice is centered on long-playing audiobooks while AntennaPod is for series of short episodes, the applicability of effects is not the same: AntennaPod probably does need the options to enable effects for either one episode or an entire podcast, like what it has now with the playback speed.

I'm not really sure how to better accomplish that: I myself was a bit surprised when playback speed wasn't remembered between episodes—even though I previously went through all the settings screens and have seen the dial that applies to the whole podcast. I wonder if a single screen would work better, with a toggle to remember the settings for the podcast—however this solution still doesn't seem quite elegant. But I do think that the effects need to be adjustable on the fly when listening, even if they're to be remember for the whole series: it's a rather tough call to dial in the settings blindly.

In general, I see two options for the effects UI: either add each effect as an item in the ‘⋼’ menu, or use one dialog with a tab-style switcher. The second one appeals more to me, especially since AntennaPod already has a dialog with some adjustments. Using just one big screen without the switcher is not an option IMO: even if the EQ is not implemented, the compressor still likely needs at least a couple sliders (for the threshold and the ratio—if they can't be done well behind just one ‘aggressiveness’ slider).

(BTW, I could make a separate issue for the AudioFX and effects UI discussion, for better visibility—since it's not really about the EQ anymore. Dunno if there's already one for the UI, at least I haven't seen it.)

I could make a separate issue for the AudioFX and effects UI discussion, for better visibility—since it's not really about the EQ anymore. Dunno if there's already one for the UI, at least I haven't seen it.

I I understood you correctly, you're suggesting that AudioFX is the best solution to getting an equalizer in AntennaPod. If that's indeed the case, UI integration is an important question that should be addressed together with the technical aspects, so I don't think a separate issue would make sense :)

Eh, it seems like AudioFX is the easiest solution for other requested effects like compression and extra loudness, seeing as it's right there in the standard library. Which effects I also want—compression especially is likely more useful than the EQ. I'm guessing that a meta-approach is in order here, since once you figure out one simple effect, e.g. loudness, others are mostly more of the same—while the UI is common to them all and probably better planned together.

As for the EQ, it seems to be more rarely available via AudioFX (e.g. signs point to it not being on my device—though I'll yet try to summon it), and apparently it usually has just those five bands, which might be too crude for filtering out noise but not voice. Third-party DSP libs might do better, but since they work directly with sound, they are likely implemented in C and require JNI, NDK and whatnot. And I'm not sure that they would plug into e.g. ExoPlayer and standard audio sessions.

Dunno if there's any data on the availability of AudioFX effects on different phones out there—it would be useful but is probably a tall order with the Android ecosystem.

Other options
1) users can install their own equalizer app

2) This open source view might do the job https://github.com/bullheadandplato/AndroidEqualizer

3) we might need to discuss more about whether this feature is useful, if yes, does this apply to a single podcast or global across all podcasts

does this apply to a single podcast or global across all podcasts

I am not really in favor of adding even more per-podcast options. Users already struggle with finding basic settings. Adding even more will make this harder and harder. The average user probably does not even know what an equalizer does. I regularly have to read complaints by users who tick some settings without understanding what they do, who are then surprised by the effect a few days later. I am fine with having an equalizer button in the audio controls dialog that has global effect, though.

users can install their own equalizer app

That seems to not be possible on Android 10, from my research, as Google keeps tightening global permissions. Additionally, personally I have no need in any correction effects when using Youtube, for example, or watching films in VLC.

As for the UI and usefulness—that's approximately why I'm suggesting starting with simpler effects like loudness and compression.

@decadent are you going to submit a pull request / code to work on this issue? I can tackle it later, after I look at all the media player and Android Auto issues

I hope to do that—so we have something material and not just the discussion. However, it won't be very soon, since I'm not familiar with Android UI programming currently and my coding schedule is lacking.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

fabolhak picture fabolhak  Â·  3Comments

mamehacker picture mamehacker  Â·  3Comments

keunes picture keunes  Â·  4Comments

gappleto97 picture gappleto97  Â·  3Comments

maxxo picture maxxo  Â·  4Comments