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.

Sample

/*
	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 
		  testing.
		- 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.

	http://www.bfxr.net

	Stephen Lavelle
	analytic@gmail.com

	This is all distributed under the Apache License 2.0
	http://www.apache.org/licenses/LICENSE-2.0

*/
package
{
	import com.increpare.bfxr.Bfxr;

	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	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
			InitSounds();

			//Make GUI
			var b:TinyButton;

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

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

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

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

			//sound 2: load + cache
			sound2 = new Bfxr();
			sound2.Load(soundData);
			sound2.Cache();				

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

		private function Button1Click(caller:TinyButton):void
		{
			sound1.Play();
		}

		private function Button2Click(caller:TinyButton):void
		{
			sound2.Play();			
		}

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

	}
}
Sound . URL.