Bfxr is an elaboration of Sfxr, a program of choice for many people looking to make sound effects for computer games. Bfxr has moved in the direction of increased complexity and range of expression. All the buttons that you know and love are here, but there are some new things as well:

  • 5 new waveforms : triangle, breaker, tan, whistle, and pink noise.
  • 3 new filters : compression, harmonics, and bitcrusher.
  • Ability to lock parameters during mutation/randomization.
  • Expanded pitch-jumping abilities – good for arpeggiation effects.
  • Visualization
  • Mixer
  • Keeps your sounds and mixes in persistant lists.
  • Can reverse synths
  • Ability to link directly to sounds

You’re free to use the sounds in whatever form you want, in noncommercial or commercial projects. The program has been made using Adobe Air.


	Bfrx API example.

	An example showing four types of sound generation.

		1: synthesized on the fly
		2: precached
		3: mutated on the fly
		4: precached mutations

	For realtime applications, I *strongly* recommend precaching :)

	And yes, you'll need a different Bfxr instance for each sound.

	One other note: 
		- Synthesis is substantially slower in debug mode than final release 
		  builds, so don't get too down if it makes things a bit laggy while 
		- The caching API in this version is synchronous.  This means that 
		  the program can't do anything while caching sounds.  
		- Mixes take longer to generate than plain 'ol synths, so they can
		  take substantially longer to generation mutations for.

	Stephen Lavelle

	This is all distributed under the Apache License 2.0

	import com.increpare.bfxr.Bfxr;

	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.ui.Mouse;

	import ui.TinyButton;

	[SWF(width="220", height="120", backgroundColor="#C0B090")] 

	public class Bfxr_API_Example extends Sprite
		// This is a sound data string, directly copied from Bfxr.
		private const soundData:String = ",0.5,,0.3484,,0.2472,0.3,0.4135,,0.2198,,,,,,,,,,,0.015,,,,,0.4293,,,0.0539,,,,masterVolume";

		private var sound1:Bfxr;
		private var sound2:Bfxr;
		private var sound3:Bfxr;

		public function Bfxr_API_Example() 
			//Cache sounds

			//Make GUI
			var b:TinyButton;

			b = new TinyButton(Button1Click,"Runtime Synthesize");
			b.x = 10; b.y = 10;

			b = new TinyButton(Button2Click,"Play Precached");
			b.x = 10; b.y = 40;

			b = new TinyButton(Button3Click,"Cached Mutation");
			b.x = 10; b.y = 70;

		private function InitSounds():void
			//sound 1 : load , but do not cache
			sound1 = new Bfxr();

			//sound 2: load + cache
			sound2 = new Bfxr();

			//sound 3: load + precache mutations
			sound3 = new Bfxr();
			sound3.CacheMutations(0.05,10);	//cache 5 mutations

		private function Button1Click(caller:TinyButton):void

		private function Button2Click(caller:TinyButton):void

		private function Button3Click(caller:TinyButton):void
			//If mutations have been cached, this will play a random one.

Sound . URL.