Binaural Tones with Surf 2

Hi Steve

Binaural Tones with Surf 2 is quite popular (one of those plug-ins where I think there is a possible case for Audacity distribution).

Anyway one thing we’re asked about from time to time is a version without the surf noise, or (better) a version where you can choose to use surf or not. Certainly my feedback is that the 5th and 6th beat frequencies are little-used (so that may give us some space for a surf choice); and that people might appreciate a simpler way to create say an hour long track where the beat frequency starts at 15 Hz and ends up at 5 Hz.

Any views welcome.



You can turn the surf off by setting the “tone to surf ratio” to 100. But then the tones are very loud and “clip” each cycle.

Here’s the code that does it.

((and (= choice 0) (= ratio 1.0)) ; tones without surf
; apply fade-in and fade-out envelope
(mult (pwl 0 0 fade 1.0 (- dur fade) 1.0 dur 0 dur)
(osc (hz-to-step f) dur *sine-table*)
(fmosc(hz-to-step f) (pwl-list beat-list))
) ; end tones vector
) ; end mult pwl
) ; end tones without surf

Certainly since this special case is already handled, one could scale the output down a bit.

So would advice to set that control to 100 to turn off the surf be adequate? Or do you want a choice control?

– Bill

This was the first time I had glanced at the .ny file and I was looking how easy it was to just remove all the surf code, and that didn’t look easy, so I’d missed that tone=100% would give you no surf noise! I’ve added that hint to the Wiki page. If a user complains about the current effect I usually give instructions to generate two tones 10 Hz apart and make them left and right, without using this plug-in.

I suppose an extra choice control is overkill. I would suggest possibly making the tone to surf ratio the first control of the three concerning surf. If possible, given many people don’t want the noise, it should be reversed - "Surf to Tone ratio (0 = off) and defaults to off.

The usual feedback is that this effect is “too complex” and to generalise, we want something like Binauaral Beat Generator with a possible addition to determine start and end frequencies.

Generally I don’t much like the volume variations as you adjust the Tone to Surf ratio.

Tone to Surf:
100% = 0 dB (clips in View Clipping but not meter, as in 1.0 tone generation)
99% = - 5.9 dB
80% = - 2.7 dB
50% = surf peaks at +1.1 dB
25% = surf peaks at +2.9 dB
0% = surf peaks at + 6.2 dB

Can the output be made more consistent across the ratio values without normalisation holdups? If not, then yes scaling the Tone to Surf = 100% to 0.5 (?) would seem to make sense.

If an explicit error can be added for when you generate with no track or a mono track “Generate a stereo track first” that would obviously be very helpful too. All you get now is “Nyquist returned too many audio channels”.



A while back I was helping someone that wanted to generate “Isochronic Tones” (another “brainwave entrainment” type thing).
While I was working on that, I also wrote a simple “Binaural Tone” generator. It was a much more simple effect than the one by David Sky and simply produce a stereo pair of tones at appropriate (sliding) frequencies to create beats that could begin at one frequency and end at another (or the same) frequency.

Unlike David’s effect, both the left and right channel frequencies could change over time, such that the average frequency remains constant. Also, it displays a progress bar.

I’m not sure if it is too simple, in that it only has an initial beat frequency and a final beat frequency, however, it’s pretty easy to extend to add more.

Here’s the original version:
binaural-old.ny (1.57 KB)
This will appear in the Generate menu as “Binaural Tone…” (singular)
The output level is adjustable (range 0 to 1)

Here’s the extended version that allows multiple ranges of beat frequencies:
binaural.ny (2.14 KB)
This will appear in the Generate menu as “Binaural Tones…” (plural)
The output level is fixed at 0.8, which should be a useful level and can easily be adjusted by the user with the Amplify or Normalize effects, or with the track gain slider (or Mixer board).

Neither of the plug-ins provide fade-in/fade-out as the user can easily “shape” the dynamics however they desire after generating it (just like the other “Generate Tone” effects)

Gale, if you are in contact with anyone that has asked about binaural tones, perhaps you could suggest that they try these plug-ins to see if either of them are more to their liking.

My feeling about the two plug-ins above is that they are closer than David’s effort to something we could consider (or extend) for possible inclusion in Audacity. Being able to maintain average frequency would I think be preferred by many people interested in these beats. I also like the simple way to either keep the beat frequency the same throughout or not.

In “binaural.ny” I found the meaning of the first two “Beat Frequency” fields confusing (initial / final in the “old” is more understandable) and missed the adjustable output level. I think the “old” version may be the better one to polish or extend, even if it only allows a total of two or three sections. After all it’s pretty easy to move the cursor to the end of the stereo tone and generate another. I think though a single control to add noise (defaults to off, up to a maximum level mixed with the tone as in Binaural Beat Generator) would be worth considering.

The user who started this discussion by wanting to turn off the noise has made some other suggestions for a pitch ramp and pan which I’ve Cc’d to you by e-mail as he has not posted here. Clearly it’s hard to have every feature in and allow multi-section generation as well, but as above I think the simpler presentation in your plug-in is a better starting point.


My preference is for the “old” version.
I don’t know a lot about how people want to use binaural tones, but I suspect in many cases they would want either a constant beat frequency, or a “sliding” beat frequency that starts at one speed and ends at another. Either of these can be accomplished very easily with the “old” version.

The “new” version is just a simple extension of the “old” version that allows multiple sections. It’s more of a proof of concept than a solid proposal - do people actually want multiple sections?

<<<it’s pretty easy to move the cursor to the end of the stereo tone and generate another>>>
Yes it is, though there would probably be a glitch at the join. Because there are two frequencies (one on each channel) it is unlikely that there will be a zero crossing point close to end of the first section, so one or both channels are likely to have a discontinuity when a second section is added.
This problem is avoided by the “new” version because it is one continuous (frequency modulated) tone per channel for the entire duration.

The question is - what sort of noise?
One user might want pink noise, another may want the sound of the sea (a real recording), another may want the synthesized “wooshing” of David’s “surf”, another might want a “tinkling” sound.

The easiest and most versatile way would be to only generate the binaural tone and allow the user to generate, record or import whatever other sound they want in another track.

A possible compromise would be to have “binaural tone” as an “effect” type plug-in (rather than a “generate” type) so that the effect would mix the binaural tone with whatever was already on the track. There are swings and roundabouts to this approach.


  • Any type of sound could be used with the binaural tone.
  • There would not be the confusion of having to select a track before generating as effects are always applies to a selection.
  • If the selected track is mono, then the plug-in could create monaural beats.
  • The “binaural tone”+“noise” would be a single track (may be more convenient to keep the two together)
  • Plug-ins could be used to generate a wide variety of “noise” without making the “binaural tone” overly complicated.
  • Less controls in the “binaural tone” plug-in would be required than in David’s plug-in (will fit on 800x600 screen)


  • There would be no way to change either the “binaural tone” or the “noise” or the balance of “tone to noise” once it had been generated without recreating the entire track.
  • It becomes a two step process rather than “all-in-one”.

Many of David’s plug-ins were created in response to a specific user request. I suspect that in the case of “Binaural Tones with Surf”, David was responding to the very specific requirements of one user, which is great for that user, but does not necessarily meet the more general case as well as it could. I think that the overriding disadvantages of including “noise” in the binaural tones plug-in are:

  1. The noise will necessarily be restricted to a very small range of noises which will only suit a few users and will be an inconvenience for everyone else.
  2. By having the noise and the binaural tones mixed in the same track, they are “cooked in” and cannot be independently adjusted. If the user decides later on that they want the “surf” noise a bit louder then too bad, it can’t be done without recreating a new “binaural tones with surf” track.

My preference is for the binaural tone plug-in to only produce the binaural tones and leave the user free to add other tracks with whatever sounds they like. If it does not already exist it might be good to have a separate “surf” generator (could be more versatile than the one in “binaural tones with surf” without being too complicated).

The “pitch ramp” could be quite easily integrated into my “old” binaural tone plug-in, and I imagine this could be a nice feature for many users.
It would probably not be practical for the new “multi-section” version because of the number of controls involved. For each section there would be controls for "initial beat frequency, initial “average” frequency, length, final beat frequency and final “average” frequency. Also, because different frequencies are perceptually louder than others, there would also be a strong case for adding “initial volume” and “final volume” for each section. That makes 7 controls for just one section.

I’m not sure about the practicality of a “pan” feature. Binaural tones are by definition “stereo”. If binaural tones are panned hard right or hard left they are no longer binaural. I think that the person that e-mailed may be talking about a different effect - something that I would call “sinusoidal panning”. I think that such an effect may already exist - if not, it would be easy to make, but it is a fundamentally different effect from “binaural tones”.

That accords with feedback I’ve seen.

Maybe at the start and end, yes. That was possibly part of David’s idea to have a fade, but it goes beyond that to having some sort of section that “works up” to the entrainment and one that “winds down” from it.

Could that be avoided by the plug-in trimming the generated output to zero crossings or would that be only something an “effect” could do?

I think you’ll find a “relaxing” noise that is still noise rather than a real recording would suit the majority of people that want noise at all. Possibly you could make an assumption that once user sets a higher volume level for the noise, it should be more like “pink noise” than a softer, synthesized “surf” sound?

I think the generation needs to be a one-step process (except possibly for running a second pass of the effect to add more “sections”). From what I’ve seen, users interested in entrainment don’t often have a lot of patience to carefully craft their tones by manual methods. I’m clear that any noise generation included should be off by default so that it doesn’t annoy, but tend to think it should be included as most of the literature refers to the option of having noise with the beats.

Advanced users may often wish to mix the beats with real music (I gather they usually choose a tone close to the tonic or dominant of the piece), so some help with equating frequencies to pitch might be handy. But I still feel mixing separate noise and tone tracks may be a burden for many.

Worth considering but not I think a substitute for some basic built-in noise generation. The plug-in “Help” could always encourage people to “brew their own noise” but first they may need to get a quick idea of the effect it has for them.

I’m happy work on the basis of developing the “old” version. My first reaction to the above is that it might make it too complex again for general use, but a demo version could prove me wrong.

I can’t see a lot of point in pan for tones given frequencies of both channels can change. I suppose pan for noise makes more sense.


Cross-fading similar sine tones does not work very well because of how they interact (depending on the phase).

Finding a zero crossing point is problematic because the two channels are gradually drifting in and out of phase. A zero crossing point will only occur when the two channels are exactly in phase. “Calculating” the zero crossing position may not be possible as I suspect there are rounding inaccuracies in the (fmosc) function. “Detecting” the closest zero crossing point to the end is difficult and would probably be very slow.

It may be possible to provide a 2 section version without introducing too many controls, even with the extra features that you suggest.

If we restrict the choice to just one kind of noise (pink noise) then that should be workable.
There isn’t a built in Nyquist function for pink noise, but I’ve written a function that gives a close approximation.

The average frequency could be in standard MIDI notation (“C4” rather than 261.63 Hz) but would that be too confusing for users that are not musicians?

I think the main problem that we are fighting with this one is in providing all the features and options that people want without having an impractical number of controls. Implementing the features is not a problem, it’s just that if we bundle too many features and options into one plug-in there will be too many controls.
Multiple parameters can be bundled into a text input widget (as David did), but I think that is overly complicated for most users.
Feel free to mock-up some interfaces - when we have decided which controls are essential I can fit the code to the interface.

I’ll have a go at putting together a 2 section effect with pink noise.

Here’s a mock-up (non-functional interface) that includes most of the features suggested.
Have I missed anything essential?
Is this too complicated? (it looks a lot more complex than my “old” version).
We’re getting close to the maximum size for an 800x600 screen.
binaural-noise.ny (1.07 KB)

Thanks. Re: “Hz or Note”, I really only meant providing “Help Screen” info (or a link to same) about what the frequency of particular musical pitches was, but if you can enter either frequency or a note that seems ideal - I’d only suggest that frequency should still be the default rather than a note.

I’m unsure about the two “Mid Point” fields and thus whether they are wanted or in the best place. Is Mid Point a “time”, so that it’s always half way along the generated audio whether the user creates one section or two, if so how does user choose the Final Beat Frequency if they only have one section?

Regarding “text widgets” I think they would be fine if Nyquist was able to display each value as separate boxes in a row. Once you have delimited strings it gets beyond most users.


I think that is a better idea than being able to enter a note name. I agree that if the user can enter either then the frequency should be the default, but it would still be necessary to explain / give examples in a help screen and if we are doing that then it is just as easy (and less room for error) for a user to look up the frequency and enter it in Hz.

The “Mid Point” is probably not the best name. What it is intended to mean is the “point” at the end of “Section 1”. The “Mid Point” comes between the “Initial” and “Final” points and is “Period 1 Duration” after the start of the generated sound. If there is a “Final Point” defined, then that will be “Period 2 Duration” after the “Mid Point”.
If there is no “Final Point” defined (Period 2 Duration = 0) then the “Mid Point” will be the end of the generated sound.

If we decide to have multiple “sections” then we need better names to distinguish the “points”.

I agree that delimited strings are likely to be beyond most users.
You have suggested “separate boxes in a row” before, but I’m not quite sure what you mean.
Do you mean something like this:

OK. I agree there could be frustration that entering “E” or “E#” didn’t work.

My best idea now for the mid points:

"Final Section 1 ornInitial Section 2 Frequency" 
"Final Section 1 ornInitial Section 2 Beat Frequency "

and then all Section 2 fields are labelled as such:

"Final Section 2 Frequency"
"Final Section 2 Beat Frequency"

Yes a group of boxes after a group of strings would be better. Ideal would be:

string: [box] string: [box] string: [box]


Tried that in this version, but not keen.

I think that works.
binaural-noise3.ny (1.92 KB)
For the next version (v4) I’ve tried

"Final or Intermediate Tone Frequency"


"(optional) Final Section 2 Tone Frequency"

I think I like this better
binaural-noise4.ny (1.94 KB)
This is still non-functional, but I’ve put in a suggestion for “note to frequency” help.

I think this covers all the features without looking too complicated, but the interface is now rather large.

Yes I think “Final or Intermediate” is clear enough,thanks.

OK. I thought it better to add the flat equivalents which I’ve done in v5 attached.

Indeed I think 9 - 10 fields is the most for 800 x 600. I’d guess the two extra “Amplitude” fields are the most dispensible if we have “sections”. Are those what is needed for “pitch ramp” - ramping up the volume at a pitch change?

What does the “Binaural Tone x1 ,x2” do?

I’m not all that convinced two sections are worth the screen estate, after all it’s only two sections even then and I don’t perceive a lot of “demand”. And if fade in/out was included you can in a sense have three “sections” although not completely customisable.

binaural-noise5.ny (2 KB)

Even without the two extra “Amplitude” controls, there are still 11 controls (which I think we agree is too many).

For just one “section” we could have:

Initial Tone Frequency
Initial Beat Frequency
Final Tone Frequency
Final Beat Frequency
Amplitude (0 to 1)
Pink Noise % of Mix

Unfortunately that leaves a problem for anyone that wants multiple sections as making a seamless transition from one section to another is not easy. Even when cross-fading there will often be some sort of glitch due to phase differences between the the end of one section and the start of the next.

One possible way round this would be to also offer one more control for “Advanced Text Input”.
This control would allow a series of space separated variables to be entered instead of using the sliders.
The attached mock-up includes this text box and a rough idea for the “Advanced Help”.

Perhaps the “Advanced Text Input” idea is too “Advanced” to be worth the effort - any thoughts?
binaural-noise6.ny (2.65 KB)

If it fits in the space available, I think some kind of fade control for the start and end could still be appreciated by potential users. For example it could just do the most suitable type of fade at start and end, using the length specified.

I certainly think it’s worth a shot, though you may have to explain why doing multiple passes of the effect end to end may be clunky, or the faint-hearted will do that anyway. Looking at the help text:

Multiple sections may be defined.
Each section has initial values for Frequency, Amplitude,
Beat Frequency and Duration.
The final values for each section are taken from either
the initial values of the next section, or if it is the final
section, by final values for Frequency, Amplitude,
Beat Frequency and Pink Noise Mix.

Example Initial Values for Frequency=110 Hz,
Amplitude=0.8 (linear), Beat Freq.=4 Hz, 
20% Pink Noise and Duration=60 seconds:
110   0.8   4    20    60

Example Final Values for Frequency=220 Hz,
Amplitude=0.5 (linear), Beat Freq.=8 Hz and
50% Pink Noise:
220   0.5   8    50

Example of a 2 section tone composition:
110 0.8 4 20 60 220 0.5 8 50 110 0.8 4 20

I can’t figure in the above example what defines the length of the second section i.e. the length of the whole? Also the text for your initial values doesn’t mention pink noise. So I would suggest (with “form” instead of “are taken from”):

Each section has initial values for Frequency,
Amplitude, Beat Frequency, Pink Noise Mix and 
Duration. The final values for each section form
the initial values of the next section, or
(if it is the final section) have values for
Frequency, Amplitude, Beat Frequency and Pink
Noise Mix.

However I still found the above only really made sense when I already understood it (if you see what I mean).

The following which resurrects the idea of intermediate values is much clearer for me (I assume your example is missing initial duration for section 2):

Start with a set of five 'initial' values for the
first section, for 'Frequency', 'Amplitude', 
'Beat Frequency', 'Pink Noise Mix' and
'Duration'. For each subsequent section, create
another set of five 'intermediate' values, again
for 'Frequency', 'Amplitude', 'Beat Frequency', 
'Pink Noise Mix' and 'Duration'. These sets of
values form the boundary between the current
section and the previous one. If the current 
section is the final one, end with a set of
'final' values for 'Frequency', 'Amplitude'.
'Beat Frequency' and 'Pink Noise Mix'.

It’s more words because of repetition of parameters, so would overflow with your examples, but I think you could then manage with just the final example of a 2 section tone composition (with some extra text). This avoids a possible confusion in your current “Example Final Values for Frequency” because those are not the last four values given in the “Example of a 2 section tone composition”.

I think “intermediate values” also handles better a possible “confusion” where your example may not be seen as having “two sections”. The following has “two sections” with a noticeable, “steady state” second section:

110 0.8 4 20 60 220 0.5 8 50 220 0.5 8 50

Interestingly a couple of my correspondents seemed to envisage the “steady state” final section as some kind of experience to anticipate just before the end.


Just checking in to see where we are with this. An alternative to David’s plug-in Binaural Tones with Surf 2 is often asked for, and I think we are on the right lines here.

Also I just had a request for a “monoaural beat generator” ( ). I pointed him to but can he get what he wants from “Isochronic modulator” with 100% pulse width?

PS I don’t envisage any of these “brainwave entrainment” plug-ins for shipping with Audacity at the moment. There are more widely useful ones to try and get in first.


The last fully working version was this one
which produces constant amplitude Binaural Tones with up to 4 sweeping carrier and beat frequency sections.

There are then about half a dozen alternative interfaces suggested with a number of additional features but as yet it doesn’t look like we have a definitive design specification.

As far as I can make out a “monoaural beat generator” is the same as amplitude modulation using a low frequency sine wave as the modulation signal.
Note: apart from differences in the initial phase, these two bits of code produce the same output:

; two sine tones added together
; producing a 10 Hz beat frequency
(mult 0.4 (sum (hzosc 445)(hzosc 435)))

; one sine tone modulated with a 5 Hz sine tone
; producing a 10 Hz beat frequency
(mult 0.8 (hzosc 440)(hzosc 5))

This is not quite the same as the Isochronic Modulator Plug-in which uses a modified square wave as the modulation waveform rather than a sine though I think that somewhere on the forum I posted some code that modified the plug-in to allow alternative modulation waveforms to be used.

I looked at that (id 2501), v5 and v6.

I think v5 is just too complex.

I like the flexibility of id 2501 but I showed it to one “customer” and he could not get the hang of “average” and why there was always one more beat frequency box than than the number of sections. He liked (and I would suggest) v6. He suggested initial and final amplitudes because the “sensed amplitudes vary with the beat frequency”. I think the advanced input is acceptable. Put as many features in that as you want. Enthusiasts will learn it if they have to, and we could offer they write to the Forum if they want the syntax for what they want to do.


I generally agree.

Yes I agree that v5 is too complex, especially as you commented at the start of this thread: “The usual feedback is that this effect is “too complex” and to generalise, we want something like Binauaral Beat Generator with a possible addition to determine start and end frequencies.”

Yes I like the flexibility of id 2501, but I’m a little surprised that there should be such trouble with “average” or that there must always be one more beat frequency defined than the number of sections.

I see the point in “initial and final amplitudes” and agree that would be a nice feature.

I’ll need to give some thought to how best to implement “advanced text input”, so I may leave that out initially and bring it back in when the rest is finalised.

There’s a couple of things where feedback from users would be useful:

1) Work flow:

Which option fits best with a “typical” work flow?
Option a) All of the initial settings followed by all of the final settings.
Option b) Alternate initial and final settings.

Option a)

  • Duration
  • Initial Tone Frequency
  • Initial Beat Frequency
  • Initial Amplitude
  • Final Tone Frequency
  • Final Beat Frequency
  • Final Amplitude

Option b)

  • Duration
  • Initial Tone Frequency
  • Final Tone Frequency
  • Initial Beat Frequency
  • Final Beat Frequency
  • Initial Amplitude
  • Final Amplitude

2) Pink Noise

How useful is this feature really? (I note your comments earlier in this thread, but I think it would be useful to get feedback from users).

According to

Some people find pure sine waves unpleasant, so a pink noise or another background (e.g. natural sounds such as river noises) can also be mixed with them.

As the “sensed amplitudes vary with the beat frequency” it would probably be best if the amplitude of the noise could vary independently of the tone amplitude - that adds at least one more slider and even then it will be hard to judge what an appropriate level will be. If the noise was generated into a second audio track then the mix can be easily and precisely adjusted.

Then the option of what kind of noise.
Non-technical users are likely to have a very general idea (at best) of what “Pink” noise is (“shushing” that’s a bit softer than white noise), but “noise” can have any frequency profile that you like. In some contexts Pink noise may be too harsh or too bassy, but if it is generated along with the tones the possibilities of altering it (without affecting the tones) become limited.

I would have thought that only one option (constant proportion of pink noise) would be too specific, but adding other options will increase the complexity and the number of sliders. Personally I still think it would be better to have a separate “Ambient Noise” generator plug-in.