Some quick questions as we are evaluating FMOD. Its price model seems reasonable, and it’s nice to feel a professional community here in the forums. My background is realtime A/V and 3D graphics for iOS, OSX, and Windows for decades now.
With FMOD’s scope and time on the pond, I presume it’s as mature and optimized as it’s going to get in terms of efficiency. Our usage will be only playing a single channel at a time (a long stream or file) with occasional crossover (4 channels max) and basically not use Studio. And so we are looking for power efficiency, reliable and proper (QAed) background audio support on mobile, and decoder ruggedness. For example, we can appreciate ffmpeg for being a tank – but on mobile it has the fuel economy of a tank.
When looking at a DSP with output only (for audio visualization purposes), it’s not clear how to optimize for that. I didn’t see anything in the docs and the example just copies the PCM. I would think setting the number of DSP output channels to 0 or something would be understood by the DSP engine to just send the same audio buffer to the next DSP in the pipeline. These days the unnecessary copying is less of an issue, but we’re not in the habit of wasting cycles or memory bandwidth but on mobile this adds up.
One item to confirm is that the read-only PCM monitor (the DSP described above) will occur in the case on iOS when playing an AAC stream. With Mathew’s help, I understand that FMOD turns over the stream for hardware processing on iOS. So the question is, will a PCM monitor still work in that scenario? I still have PTSD from how opaque AVFoundation is to deal with and how many gotchas are in that thing. Separately, we would likely adding aac codec support for non-iOS platforms.
Most of our backend is a Go (golang) runtime in an embedded dylib that pushes a UI to Unity (and hopefully Unreal someday). So we’re looking at potentially doing audio control from Go (rather than from Unity). So if we were to invest the time and effort to do proper Go bindings around FMOD (via cgo), is this something anyone else might be interested in? Given FMOD’s maturity and position, Go bindings seems like real value, esp considering that runner ups on Go (portAudio, ffmpeg) fall short of commercial grade. If you’ve never gotten into Go, then as a C and C++ person of maaany years, I only have positive things to say.