• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

Sorana Flow — free macOS music player with DSP (feedback welcome)

Thank you for this prompt reply. I have a much better picture in my head now. You won't believe some of the weird pictures that were going through my head. I'd pictured much less 'human in the loop' than the process you're describing.

So is the "coding" all just pulling objects from various libraries and assembling them? Or is there some automated in-line coding going on as well? You must be pretty conversant in C++ in order to be able to tie this all together and be able to do the debugging? So you're not a total coding beginner.



So you're doing this all command line? Not using Xcode? I've played with that a little bit ("hello world").
It's a mix of both — not just gluing library calls together, but not writing every algorithm from scratch either.

For example, the DSP math, I understand the theory well enough to specify what I need and verify the output makes sense, but I rely on AI to write the boilerplate and catch syntax-level mistakes. For the audio pipeline architecture and the Qt UI logic, I'm much more hands-on in reviewing how pieces connect.

As for C++, I wouldn't call myself an expert. But I think I have enough background to read the code, understand what it's doing, and catch obvious problems. But I definitely make mistakes a seasoned C++ developer wouldn't, and the bug reports from this community have exposed some of them. The 190-unit-test suite helps catch regressions, but it's not a substitute for deeper expertise.

And yes, all command line, cmake, make, then run the binary directly in terminal. No Xcode. One of the reasons I chose C++ with Qt6 from the start is that I'm planning a Windows port down the line, keeping the codebase cross platform matters more to me than the convenience of an Apple-only IDE.

Edit: the 190-unit test has replaced to mostly manual test now
 
Last edited:
Next update will be This weekend or a day or two earlier/later, and would be much stabilized. I'm working 24 hours a day testing everything manually.
 
Thank you for this prompt reply. I have a much better picture in my head now. You won't believe some of the weird pictures that were going through my head. I'd pictured much less 'human in the loop' than the process you're describing.

So is the "coding" all just pulling objects from various libraries and assembling them? Or is there some automated in-line coding going on as well? You must be pretty conversant in C++ in order to be able to tie this all together and be able to do the debugging? So you're not a total coding beginner.



So you're doing this all command line? Not using Xcode? I've played with that a little bit ("hello world").
I just remembered something, Most vibe coders don't work like me. It doesn't mean I'm amazing nor something like that. They believe if they send a prompt to AI, AI would make a perfect app at once but they just make working app, not stabilized,with non working functions. And also Ai users should know that ai is designed to be the user's side.
 
I have currently fixed most of the bugs, manually testing them all. I'll release when the manual test all passes
 
Sorana Flow v1.11.0 — USB DAC Freeze Fix, Signal Path Improvements & Settings Overhaul

Hi everyone,

v1.11.0 is out with a significant round of fixes. I want to be upfront about something first.

---

A Note on Testing

Previous releases relied on a limited set of manual tests. That wasn't good enough, and I apologize if anyone experienced issues that better testing would have caught — particularly the freeze issue some USB DAC users may have encountered.

Starting with this release, I've implemented a full-scope manual testing process: 107 settings controls audited across all 5 tabs, every signal-slot connection verified, and a comprehensive test matrix covering toggle states, persistence, edge cases, and regression checks against the audio pipeline.

I take the quality of this software seriously, and I'm committed to doing better. Thank you for your patience.

---

Beta Testers Wanted

I'm looking for beta testers to help catch issues before they reach public releases. If you're interested:

- Communication: Google Chat (Space) — real-time discussion, bug reports, and feedback
- Beta builds: Distributed via my NAS (private download links)
- Debug tool included: A simple app that records logs automatically — no terminal required

If you'd like to join, DM me or reply here. All experience levels welcome — especially if you use USB DACs, NAS libraries, or Apple Music integration, as those are the areas that benefit most from diverse testing environments.

---

What's New

Critical Fix — USB DAC Freeze
The app's 2-second device polling timer was calling CoreAudio property queries synchronously on the main thread. If a USB DAC was unresponsive (USB flake, firmware hang, power state issue), the query would block indefinitely, freezing the entire UI. This affected users with devices like the Emotiva DC-1 and potentially other USB DACs.

Fix: All device alive-checks and enumeration now run on a background thread. Results are posted back to the UI thread asynchronously. The main thread never blocks on CoreAudio device queries anymore.

Signal Path — SRC vs Upsampling
Previously, when Output Sample Rate was set to a fixed value (e.g., 88.2 kHz) with Upsampling toggled OFF, the signal path incorrectly showed "Upsampling High, Linear Phase." The upsampler was being activated identically for both user-initiated upsampling and forced sample rate conversion, with no way to distinguish the two.

Now the signal path correctly shows "Sample Rate Conversion" with just the rate change (e.g., "44.1 kHz → 88.2 kHz") when it's a forced output rate, and "Upsampling" with quality/filter details only when you've explicitly enabled upsampling.

DSP Settings — No Longer Frozen
When DSP Processing was toggled OFF, all controls below it (Volume Leveling, Crossfeed, Convolution, HRTF, EQ) were completely frozen — you couldn't click anything. This was caused by Qt's setEnabled(false) propagating recursively to all child widgets.

Fix: Replaced with an opacity-based visual dimming (40% opacity). Controls are visually dimmed when DSP is off but remain fully interactive, so you can configure your DSP chain before enabling it.

Settings Cleanup
- Output Sample Rate moved to the Output section (was buried deep in Quality section — some users couldn't find it)
- Format Badges and Album Art toggles in Appearance now actually work
- Apple Music quality selection persists across restarts
- Removed 4 placeholder controls that had no backend implementation
- HRTF/Crossfeed mutual exclusion now uses deferred signals to prevent potential UI cascade
- Settings tab opens faster with cached device capabilities

---

Technical Details for the Curious

The USB DAC fix involved migrating AudioDeviceManager's device polling from synchronous main-thread CoreAudio calls to QtConcurrent background execution with QMetaObject::invokeMethod(Qt::QueuedConnection) for thread-safe result delivery. An atomic re-entrancy guard prevents overlapping poll cycles.

The signal path fix added a forcedByOutputRate flag to UpsamplerProcessor and two new fields (upsamplingEnabled, forcedOutputRate) to the AudioState struct, allowing SignalPathBuilder to distinguish the activation source and label accordingly.

Full post-fix verification: 11-step code audit confirmed all 7 fixes correctly applied, all signal-slot connections intact, and zero modifications to the RT audio processing pipeline.

---

Download: https://soranaflow.com/downloads
Requirements: macOS 14+ (Sonoma), Apple Silicon (M1+)
Support: https://ko-fi.com/ruki7423

As always, feedback and bug reports are welcome. I read everything.
 
Last edited:
Website rebuilt for better UX!
Please leave a comment if you love the new UI!
Thanks!
 
v1.11.1

Quick hotfix — just a string comparison issue where macOS AudioToolbox decoders return "alac_at" instead of "alac", so the lossless check was failing. Nothing major.

- Signal path now correctly shows "Lossless Decode" for ALAC/FLAC
- Overall quality no longer shows "Unknown"
- Limiter displays ms instead of raw samples

Download: https://soranaflow.com/downloads
 
Sample rate changes now take effect and stick. Nothing below "Volume Leveling" in the Audio Settings seems to be working - it's all dimmed even when you toggle. When an album completes nothing happens, Autoplay/Radio does not engage.
 
Thanks for the update — glad sample rate is working now.

For the dimmed settings below Volume Leveling: that's controlled by the DSP master toggle at the top of the DSP section. When it's off, all DSP controls below it are visually dimmed. If you toggle that master switch on, everything should become active. Let me know if it's still unresponsive with the master toggle enabled — that would be a separate bug.

Autoplay/Radio: noted, I'll look into the queue completion logic. When the last track finishes, does the app stay in a "finished" state or go back to stopped? Any detail helps.

Appreciate the thorough testing.
 
When an album finishes it just stops. Nothing happens until I select another album, song, etc.

The DSP section does not respond when toggled, everything above this seems to work:

nope.jpg
 
When an album finishes it just stops. Nothing happens until I select another album, song, etc.

The DSP section does not respond when toggled, everything above this seems to work:

View attachment 514058
Thank you for the bug report. For better diagnose, if you don't mind, would you use reporter on my site? https://soranaflow.com/support
And thank you for coming back again. I learned a lot from you. Thanks.
 
Last edited:
When an album finishes it just stops. Nothing happens until I select another album, song, etc.

The DSP section does not respond when toggled, everything above this seems to work:

View attachment 514058
Hi, I thought for some time, and want you to check something.
When an album finishes it just stops. Nothing happens until I select another album, song, etc.: default is Repeat Off + Autoplay Off so I'd love you to check that.
The DSP section does not respond when toggled, everything above this seems to work: you mean you toggled the master dsp on right? If it's turn off, everything under it will dimmed and not work.
 
v1.11.2

Quick hotfix — the codec cache was being read after the decoder already closed, so Signal Path always saw an empty codec string. Now cached at decode time.

- Signal Path no longer shows "Lossy Decode" / "Unknown" for lossless files
- Limiter shows "1.5 ms" instead of raw sample count "(+66)"
- Album art no longer starts tiny on first launch

Download: https://soranaflow.com/downloads
 
v1.11.3

Bluetooth hotfix — the app was forcing sample rate and buffer size on BT devices without restoring originals on quit. This corrupted the device state, causing audio stuttering that persisted even in other apps until BT reconnect.

- BT devices now skip sample rate forcing (CoreAudio resamples internally)
- Original sample rate and buffer size restored on device close/quit
- New "Show Lyrics" toggle in Settings → Appearance

Direct download: https://github.com/ruki7423/Soranaflow/releases/download/v1.11.3/SoranaFlow-1.11.3.dmg

⚠️ Heads up: migrating hosting from Netlify to Cloudflare over the next few hours. soranaflow.com may be temporarily unreachable during DNS propagation. Downloads will still work via the GitHub link above.
 
Site hosting migrated from Netlify to Cloudflare. soranaflow.com is back up and running.

You should notice faster load times thanks to Cloudflare's global CDN (330+ edge locations). Security is also improved with built-in WAF and DDoS protection.

No changes on your end — same URL, same downloads. If you hit any issues accessing the site, hard-refresh (Ctrl+Shift+R / Cmd+Shift+R) to clear cached DNS.
 
As it seems the app for mac has pretty stabilized now, I'll start porting to windows. Please tell me if there's any bugs or advices
 
Congrats, Mac mostly working! DSP section active PEQ's work as well as loading a LR impulse IR, what few AU plugins I could get to activate (that weren't Apple bundled) had a problem of not fully displaying within the window making them unusable. No VST3 plugins loaded.

The Autoplay/Radio is still buggy - it works but it'll play 3 to 6 songs from another album before switching to another album or artist and play another 3 or 4 etc.

Edit Tags/Fix Meta Data is hit or miss with successfully filling blank fields.

I'll start using the app for daily listening, if all goes well, I'll get that free trial Apple keeps offering me for streaming and see how that goes. It would be nice to have gesture controls to swipe back to artist from album etc. I'll keep a list of GUI improvements I like/find frustrating.
 
Congrats, Mac mostly working! DSP section active PEQ's work as well as loading a LR impulse IR, what few AU plugins I could get to activate (that weren't Apple bundled) had a problem of not fully displaying within the window making them unusable. No VST3 plugins loaded.

The Autoplay/Radio is still buggy - it works but it'll play 3 to 6 songs from another album before switching to another album or artist and play another 3 or 4 etc.

Edit Tags/Fix Meta Data is hit or miss with successfully filling blank fields.

I'll start using the app for daily listening, if all goes well, I'll get that free trial Apple keeps offering me for streaming and see how that goes. It would be nice to have gesture controls to swipe back to artist from album etc. I'll keep a list of GUI improvements I like/find frustrating.
Thank you! It's an honor that it became your daily listening app! As it's more important to make the mac app work better, I'll keep on fixing all until it became perfect!
 
My Roon subscription just renewed on me automatically so I guess you've got another year to make this thing good. :p

There's a lot more things to be done before you start porting to other platforms. Currently unusable until the radio feature is fixed, would be nice to give the user more options to alter the GUI (not a fan of the blue), the problem with compilations listing each artist as a separate album still persists, sample rate and other DSP settings are not persistent after closing and reopening the app, fixing metadata fetch and cache - lots of important stuff.
 
My Roon subscription just renewed on me automatically so I guess you've got another year to make this thing good. :p

There's a lot more things to be done before you start porting to other platforms. Currently unusable until the radio feature is fixed, would be nice to give the user more options to alter the GUI (not a fan of the blue), the problem with compilations listing each artist as a separate album still persists, sample rate and other DSP settings are not persistent after closing and reopening the app, fixing metadata fetch and cache - lots of important stuff.
Thank you for thoughtful advise! As I have my job, I am using all my part time imprivimg the app! You'll see perfectly roon-alternated but cheap app after a few years. Thanks!
To be honest, I said I'd start porting but I'm not doing it as I think perfect mac app is first. Thank you so much!
 
Last edited:
Back
Top Bottom