我'm trying to port over paulstretch'的信号延伸到matlab / octave . https://github.com/paulnasca/paulstretch_python
请参阅下面的工作流程
我可以将信号分成频率,幅度和相位,然后使用下面的代码将它们连接起来 . I'm having issues porting over the windowing segments, overlapping, and extending the signals. Any ideas?
Example matlab / octave code:
freq=[0;0.534974;1.06995;1.60492;2.1399]
amp1=[3.94414e-19;1.20523e-05;5.08643e-06;4.22469e-05;3.04322e-05]
phase=[0;0.0546221;-1.11534;-2.4926;-2.55601]
a1=[freq,amp1,phase];
t_rebuilt=linspace(0,2*pi,8000);
sigcomb=zeros(1,length(t_rebuilt));
kk=0
for kk=1:1:length(freq) %rebuild signal from collected freq,amplitudes,and phases
sigcomb=sigcomb+a1(kk,2)*cos((a1(kk,1))*t_rebuilt+(a1(kk,3)));
end
normalize=(sigcomb/max(abs(sigcomb))*.8);
wavwrite([normalize'] ,8000,16,strcat('/tmp/test.wav'));
PS:这只是测试数据,为了获得音频信号,我将不得不使用更多的数据点,这将使问题变得混乱 .
我的想法是使用for循环来创建新信号的1秒wav文件,无论文件延伸多长时间,因为这将防止更大持续时间文件的阵列大小内存问题 . 然后使用像sox这样的其他程序将它们连接在一起,我已经想到了 .
PS:我正在使用八度音阶3.8.1,假设它与matlab兼容
1 回答
我试图构建一个没有循环的版本,并使用http://hypermammut.sourceforge.net/paulstretch/中的original.ogg . 我认为这是速度和内存大小之间的权衡(如果输入文件很长,下面的版本可能会占用大量内存)