A couple of reasons.
The first is just that the way earlier versions of Crystal did multithreading really started to hamper Benben, and even broke it with Crystal v1.15.x. Normally this would just mean fixing it to run on newer versions, but I had to support Crystal versions back to 1.5.x because some BSD repos shipped that as default in their repos (e.g. Dragonfly BSD; not sure if they still do or not). Execution Contexts weren’t ready yet, either. It got to the point where every solution I thought up was a bandage, but I was already having to do bandages because of the deprecations and changes between releases. All I needed was simple: access to actual OS-level threads. So I could either keep applying bandages, or just move to another language where I didn’t need them. I chose the latter.
Next, I was planning to possibly move Benben to a plugin system instead of baking everything into the binary. Plugins would have to be shared libraries, however, which are technically possible with SBCL, but aren’t (weren’t?) possible with Crystal without pain and more hacks. Plans later changed and I dropped plans to have plugins for Benben, but this was a much more recent decision.
Lastly, SBCL in particular has a very nice SIMD interface. So porting Benben to Lisp means it gained SIMD support with minimal effort.
In the end it worked out. I haven’t needed any additional hacks to keep things working, performance is nearly the same (SBCL’s GC is arguably a better GC imo), and my daily development cycle actually went faster. I attribute the last bit, the speed of my development cycle, mostly to Lisp’s REPL and image-based development, but also to the fact that it doesn’t have LLVM as a backend (side note: I really, really hate LLVM in general and usually avoid working in languages that use it). Ease of dependency management took a hit when I moved Benben to Lisp, as did memory usage, but I feel these were worthwhile tradeoffs in the end.
I’m working on the v1.0 release of Benben this year. A lot has happened since the v0.6.x time. I also started another music player project (this one written in Object Pascal) that is not meant to replace Benben, but offer an alternative type of usage and plugin support. I have a few thing that have remained in Crystal, which you can see on my site, but a lot of my stuff moved to Lisp or Pascal since Benben.