Trying to do pitch shifting


#1

First attempt at doing a pitch shifting feedback delay, somewhere between MakeNoise Echophon and my old Boss PS-2 pedal

Throwing random bleeps and samples from The Archers into it...


#2

nice.... is this based on the add overlap method, and did you manage to tune the delay?

I've been looking into tuning the pitch shifting, but not had time to due to work I've been doing on 1.0.8, so id love to see the patch your using, if your willing to share :smile:


#3

It's very crude, did a clone of the delay playback module and added a multiplier to the read position.

You'll need to tweak the patch to point at an audio file on your SD card + it's rather optimised for the buttons/pots on my shield.

`<objdefs>
   <obj.normal id="read interp" uuid="e3d8b8823ab551c588659520bf6cc25c630466c7" sha="6fda3a4b04cc8fc49e63240c2fff115695ec7a7">
      <upgradeSha>662b8465d8501bb6fed30d7d616d0656a03f59fd</upgradeSha>
      <sDescription>delay read, linear interpolated</sDescription>
      <author>Johannes Taelman</author>
      <license>BSD</license>
      <helpPatch>delay.axh</helpPatch>
      <inlets>
         <frac32buffer name="time" description="delay time (fraction of total delayline size)"/>
                  <int32 name="speed" description="speed"/>

      </inlets>
      <outlets>
         <frac32buffer name="out" description="wave"/>
      </outlets>
      <displays/>
      <params>
         <frac32.u.map name="time" noLabel="true"/>
      </params>
      <attribs>
         <objref name="delayname"/>
      </attribs>
      <code.srate><![CDATA[      
            int8_t tmp_multiplier = inlet_speed + 68;
            uint32_t tmp_position = (attr_delayname.writepos * tmp_multiplier) /100;

      uint32_t tmp_d =  __USAT(param_time + inlet_time,27);
      uint32_t tmp_di = tmp_position - (tmp_d>>(27-attr_delayname.LENGTHPOW)) - BUFSIZE + buffer_index -1;
      uint32_t tmp_w1 = (tmp_d<<(attr_delayname.LENGTHPOW+3)) & 0x3FFFFFFF;
      uint32_t tmp_w2 = (1<<30) - tmp_w1;
      int32_t tmp_a1 = attr_delayname.array[tmp_di&attr_delayname.LENGTHMASK]<<16;
      int32_t tmp_a2 = attr_delayname.array[(tmp_di+1)&attr_delayname.LENGTHMASK]<<16;
      int32_t tmp_r = ___SMMUL(tmp_a1,tmp_w1);
      tmp_r = ___SMMLA(tmp_a2,tmp_w2,tmp_r);
      outlet_out= tmp_r;
]]></code.srate>
   </obj.normal>
</objdefs>`

smooth_delay.axp (17.4 KB)
read interp_slow.axo (1.6 KB)


#4

thanks for sharing this...i took this apart and put it in my own patch (just changed it to take my MIDI input) in order to try and learn more about delays in the Axoloti...

one question regarding your patch, though: there's an conv/interp object w/o any signals leaving it -

do you remember what your thinking was behind this? no worries if not, lovely patch btw!

22716_newpatch.axp (11.7 KB)