<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div class=""><br class=""><blockquote type="cite" class=""><div class="">Начало переадресованного сообщения:</div><br class="Apple-interchange-newline"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">Отправитель: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class="">Илья <<a href="mailto:ilya@perevoznik.name" class="">ilya@perevoznik.name</a>><br class=""></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">Тема: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class=""><b class="">aubio help</b><br class=""></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">Дата: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class="">22 ноября 2016 г., 19:25:41 GMT+3<br class=""></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;" class=""><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif; color:rgba(0, 0, 0, 1.0);" class=""><b class="">Получатель: </b></span><span style="font-family: -webkit-system-font, Helvetica Neue, Helvetica, sans-serif;" class=""><a href="mailto:piem@piem.org" class="">piem@piem.org</a><br class=""></span></div><br class=""><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hello, i’m coding app, that use `aubio` in it and i want to make a time-stretch of sound. (i’m using python module)<div class=""><br class=""></div><div class="">i found a demo (in you’re python/demos folder) that actually what I’m looking for, but i need to rewrite it to compatibility with my already existing functions etc.</div><div class="">I have a trouble with sink_out, i tried to look in clang code of it, but anyway i can’t understand, but i can’t use it cause i have my own file saving system. i tried to emulate sink_out with a list (that would convert to ndarray after stretching) and it doesn’t works, cuz i have just 1279 samples at the out, but at in it was 352800 :D</div><div class=""><br class=""></div><div class="">please, help me to understand how to rewrite it without sink_out. i need to write all to ndarray. my code below:</div><div class=""><br class=""></div><div class=""><pre style="background-color:#263238;color:#c3cee3;font-family:'Menlo';font-size:9,0pt;" class=""><span style="color:#c792ea;" class="">def </span><span style="color:#82aaff;" class="">time_stretch</span><span style="color:#89ddff;" class="">(</span><span style="color:#94558d;" class="">self</span><span style="color:#89ddff;" class="">, </span><span style="color:#ff5370;" class="">rate</span><span style="color:#89ddff;" class="">):<br class=""></span><span style="color:#89ddff;" class="">    </span>win_s <span style="color:#89ddff;" class="">= </span><span style="color:#94558d;" class="">self</span><span style="color:#89ddff;" class="">.</span>_win_size<br class="">    hop_s <span style="color:#89ddff;" class="">= </span><span style="color:#94558d;" class="">self</span><span style="color:#89ddff;" class="">.</span>_hop_size<br class=""><br class="">    warmup <span style="color:#89ddff;" class="">= </span>win_s <span style="color:#89ddff;" class="">// </span>hop_s <span style="color:#89ddff;" class="">- </span><span style="color:#f78c6c;" class="">1<br class=""></span><span style="color:#f78c6c;" class=""><br class=""></span><span style="color:#f78c6c;" class="">    </span>p <span style="color:#89ddff;" class="">= </span>pvoc<span style="color:#89ddff;" class="">(</span>win_s<span style="color:#89ddff;" class="">, </span>hop_s<span style="color:#89ddff;" class="">)<br class=""></span><span style="color:#89ddff;" class=""><br class=""></span><span style="color:#89ddff;" class="">    </span><span style="color:#546e7a;font-style:italic;" class=""># allocate memory to store norms and phases<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">    </span>n_blocks <span style="color:#89ddff;" class="">= </span><span style="color:#82aaff;" class="">len</span><span style="color:#89ddff;" class="">(</span><span style="color:#94558d;" class="">self</span><span style="color:#89ddff;" class="">.</span>_samples<span style="color:#89ddff;" class="">) // </span>hop_s <span style="color:#89ddff;" class="">+ </span><span style="color:#f78c6c;" class="">1<br class=""></span><span style="color:#f78c6c;" class="">    </span><span style="color:#546e7a;font-style:italic;" class=""># adding an empty frame at end of spectrogram<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">    </span>norms <span style="color:#89ddff;" class="">= </span>np<span style="color:#89ddff;" class="">.</span>zeros<span style="color:#89ddff;" class="">((</span>n_blocks <span style="color:#89ddff;" class="">+ </span><span style="color:#f78c6c;" class="">1</span><span style="color:#89ddff;" class="">, </span>win_s <span style="color:#89ddff;" class="">// </span><span style="color:#f78c6c;" class="">2 </span><span style="color:#89ddff;" class="">+ </span><span style="color:#f78c6c;" class="">1</span><span style="color:#89ddff;" class="">), </span><span style="color:#660099;" class="">dtype</span><span style="color:#89ddff;" class="">=</span>float_type<span style="color:#89ddff;" class="">)<br class=""></span><span style="color:#89ddff;" class="">    </span>phases <span style="color:#89ddff;" class="">= </span>np<span style="color:#89ddff;" class="">.</span>zeros<span style="color:#89ddff;" class="">((</span>n_blocks <span style="color:#89ddff;" class="">+ </span><span style="color:#f78c6c;" class="">1</span><span style="color:#89ddff;" class="">, </span>win_s <span style="color:#89ddff;" class="">// </span><span style="color:#f78c6c;" class="">2 </span><span style="color:#89ddff;" class="">+ </span><span style="color:#f78c6c;" class="">1</span><span style="color:#89ddff;" class="">), </span><span style="color:#660099;" class="">dtype</span><span style="color:#89ddff;" class="">=</span>float_type<span style="color:#89ddff;" class="">)<br class=""></span><span style="color:#89ddff;" class=""><br class=""></span><span style="color:#89ddff;" class="">    </span>block_read <span style="color:#89ddff;" class="">= </span><span style="color:#f78c6c;" class="">0<br class=""></span><span style="color:#f78c6c;" class="">    </span>samples <span style="color:#89ddff;" class="">= </span><span style="color:#94558d;" class="">self</span><span style="color:#89ddff;" class="">.</span>_samples<br class="">    steps_max <span style="color:#89ddff;" class="">= </span><span style="color:#82aaff;" class="">len</span><span style="color:#89ddff;" class="">(</span>samples<span style="color:#89ddff;" class="">) - (</span><span style="color:#82aaff;" class="">len</span><span style="color:#89ddff;" class="">(</span>samples<span style="color:#89ddff;" class="">) % </span>hop_s<span style="color:#89ddff;" class="">)<br class=""></span><span style="color:#89ddff;" class=""><br class=""></span><span style="color:#89ddff;" class="">    </span><span style="color:#c792ea;" class="">for </span>i <span style="color:#c792ea;" class="">in </span><span style="color:#82aaff;" class="">range</span><span style="color:#89ddff;" class="">(</span><span style="color:#f78c6c;" class="">0</span><span style="color:#89ddff;" class="">, </span>steps_max<span style="color:#89ddff;" class="">, </span>hop_s<span style="color:#89ddff;" class="">):<br class=""></span><span style="color:#89ddff;" class="">        </span><span style="color:#546e7a;font-style:italic;" class=""># pitchin = pitch_o(samples[i:i + self._hop_size])<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">        # read from source<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">        </span>samples_proc <span style="color:#89ddff;" class="">= </span>np<span style="color:#89ddff;" class="">.</span>asarray<span style="color:#89ddff;" class="">(</span>samples<span style="color:#89ddff;" class="">[</span>i<span style="color:#89ddff;" class="">:</span>i <span style="color:#89ddff;" class="">+ </span>hop_s<span style="color:#89ddff;" class="">]).</span>astype<span style="color:#89ddff;" class="">(</span>np<span style="color:#89ddff;" class="">.</span>float32<span style="color:#89ddff;" class="">)<br class=""></span><span style="color:#89ddff;" class="">        </span><span style="color:#546e7a;font-style:italic;" class=""># compute fftgrain<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">        </span>spec <span style="color:#89ddff;" class="">= </span>p<span style="color:#89ddff;" class="">(</span>samples_proc<span style="color:#89ddff;" class="">)<br class=""></span><span style="color:#89ddff;" class="">        </span><span style="color:#546e7a;font-style:italic;" class=""># store current grain<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">        </span>norms<span style="color:#89ddff;" class="">[</span>block_read<span style="color:#89ddff;" class="">] = </span>spec<span style="color:#89ddff;" class="">.</span>norm<br class="">        phases<span style="color:#89ddff;" class="">[</span>block_read<span style="color:#89ddff;" class="">] = </span>spec<span style="color:#89ddff;" class="">.</span>phas<br class="">        <span style="color:#546e7a;font-style:italic;" class=""># increment block counter<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">        </span>block_read <span style="color:#89ddff;" class="">+= </span><span style="color:#f78c6c;" class="">1<br class=""></span><span style="color:#f78c6c;" class=""><br class=""></span><span style="color:#f78c6c;" class="">    </span><span style="color:#546e7a;font-style:italic;" class=""># just to make sure<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">    # source_in.close()<br class=""></span><span style="color:#546e7a;font-style:italic;" class=""><br class=""></span><span style="color:#546e7a;font-style:italic;" class="">    </span>sink_out <span style="color:#89ddff;" class="">= []<br class=""></span><span style="color:#89ddff;" class=""><br class=""></span><span style="color:#89ddff;" class="">    </span><span style="color:#546e7a;font-style:italic;" class=""># interpolated time steps (j = alpha * i)<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">    </span>steps <span style="color:#89ddff;" class="">= </span>np<span style="color:#89ddff;" class="">.</span>arange<span style="color:#89ddff;" class="">(</span><span style="color:#f78c6c;" class="">0</span><span style="color:#89ddff;" class="">, </span>n_blocks<span style="color:#89ddff;" class="">, </span><span style="color:#ff5370;" class="">rate</span><span style="color:#89ddff;" class="">, </span><span style="color:#660099;" class="">dtype</span><span style="color:#89ddff;" class="">=</span>float_type<span style="color:#89ddff;" class="">)<br class=""></span><span style="color:#89ddff;" class="">    </span><span style="color:#546e7a;font-style:italic;" class=""># initial phase<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">    </span>phas_acc <span style="color:#89ddff;" class="">= </span>phases<span style="color:#89ddff;" class="">[</span><span style="color:#f78c6c;" class="">0</span><span style="color:#89ddff;" class="">]<br class=""></span><span style="color:#89ddff;" class="">    </span><span style="color:#546e7a;font-style:italic;" class=""># excepted phase advance in each bin<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">    </span>phi_advance <span style="color:#89ddff;" class="">= </span>np<span style="color:#89ddff;" class="">.</span>linspace<span style="color:#89ddff;" class="">(</span><span style="color:#f78c6c;" class="">0</span><span style="color:#89ddff;" class="">, </span>np<span style="color:#89ddff;" class="">.</span>pi <span style="color:#89ddff;" class="">* </span>hop_s<span style="color:#89ddff;" class="">, </span>win_s <span style="color:#89ddff;" class="">/ </span><span style="color:#f78c6c;" class="">2 </span><span style="color:#89ddff;" class="">+ </span><span style="color:#f78c6c;" class="">1</span><span style="color:#89ddff;" class="">).</span>astype<span style="color:#89ddff;" class="">(</span>float_type<span style="color:#89ddff;" class="">)<br class=""></span><span style="color:#89ddff;" class=""><br class=""></span><span style="color:#89ddff;" class="">    </span>new_grain <span style="color:#89ddff;" class="">= </span>cvec<span style="color:#89ddff;" class="">(</span>win_s<span style="color:#89ddff;" class="">)<br class=""></span><span style="color:#89ddff;" class=""><br class=""></span><span style="color:#89ddff;" class="">    </span><span style="color:#c792ea;" class="">for </span><span style="color:#89ddff;" class="">(</span>t<span style="color:#89ddff;" class="">, </span>step<span style="color:#89ddff;" class="">) </span><span style="color:#c792ea;" class="">in </span><span style="color:#82aaff;" class="">enumerate</span><span style="color:#89ddff;" class="">(</span>steps<span style="color:#89ddff;" class="">):<br class=""></span><span style="color:#89ddff;" class=""><br class=""></span><span style="color:#89ddff;" class="">        </span>frac <span style="color:#89ddff;" class="">= </span><span style="color:#f78c6c;" class="">1. </span><span style="color:#89ddff;" class="">- </span>np<span style="color:#89ddff;" class="">.</span>mod<span style="color:#89ddff;" class="">(</span>step<span style="color:#89ddff;" class="">, </span><span style="color:#f78c6c;" class="">1.0</span><span style="color:#89ddff;" class="">)<br class=""></span><span style="color:#89ddff;" class="">        </span><span style="color:#546e7a;font-style:italic;" class=""># get pair of frames<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">        </span>t_norms <span style="color:#89ddff;" class="">= </span>norms<span style="color:#89ddff;" class="">[</span><span style="color:#82aaff;" class="">int</span><span style="color:#89ddff;" class="">(</span>step<span style="color:#89ddff;" class="">):</span><span style="color:#82aaff;" class="">int</span><span style="color:#89ddff;" class="">(</span>step <span style="color:#89ddff;" class="">+ </span><span style="color:#f78c6c;" class="">2</span><span style="color:#89ddff;" class="">)]<br class=""></span><span style="color:#89ddff;" class="">        </span>t_phases <span style="color:#89ddff;" class="">= </span>phases<span style="color:#89ddff;" class="">[</span><span style="color:#82aaff;" class="">int</span><span style="color:#89ddff;" class="">(</span>step<span style="color:#89ddff;" class="">):</span><span style="color:#82aaff;" class="">int</span><span style="color:#89ddff;" class="">(</span>step <span style="color:#89ddff;" class="">+ </span><span style="color:#f78c6c;" class="">2</span><span style="color:#89ddff;" class="">)]<br class=""></span><span style="color:#89ddff;" class=""><br class=""></span><span style="color:#89ddff;" class="">        </span><span style="color:#546e7a;font-style:italic;" class=""># compute interpolated frame<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">        </span>new_grain<span style="color:#89ddff;" class="">.</span>norm <span style="color:#89ddff;" class="">= </span>frac <span style="color:#89ddff;" class="">* </span>t_norms<span style="color:#89ddff;" class="">[</span><span style="color:#f78c6c;" class="">0</span><span style="color:#89ddff;" class="">] + (</span><span style="color:#f78c6c;" class="">1. </span><span style="color:#89ddff;" class="">- </span>frac<span style="color:#89ddff;" class="">) * </span>t_norms<span style="color:#89ddff;" class="">[</span><span style="color:#f78c6c;" class="">1</span><span style="color:#89ddff;" class="">]<br class=""></span><span style="color:#89ddff;" class="">        </span>new_grain<span style="color:#89ddff;" class="">.</span>phas <span style="color:#89ddff;" class="">= </span>phas_acc<br class="">        <span style="color:#546e7a;font-style:italic;" class=""># print t, step, new_grain.norm<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">        # print t, step, phas_acc<br class=""></span><span style="color:#546e7a;font-style:italic;" class=""><br class=""></span><span style="color:#546e7a;font-style:italic;" class="">        # psola<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">        </span>samples_proc <span style="color:#89ddff;" class="">= </span>p<span style="color:#89ddff;" class="">.</span>rdo<span style="color:#89ddff;" class="">(</span>new_grain<span style="color:#89ddff;" class="">)<br class=""></span><span style="color:#89ddff;" class="">        </span><span style="color:#c792ea;" class="">if </span>t <span style="color:#89ddff;" class="">> </span>warmup<span style="color:#89ddff;" class="">:  </span><span style="color:#546e7a;font-style:italic;" class=""># skip the first few frames to warm up phase vocoder<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">            # write to sink<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">            </span>sink_out<span style="color:#89ddff;" class="">.</span>append<span style="color:#89ddff;" class="">(</span>samples_proc<span style="color:#89ddff;" class="">[:</span>hop_s<span style="color:#89ddff;" class="">])<br class=""></span><span style="color:#89ddff;" class=""><br class=""></span><span style="color:#89ddff;" class="">        </span><span style="color:#546e7a;font-style:italic;" class=""># calculate phase advance<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">        </span>dphas <span style="color:#89ddff;" class="">= </span>t_phases<span style="color:#89ddff;" class="">[</span><span style="color:#f78c6c;" class="">1</span><span style="color:#89ddff;" class="">] - </span>t_phases<span style="color:#89ddff;" class="">[</span><span style="color:#f78c6c;" class="">0</span><span style="color:#89ddff;" class="">] - </span>phi_advance<br class="">        <span style="color:#546e7a;font-style:italic;" class=""># unwrap angle to [-pi; pi]<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">        </span>dphas <span style="color:#89ddff;" class="">= </span>unwrap2pi<span style="color:#89ddff;" class="">(</span>dphas<span style="color:#89ddff;" class="">)<br class=""></span><span style="color:#89ddff;" class="">        </span><span style="color:#546e7a;font-style:italic;" class=""># cumulate phase, to be used for next frame<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">        </span>phas_acc <span style="color:#89ddff;" class="">+= </span>phi_advance <span style="color:#89ddff;" class="">+ </span>dphas<br class=""><br class="">    <span style="color:#c792ea;" class="">for </span>t <span style="color:#c792ea;" class="">in </span><span style="color:#82aaff;" class="">range</span><span style="color:#89ddff;" class="">(</span>warmup <span style="color:#89ddff;" class="">+ </span><span style="color:#f78c6c;" class="">1</span><span style="color:#89ddff;" class="">):  </span><span style="color:#546e7a;font-style:italic;" class=""># purge the last frames from the phase vocoder<br class=""></span><span style="color:#546e7a;font-style:italic;" class="">        </span>new_grain<span style="color:#89ddff;" class="">.</span>norm<span style="color:#89ddff;" class="">[:] = </span><span style="color:#f78c6c;" class="">0<br class=""></span><span style="color:#f78c6c;" class="">        </span>new_grain<span style="color:#89ddff;" class="">.</span>phas<span style="color:#89ddff;" class="">[:] = </span><span style="color:#f78c6c;" class="">0<br class=""></span><span style="color:#f78c6c;" class="">        </span>samples_proc <span style="color:#89ddff;" class="">= </span>p<span style="color:#89ddff;" class="">.</span>rdo<span style="color:#89ddff;" class="">(</span>new_grain<span style="color:#89ddff;" class="">)<br class=""></span><span style="color:#89ddff;" class="">        </span>sink_out<span style="color:#89ddff;" class="">.</span>append<span style="color:#89ddff;" class="">(</span>samples_proc<span style="color:#89ddff;" class="">[:</span>hop_s<span style="color:#89ddff;" class="">])<br class=""></span><span style="color:#89ddff;" class=""><br class=""></span><span style="color:#89ddff;" class="">    </span><span style="color:#94558d;" class="">self</span><span style="color:#89ddff;" class="">.</span>_samples <span style="color:#89ddff;" class="">= </span>np<span style="color:#89ddff;" class="">.</span>asarray<span style="color:#89ddff;" class="">(</span>sink_out<span style="color:#89ddff;" class="">).</span>astype<span style="color:#89ddff;" class="">(</span>np<span style="color:#89ddff;" class="">.</span>int16<span style="color:#89ddff;" class="">)</span></pre><div class="">P.S. Sorry for my bad English.</div></div><div class=""><br class=""></div><div class="">Thank You!</div></div></div></blockquote></div><br class=""></div></body></html>