Overcast 2.5 is now available, bringing major under-the-hood improvements and some of the most requested features to my iOS podcast player.
Dark theme and file uploads for patrons
A dark theme has been Overcast’s most requested feature since 2.0 knocked streaming off the list. I also wanted to offer patrons something special for supporting Overcast, but didn’t want it to be something for which its absence would make the app significantly worse for non-patrons (like the old pre-purchase restrictions). The dark theme was a perfect fit.
It features Apple’s new San Francisco font and a modern blue accent color for a fresh new look that’s still distinctly Overcast. I love it, and I hope you do, too.
I also often get requests for Overcast to play files outside of podcast feeds, such as lecture recordings, audiobooks, and privately distributed podcasts.
The new Uploads feature lets patrons upload DRM-free audio files for their own personal use (not publicly shared). One unexpected use I’ve found for this: podcast producers playing draft episodes before publishing.1
More battery life
I don’t know anyone who couldn’t use a bit more battery life from their iPhone, so I wanted to make sure I was doing everything I could to minimize Overcast’s power consumption.
Apple doesn’t provide precise enough tools or APIs for developers to usefully measure real-world battery consumption, so I first had to make my own battery-benchmarking tool using private APIs.2
Overcast was already pretty efficient, but the EQ-bars visualizer was a significant battery drain (and was so distracting that a very large portion of users had disabled it), so I’ve replaced the visualizer with a smaller, simpler, far more efficient one inside the Pause button:3
Old visualizer bars at left, new bars inside the Pause button at right.
After many hours of experimentation and optimization, I’ve highly optimized Overcast’s audio engine and UI to match or exceed the efficiency of Apple’s built-in Podcasts app in normal playback.
In the first two graphs, these aren’t realistic numbers for real-world use. The testing iPhone was running no other apps, received no notifications, was connected only to Wi-Fi (no cellular), and except in the last graph, wasn’t actually driving any headphones. The tests were designed to test efficiency differences in the audio engine and playback UI. Only their relative differences matter, not their absolute values:
Overcast 2.0 vs. 2.5 and Apple Podcasts Approximate hours of battery life on iPhone 6, headphone cable to nothing
As you can see, turning the screen off is a huge battery saver.
People often ask whether faster playback speeds or Overcast’s Smart Speed® and Voice Boost® effects use significantly more power. Fortunately, they have only a small effect on battery life:
Speeds in Overcast 2.5 and Apple Podcasts Approximate hours of battery life on iPhone 6, screen off, headphone cable to nothing
Finally, while I was set up for testing, I wanted to test the battery differences between different output types. For instance, how much of a difference is there between wired and wireless headphones? Is AirPlay a big battery drain?
Output types in Overcast 2.5 Approximate hours of battery life on iPhone 6, screen off, at maximum volume
Some results were unsurprising: Compared to wired headphones, Bluetooth headphones cut battery life by about a third, while AirPlay cut it about in half. But the biggest battery drain is the built-in speaker, which is even more costly to the battery than AirPlay.
Maybe I thought I needed to improve battery life so much because I often play podcasts through the built-in speaker with the screen on. Now I know I shouldn’t, but it’s so convenient.
So I figured I might as well make it sound better.
Voice Boost for iPhone speakers
The iPhone’s built-in speaker sounds, well, sub-optimal. In 2.5, with Voice Boost enabled, it sounds a hell of a lot better.
Yes, I’m crazy. Pardon the dust.
I’ve developed a separate Voice Boost profile for the iPhone speaker, which boosts volume even further than before while dramatically reducing real-world distortion and harshness, especially with the phone on a flat surface.
It’ll never sound like a great full-size speaker — you can’t beat physics — but it’s significantly improved for podcast listening.
I’ve also improved a bunch of little things, fixed bugs, and added a few more features:
- Tapping inactive episodes now adds them, rather than immediately playing them via streaming. (Tap again to play.) It’s a happy middle ground between the fast 1.0 interactions and the streaming capabilities in 2.0.
- Batch Add/Delete All episodes for a podcast. (Finally!)
- The directory window now stays open after adding a podcast. (Finally!)
- Much faster syncing, with much less data usage. This was a major architectural change to the app: in short, when browsing the back-catalogs of your podcasts, it now fetches the “All” episodes list on demand rather than storing and syncing them all constantly for offline reference (which was mostly pointless, since you can’t listen to any undownloaded episodes when you’re offline anyway).
Overcast 2.5 is a free update, and everything except dark mode and file uploads is completely free for everyone. Get it now!
This feature has actually existed since 1.0, but was only enabled for me — I delayed the public release for all of this time because I didn’t have a recurring revenue stream in place to pay for its ongoing S3 hosting costs. Now, with patronage, I do. ↩︎
I initially explored many different options to try to read raw battery data, including jailbreak tools, but the jailbreaking route was a dead end. My final tool and testing were on a clean, non-jailbroken iPhone 6, using private IOKit APIs via dynamic loading, to monitor the battery’s change in charge level over time. (The public UIDevice battery status isn’t precise enough.) ↩︎
Audio nerds may assume that the old EQ-bars visualizer was so computationally expensive because it ran an FFT, rather than the new one’s simple peak-level metering. But the FFT wasn’t a huge cost — the more expensive part was alpha-blending all of those animated bars over the background layer at a reasonable framerate. I designed the new one to push fewer pixels and process only opaque layers. ↩︎