• andresbrocco

    Ahh, indeed! I forgot to mention that :sweat_smile:
    The goal is to be pure vanilla, so I'll replace it with:

    [*~ -1]
    |
    [+~ 1]

    Thanks @FFW and @alexandros

    posted in abstract~ read more
  • andresbrocco

    Hey @alexandros. that's not a typo! :relaxed: That's short for [expr(1-$f1)]: the exclamation point reverses the order of the inlets when preceding basic math operators + - * /

    posted in abstract~ read more
  • andresbrocco

    An efficient binaural spatializer

    The "binauralModeled-ircam" object is a pure-vanilla implementation of the binaural model created at IRCAM.. An example of its capabilities can be found at this page.

    The object is found at my repository: https://github.com/andresbrocco/binauralModeled-pd

    Main concept

    Basically, it applies ITD and approximates the HRTF to a series of biquad filters, whose coefficients are avaliable here.

    Sample Rate limitation: those coefficients work for audio at 44100Hz only!

    Space interpolation

    There is no interpolation in space (between datapoints): the chosen set of coefficients for the HRTF is the closest datapoint to the given azimuth and elevation (by euclidean distance).

    Time interpolation

    There is interpolation in time (so that a moving source sound smooth): two binauralModels run concurrently, and the transition is made by alternating which one to use (previous/current). That transition occurs in 20ms, whenever a new location is received.

    Interface

    You can control the Azimuth and Elevation through the interface, or pass them as argument to the first inlet.
    image.png

    Performace

    Obs.: If the Azimuth and elevation does not match exactly the coordinates of a point in the dataset of HRTFs, the object will perform a search by distance, which is not optimal. Therefore, if this object is embedded in a higher level application and you are concerned about performance, you should implement a k-d tree search in order to find the exact datapoint before passing it to the "binauralModeled-ircam" object.

    Ah, maybe this statement is obvious, but: it only works with headphones!

    posted in abstract~ read more
  • andresbrocco

    Just to document it here. If you want to create a hann window and store it in an array, you can do the following:
    image.png

    posted in technical issues read more
  • andresbrocco

    @ddw_music I totally agree with you. That makes me nervous sometimes xD

    Maybe @Miller Puckette could change this behaviour in future releases? I would be glad

    posted in technical issues read more
  • andresbrocco

    Thanks for replying, @il-pleut I've edited the original post!

    posted in patch~ read more
  • andresbrocco

    Hello, I made a patch to undo what [wrap~] does.

    unwrap.zip

    It basically remove discontinuities when the signal jumps from -pi to pi or vice-versa. As shown in the image below:

    unwrap.png

    I personally needed for unwrapping phase before applying complex logarithm when I was trying to implement liftering in the complex cepstrum... (What didnt go so well, by the way...)

    Hope it's useful for someone else - The patch is pure vanilla.

    posted in patch~ read more
  • andresbrocco

    There is an object in the iemmatrix that implements the fletcher-Munson curve (equal loudness contour)... Take a look!

    posted in technical issues read more
  • andresbrocco

    @solipp, I want to get high resolution in both frequency and time.

    So if I do an FFT after every block, I get high resolution in time, but the block is too small, so I zeropad it to increase frequency resolution.

    posted in technical issues read more
  • andresbrocco

    thanks @whale-av!

    Actually [mux~] is not missing, but [for++], [pddplink] and [lp6_cheb~] are.

    Anyway, I got what's going on, but @katjav didn't zeropad the block. She actually discard part of the block by multiplying it by zero.

    I've made a patch that increases the block size by a factor, but also overlaps by that factor, to keep the same dsp rate. Inside, it just multiplies the old blocks with zeros, so the result is:

    [ 0 0 0 . . . 0 0 0 newBlock]

    zeropad~-help.pd
    zeropad~.pd

    posted in technical issues read more

Internal error.

Oops! Looks like something went wrong!