2007年6月7日木曜日

libvorbisを改造してピッチシフトを行うテスト



mappin0.cを改造します(830行め付近@libvorbis-1.1.2)


mapping0_inverse関数において



/* transform the PCM data; takes PCM vector, vb; modifies PCM vector */
/* only MDCT right now.... */
for(i=0;i<vi->channels;i++){
float *pcm=vb->pcm[i];

/**************************ここから追加**************************************/
/*ここでPCMデータはn/2サイズのデータが入っている。後ろの方はごみデータ*/
/*先頭のほうが低周波データ、n/2に近い方が高周波データ*/
/*akira:周波数をあげるテスト*/
#if 0
{
int j;
mdct_lookup* init= (mdct_lookup *)(b->transform[vb->W][0]);
int n= init->n;
for(j=n/2-1;j>-1;j--){
if(j&1){
pcm[j]=(pcm[(j-1)/2]-pcm[(j+1)/2])/2; //端数処理
}else{
pcm[j]=pcm[j/2];//基本はこれ!!
}
}
}
#endif
/*akira:周波数を下げるテスト*/
#if 1
{
int j;
mdct_lookup* init= (mdct_lookup *)(b->transform[vb->W][0]);
int n= init->n;
for(j=0;j<n/4;j++){
pcm[j]=pcm[j*2];//基本はこれ!!
}
for(j=n/4;j<n/2;j++)pcm[j]=0;//いらない部分に0を埋める
}
#endif
/*********************************ここまで追加****************************/

mdct_backward(b->transform[vb->W][0],pcm,pcm);
}

/* all done! */
return(0);
}




聞いた感じ多少ぼこぼこ音っぽいのが入るけれでも概ねOKっぽいよ。 


ぼこぼこ音は分析窓のせいっぽいからpcm[0]=0;にして低減はできるかも??逆に非道くなるかも? ?





0 件のコメント:

コメントを投稿