ttencate / jfxr

A browser-based tool to create sound effects for games.
http://jfxr.frozenfractal.com/
429 stars 45 forks source link

Feature request: Extendable sound types #27

Open csanyk opened 9 years ago

csanyk commented 9 years ago

I asked the developer of bfxr for this feature once, and he declined to add it to his project, but I still think it's a good idea. I’d like to be able to create additional “classes” of sound effect, beyond “Pickup/coin, Laser/shoot, Explosion, Powerup, Hit/hurt, Jump, Blip/select”.

I’d like to see a means by which people can develop their own categories for other types of sound, and extend *fxr by adding them and sharing them.

There’s so many categories that aren’t currently well represented by the existing ones: wind/surf, voices, vehicle/engine, alarm/siren, and so on.

Someone with advanced knowledge in audio engineering could design “sound profiles” for these by setting range constraints on the various sliders, and then save that as a new sound type.

Ideally, rather than adding these specific categories, if you made jfxr extendable in this way, anyone who uses it could create new sound types and then save them for later use, or even share them so that anyone using jfxr could use them.

ttencate commented 9 years ago

That's an interesting idea! The current presets are slightly more sophisticated than just a range on each slider, but it's still very straightforward code: https://github.com/ttencate/jfxr/blob/master/src/presets.js Most of it is "with a probability of P, change parameter S from its default value to a uniformly chosen random value in the interval [A, B]". That pattern could be captured in some additional UI controls that don't show up by default.

That said, it's a fair amount of complexity for a feature that I fear few people will use. JFXR isn't really aimed at professional audio engineers, so I doubt we'd get many contributions -- they would probably use a more powerful tool (Matlab?). Same goes for private use of these presets -- how many "surf" sounds would anyone need, that the Mutate button can't create for them?

But of course, if you do come up with suitable parameters for a commonly usable sound type like wind or alarm, I would welcome your pull request! :)

csanyk commented 9 years ago

Cool, I'm glad that you're open to accepting additional presets:)

I'll take a look at the code and see if I can figure out any new ones. I'm not really an audio guy myself, although I do understand some of the fundamentals... but I have a few friends who are better with it than me, who may be able to help.

JarrydHuntley commented 9 years ago

I'll interested in taking a look into this as well. If we get somewhere I'll submit a pull request.

csanyk commented 9 years ago

Jarryd and I got together today, and he has created a good Surf/Wind preset. It was very easy to incorporate it into the project. The code is quite good to work with! We'll be trying out a few more before we check in our work.

ttencate commented 9 years ago

That's great to hear! Let me know if you need any help or advice. On Jan 3, 2015 6:17 PM, "Chris Sanyk" notifications@github.com wrote:

Jarryd and I got together today, and he has created a good Surf/Wind preset. It was very easy to incorporate it into the project. The code is quite good to work with! We'll be trying out a few more before we check in our work.

— Reply to this email directly or view it on GitHub https://github.com/ttencate/jfxr/issues/27#issuecomment-68602019.

mcanthony commented 9 years ago

I like the idea of custom presets, taking a quick look at the presets and the way they are constructed it would seem relatively trivial using AST generating techniques. The necessary input at a glance would seem to be, a list of OSC types, which parameters to randomize, in what range, and which parameters to statically set. Does that sound about right?

ttencate commented 9 years ago

That wouldn't be able to replace the presets there currently are, because there are often correlations between parameters. Examples: we need to ensure that the low-pass cutoff isn't below the high-pass cutoff, we don't want to set frequency jump 2 without also setting 1, and similar for flanger offset and flanger offset sweep. It's these kinds of ad-hoc conditions that, I believe, make for higher quality presets compared to bfxr and sfxr, where you'll often get just a pop or no sound at all.

So I definitely want to keep this functionality. However, the customizable presets might not need all the flexibility of JavaScript code, and custom presets might still be useful even if they produce the occasional useless result.