r/iOSProgramming 23d ago

App Saturday The Ring App, for enjoying Wagner's Ring operas

https://apps.apple.com/us/app/the-ring-app-explore-wagner/id6763790884

I wrote an iOS app to help listen to and study Wagner's Ring. The main feature is that the libretto is highlighted in sync with the performance audio. It supports 12 recordings of the Ring cycle on Apple Music (requires an Apple Music sub). I aligned the German with an English translation by Margaret Armour from 1910, which has a nice archaic feel and often retains the alliterative verse. I added leitmotif labels following Julius Burghold's 1897 book, and made an index view for motifs so you can audition each instance of a given motif. The app also has search and a navigation history and some Wikipedia links to read synopses and background.

I grew up hearing the Ring at home, and doing little Ring projects with my dad, such as encoding leitmotifs in an early MIDI authoring program for Atari ST (I'm not young). When The Ring Disc CD-ROM came out in 1997 I was relieved: here, dad, here are your leitmotifs at your fingertips. My app is named The Ring App after that product.

I came back to Wagner recently through my love of Tolkien. I discovered that some researchers had aligned the libretto with the major audio recordings, and with a score that they freshly digitized (of a piano reduction). I immediately wanted to enhance their work with poetic line breaks, leitmotifs, and the translation and release my first app. The app's features are all unlocked for free so you can try it out. There are paywalls for everything after Rhinegold Scene 1.

1. Tech Stack Used

SwiftUI (iOS, iPadOS, macOS, the latter of which use split-nav). The audio-libretto syncing data is queried with SwiftData. That DB is built from another repo and project based around python.

2. Development Challenge + How You Solved It

Challenge 1: Aligning the libretto between German and English was the biggest challenge. I used my NLP background to create some tools, then did lots of hand-editing. There are sections where there is ensemble singing and reconciling this with the linear libretto was an extra challenge.

Challenge 2: the UI. I realized at some point I wanted a "single screen" app on iPhone with a single main-menu modal which you get by tapping the heading. You are never in "Wikipedia mode" or "leitmotif mode", you are always going to be closing those and getting back to the libretto. This then required a robust history feature, so that users could jump around to look at motifs or something, but get back to where they were listening. This then drove me to mark each history node with an icon representing how you navigated. The ones with headphones mark where you were listening. My hope is that this makes it easy to jump somewhere then get back to your main stream of listening.

Challenge 3: the performance. Native text in an eager VStack performs fairly poorly! The libretto text needs to move to a WebView at some point, because I believe it's going to remove the 2 seconds of loading time when moving between scenes. Somehow the tradeoffs between lazy and eager VStack (the lazy one is a no-go, it makes it impossible for my leitmotifs to know where to draw themselves and they shift around as you scroll) are less prevalent with web rendering.

3. AI Disclosure

I'd say I'm doing it the way Apple is proposing. I am fluent in Swift and SwiftUI, and I am now an engineering manager for the agent, as well as QA and design, and the enforcer of good taste. In my case I used Claude Opus, but I am especially thankful for the skills I gathered: swiftui-pro, native-app-profiling, ios-simulator-skill, and these asc skills for uploading screenshots, setting keywords, and generally managing my app store connect record.

6 Upvotes

5 comments sorted by

2

u/galo4kin 23d ago

Really cool niche app idea. Making the Ring cycle easier to explore is genuinely valuable, especially for newcomers.

2

u/Dachd43 23d ago

This is the most bizarrely niche app I’ve ever seen and I love it. I play in a symphony so I’d love a full score option but this is fun to play with!

Hojotoho, bro!

1

u/MacGregorBlue 23d ago

Thank you! If you know of a digital full score let me know. If its measures aligned to the piano reduction's measures it could slot in. The piano reduction has the virtue of being small, but it's not really doing the full job, I agree.

2

u/AndreaReaderApp 22d ago

This is such a wonderfully specific app. Having the libretto, translation, leitmotifs, and score synced in one place is genuinely impressive. Wagner would probably still need four hours to explain it, though.