#include "SoundLab_Main.h"
#define SOUNDLAB_DEFAULT_FRAME_COLOR 255,96,192,255
static px_char SoundLab_ExportfilePath[MAX_PATH];
DWORD WINAPI SoundLab_Main_ExportFeatures(LPVOID ptr)
{
px_int i;
SoundLab_Main *pMain=(SoundLab_Main *)ptr;
SOUNDLAB_FEATURE_DATA Data;
px_complex Frame[SOUNDLAB_WINDOW_WIDTH];
px_double Framed[SOUNDLAB_WINDOW_WIDTH];
px_double PitchShift;
FILE *pf;
px_int randSample;
px_int tryCount=128;
if (pMain->sourcePCMSize<SOUNDLAB_WINDOW_WIDTH*2*2)
{
goto _ERROR;
}
pMain->schedule=0;
pMain->bDone=PX_FALSE;
PX_memset(&Data,0,sizeof(Data));
PX_memcpy(&Data.magic,"sinc",4);
PX_Object_FilterEditorMapData(pMain->FilterEditor,Data.filter,200);
PX_Object_FilterEditorMapData(pMain->FixEditor,Data.fix,200);
PitchShift=(PX_Object_SliderBarGetValue(pMain->SliderBar_PitchShift)-50.0)/100;
if(PitchShift==0)
{
PitchShift=1;
}
else if (PitchShift>0)
{
PitchShift=1+PitchShift/5*(2.75)*10;
}
else
{
PitchShift=-PitchShift/5*(2.75)*10;
PitchShift=1/(1+PitchShift);
}
Data.pitchshift=PitchShift;
//MFCC
for (i=0;i<SOUNDLAB_FEATURE_DATA_MFCC_SIZE;i++)
{
px_int j;
px_int sum,pitchE;
px_short *PCM;
tryCount=128;
while (PX_TRUE)
{
randSample=(px_int)PX_randRange(0,pMain->sourcePCMSize-SOUNDLAB_WINDOW_WIDTH*2*2);
randSample=(randSample/4)*4;
PCM=(px_short *)(pMain->sourcePCM+randSample);
if (tryCount==0&&pMain->schedule==0)
{
PX_strset(pMain->lastError,"Invalid Data.");
goto _ERROR;
}
sum=0;
for (j=0;j<SOUNDLAB_WINDOW_WIDTH;j++)
{
Frame[j].re=(px_double)PCM[j*2];
Frame[j].im=0;
Framed[j]=(px_double)PCM[j*2];
sum+=PX_ABS(PCM[j*2]);
}
sum/=SOUNDLAB_WINDOW_WIDTH;
if (sum<pMain->threshold)
{
tryCount--;
continue;
}
pitchE=PX_PitchEstimation(Frame,SOUNDLAB_WINDOW_WIDTH,44100);
if (pitchE<60&&pitchE>800)
{
tryCount--;
continue;
}
PX_MFCCParse(&pMain->mfcc,Framed,&Data.mfcc[i]);
pMain->schedule=i*100.0/SOUNDLAB_FEATURE_DATA_MFCC_SIZE;
break;
}
}
pf=fopen(SoundLab_ExportfilePath,"wb");
if (!pf)
{
PX_strset(pMain->lastError,"Could not write file.");
goto _ERROR;
}
fwrite(&Data,1,sizeof(Data),pf);
fclose(pf);
pMain->lastError[0]=0;
PX_MessageBoxAlertOk(&pMain->messagebox,(const px_char *)L"Export Succeeded.");
pMain->bDone=PX_TRUE;
return 0;
_ERROR:
PX_MessageBoxAlertOk(&pMain->messagebox,(const px_char *)L"Export Failed");
pMain->bDone=PX_TRUE;
return 0;
}
static px_char TuningRuntime[1024*1024*8];
DWORD WINAPI SoundLab_Main_ApplyTuning(LPVOID ptr)
{
px_double zero0=0;
px_int offset,i;
px_double pitchshift,timeshift;
SoundLab_Main *pMain=(SoundLab_Main *)ptr;
PX_Tuning Tuning1;
PX_Tuning Tuning2;
px_short *pDataU16;
px_double Frame1[SOUNDLAB_WINDOW_WIDTH*8];
px_double Frame2[SOUNDLAB_WINDOW_WIDTH*8];
px_double Frame[SOUNDLAB_WINDOW_WIDTH*8];
px_double filter[SOUNDLAB_WINDOW_WIDTH];
px_double fix[SOUNDLAB_WINDOW_WIDTH];
px_int FrameSize;
px_memory solveData;
offset=0;
pMain->schedule=0;
if (pMain->sourcePCMSize)
{
px_memorypool mp;
mp=MP_Create(TuningRuntime,sizeof(TuningRuntime));
PX_MemoryInit(&pMain->Ins->runtime.mp_game,&solveData);
pitchshift=(PX_Object_SliderBarGetValue(pMain->SliderBar_PitchShift)-50.0)/100;
if(pitchshift==0)
{
pitchshift=1;
}
else if (pitchshift>0)
{
pitchshift=1+pitchshift/5*(2.75)*10;
}
else
{
pitchshift=-pitchshift/5*(2.75)*10;
pitchshift=1/(1+pitchshift);
}
timeshift=(PX_Object_SliderBarGetValue(pMain->SliderBar_TimeScale)-50.0)/100;
if(timeshift==0)
{
timeshift=1;
}
else if (timeshift>0)
{
timeshift=1+timeshift/5*(2.75)*10;
}
else
{
timeshift=-timeshift/5*(2.75)*10;
timeshift=1/(1+timeshift);
}
//filter
for (i=0;i<PX_COUNTOF(filter);i++)
{
filter[i]=0;
fix[i]=0;
}
PX_Object_FilterEditorMapData(pMain->FilterEditor,filter,200);
PX_Object_FilterEditorMapData(pMain->FixEditor,fix,200);
PX_TuningInitialize(&mp,&Tuning1,pitchshift,timeshift,PX_NULL,filter,PX_NULL,PX_TUNING_WINDOW_SIZE_1024);
PX_TuningInitialize(&mp,&Tuning2,pitchshift,timeshift,PX_NULL,filter,PX_NULL,PX_TUNING_WINDOW_SIZE_1024);
for (i=0;i<512*3;i++)
{
PX_MemoryCat(&solveData,&zero0,sizeof(px_double));
}
while (offset<pMain->sourcePCMSize-SOUNDLAB_WINDOW_WIDTH*2*2*2)
{
pDataU16=(px_short *)(pMain->sourcePCM+offset);
pMain->schedule=offset*1.0/pMain->sourcePCMSize*100;
//channel 1
for (i=0;i<SOUNDLAB_WINDOW_WIDTH;i++)
{
Frame[i]=pDataU16[i*2]/32768.0;
}
FrameSize=PX_TuningFilter(&Tuning1,Frame,SOUNDLAB_WINDOW_WIDTH,Frame1);
//channel 2
for (i=0;i<SOUNDLAB_WINDOW_WIDTH;i++)
{
Frame[i]=pDataU16[i*2+1]/32768.0;
}
PX_TuningFilter(&Tuning2,Frame,SOUNDLAB_WINDOW_WIDTH,Frame2);
for (i=0;i<FrameSize;i++)
{
if (PX_ABS(Frame1[i])<1)
{
Frame1[i]*=32768.0;
}
else
{
if (Frame1[i]>0)
{
Frame1[i]=32768.0;
}
else
{
Frame1[i]=-32767.0;
}
}
if (PX_ABS(Frame2[i])<1)
{
Frame2[i]*=32768.0;
}
else
{
if (Frame2[i]>0)
{
Frame2[i]=32768;
}
else
{
Frame2[i]=-32767;
}
}
}
//blend
for (i=0;i<FrameSize;i++)
{
px_short val;
val=(px_short)Frame1[i];
PX_MemoryCat(&solveData,&val,sizeof(px_short));
val=(px_short)Frame2[i];
PX_MemoryCat(&solveData,&val,sizeof(px_short));
}
offset+=SOUNDLAB_WINDOW_WIDTH*2*2;
}
PX_SoundStaticDataFree(&pMain->SoundData);
pMain->SoundData.buffer=solveData.buffer;
pMain->SoundData.mp=solveData.mp;
pMain->SoundData.size=solveData.usedsize;
pMain->SoundData.channel=PX_SOUND_CHANNEL_DOUBLE;
}
pMain->bDone=PX_TRUE;
return 0;
}
DWORD WINAPI SoundLab_Main_InitializeSoundData(LPVOID ptr)
{
px_int i,w,x,y;
px_int max=1;
px_int min=-1;
px_double pmax=0;
px_complex frame[SOUNDLAB_WINDOW_WIDTH];
px_double window[SOUNDLAB_WINDOW_WIDTH];
SoundLab_Main *pMain=(SoundLab_Main *)ptr;
if (pMain->SoundData.size)
{
px_short *PCM16=(px_short *)pMain->SoundData.buffer;
for (i=0;i<pMain->SoundData.size/2;i+=2)
{
if (PCM16[i]>max)
{
max=PCM16[i];
}
if (PCM16[i]<min)
{
min=PCM16[i];
}
}
pMain->wave_min=min;
pMain->wave_max=max;
//Build Spectrum
if (pMain->tex_Spectrum.MP)
{
PX_TextureFree(&pMain->tex_Spectrum);
}
w=pMain->SoundData.size/2/2/SOUNDLAB_WINDOW_WIDTH*4;//2 bytes 2 channels 75% overlap
pMain->process_memories=w*SOUNDLAB_WINDOW_WIDTH/2*4;
pMain->lastError[0]=0;
pMain->schedule=0;
if(!PX_TextureCreate(&pMain->Ins->runtime.mp_game,&pMain->tex_Spectrum,w,SOUNDLAB_WINDOW_WIDTH/2))
{
PX_strset(pMain->lastError,"Out Of Memory.");
pMain->bDone=PX_TRUE;
return 0;
}
PX_WindowFunction_hamming(window,SOUNDLAB_WINDOW_WIDTH);
for (x=0;x<w;x++)
{
//Data Sampling
for (i=0;i<SOUNDLAB_WINDOW_WIDTH;i++)
{
frame[i].re=PCM16[x*2*SOUNDLAB_WINDOW_WIDTH/4+i*2];//2bytes
frame[i].im=0;
frame[i].re*=window[i];
}
PX_FFT(frame,frame,SOUNDLAB_WINDOW_WIDTH);
for (i=0;i<SOUNDLAB_WINDOW_WIDTH;i++)
{
if (frame[i].re*frame[i].re+frame[i].im*frame[i].im>pmax)
{
pmax=frame[i].re*frame[i].re+frame[i].im*frame[i].im;
}
}
pMain->schedule=1.0*x/w/2*100;
}
pMain->MaxPower=PX_sqrtd(pmax);
pmax=PX_log(pmax+1);
for (x=0;x<w;x++)
{
px_double unit;
px_color pixel;
//Data Sampling
for (i=0;i<SOUNDLAB_WINDOW_WIDTH;i++)
{
frame[i].re=PCM16[x*2*SOUNDLAB_WINDOW_WIDTH/4+i*2];//2bytes
frame[i].im=0;
frame[i].re*=window[i];
}
//FFT
PX_FFT(frame,frame,SOUNDLAB_WINDOW_WIDTH);
for (y=0;y<SOUNDLAB_WINDOW_WIDTH/2;y++)
{
unit=PX_log(frame[y].re*frame[y].re+frame[y].im*frame[y].im+1)/pmax;
if (unit<pMain->PowerThreshold)
{
unit=0;
}
pixel._argb.a=(px_uchar)(64+191*unit);
pixel._argb.g=(px_uchar)(255*unit);
pixel._argb.r=(px_ucha
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。关于机器学习深度学习的项目,项目真实可靠,欢迎下载学习。
资源推荐
资源详情
资源评论
收起资源包目录
基于重采样,相位声码器及BP神经网络基音分类的变声器,数学,UI及信号处理算法基于PainterEngine开发.zip (59个子文件)
222
LICENSE 34KB
PainterEngine_Filter
PainterEngine_Filter.sln 907B
PainterEngine_Filter.opensdf 42B
PainterEngine_Filter
Filters
common.filter 13KB
PainterEngine_Filter.aps 349KB
PainterEngine_Startup.h 2KB
__main.c 5KB
resource.h 928B
PainterEngine_Application.h 1020B
Filter_Main.h 916B
PainterEngine_Filter.rc 3KB
Filter_Main.c 5KB
PainterEngine_Application.c 3KB
PainterEngine_Filter.vcxproj 11KB
Resources
fox.ico 315KB
flogo.traw 36KB
switch.traw 36KB
volume.traw 2KB
PainterEngine_Startup.c 5KB
PainterEngine_Filter.vcxproj.user 141B
PainterEngine_Filter.vcxproj.filters 16KB
Filter_Text.h 255B
PainterEngine_Filter.suo 38KB
PainterEngine_SoundLab
soundlab.psd 126KB
PainterEngine_SoundLab.suo 69KB
PainterEngine_SoundLab.sln 913B
PainterEngine_SoundLab.opensdf 42B
soundlab.png 22KB
PainterEngine_SoundLab
PainterEngine_SoundLab.vcxproj.filters 16KB
PainterEngine_Startup.h 2KB
PainterEngine_SoundLab.vcxproj.user 141B
SoundLab_Startup.c 1KB
__main.c 5KB
resource.h 932B
PainterEngine_Application.h 1KB
PainterEngine_SoundLab.rc 3KB
SoundLab_Main.h 4KB
SoundLab_Data.h 833B
SoundLab_Main.c 83KB
PainterEngine_Application.c 2KB
PainterEngine_SoundLab.aps 349KB
PainterEngine_SoundLab.vcxproj 12KB
Resources
en32.pxf 22KB
recordfinish.traw 9KB
play.traw 13KB
ann.traw 9KB
save.traw 9KB
logo.traw 155KB
reset.traw 13KB
fox.ico 315KB
sampling.traw 64KB
stop.traw 13KB
recorder.traw 6KB
file.traw 13KB
recording.traw 144KB
test.traw 352KB
PainterEngine_Startup.c 6KB
SoundLab_Startup.h 529B
SoundLab_Text.h 740B
共 59 条
- 1
资源评论
c++服务器开发
- 粉丝: 3046
- 资源: 4461
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功