I'm doing some work with binaural beats and am trying to build a Java application that can play two sounds at slightly different frequencies...around 25-30Hz difference.
In a perfect world, I'd like to give Java two integer inputs, say 440 and 410, and have Java play back a 440Hz tone and a 410Hz tone.
Given what I've seen in the javax.sound.*
classes, it appears that Java only supports the equivalent of piano notes...A4 @ 440Hz, then A-sharp-4 @ 466.164Hz, and in the other direction, G-sharp-4 @ 415.305Hz. While "adjacent" are generally within the range to produce a binaural beat, I'm trying to achieve more control in the frequency of my tones.
Since simple audio synthesis is nothing more than frequency, intensity and length-of-time, it would appear to me that somewhere in the bowels of the javax.sound.*
classes, there's some kind of lookup that says when I tell Java to play "A4", that's 440Hz . The question becomes whether or not there's a way to hack that table to say that "A4.1" is the equivalent of 449Hz.
I've been messing with javax.sound.midi
, have not explored javax.sound.sampled
yet; it appears that I'd need to sample my tones to use the sampled
classes; I prefer to synthesize. Steer me right if I'm mistaken.
Most of the third party interfaces I've seen are geared specifically toward music production and manipulation, and, as such, are limited in their ability to work with microtones. Does anyone have any experience with or recommendations for a solution?
You can generate samples and send them to the soundcard using the classes in
javax.sound.sampled.*
; basically create a software oscillator.It requires some knowledge, but can be really fun when you get it to work ;)
I was playing with these classed when I created this: http://bobusumisu.net/testing/bobusynth-alpha1/
Here is the tutorial that got me started: http://www.drdobbs.com/jvm/230500178