2013-07-05 4 views

답변

2

예 ... 우리가 할 수 있습니다. Windows Phone 8에서는 이제 C++ 코드를 사용할 수 있습니다.

나는이 correctly.You 다음 단계를 수행 할 수 행한 :

  1. 런타임 프로젝트 C++를 만들

  2. 당신의 C# 프로젝트에서 런타임 프로젝트

  3. ++를 C
  4. intergate AMR-NB 코드 , 문제를 수행하는 함수를 호출하십시오.


int DecodeAMRFileToWAVEFile(const char* pchAMRFileName, const char* pchWAVEFilename) 
{ 
    FILE* fpamr = NULL; 
FILE* fpwave = NULL; 
char magic[8]; 
void * destate; 
int nFrameCount = 0; 
int stdFrameSize; 
unsigned char stdFrameHeader; 

unsigned char amrFrame[MAX_AMR_FRAME_SIZE]; 
short pcmFrame[PCM_FRAME_SIZE]; 

fpamr = fopen(pchAMRFileName, "rb"); 
if (fpamr==NULL) return 0; 

// 检查amr文件头 
fread(magic, sizeof(char), strlen(AMR_MAGIC_NUMBER), fpamr); 
if (strncmp(magic, AMR_MAGIC_NUMBER, strlen(AMR_MAGIC_NUMBER))) 
{ 
    fclose(fpamr); 
    return 0; 
} 

// 创建并初始化WAVE文件 
fpwave = fopen(pchWAVEFilename, "wb"); 
WriteWAVEFileHeader(fpwave, nFrameCount); 

/* init decoder */ 
destate = Decoder_Interface_init(); 

// 读第一帧 - 作为参考帧 
memset(amrFrame, 0, sizeof(amrFrame)); 
memset(pcmFrame, 0, sizeof(pcmFrame)); 
ReadAMRFrameFirst(fpamr, amrFrame, &stdFrameSize, &stdFrameHeader); 

// 解码一个AMR音频帧成PCM数据 
Decoder_Interface_Decode(destate, amrFrame, pcmFrame, 0); 
nFrameCount++; 
fwrite(pcmFrame, sizeof(short), PCM_FRAME_SIZE, fpwave); 

// 逐帧解码AMR并写到WAVE文件里 
while(1) 
{ 
    memset(amrFrame, 0, sizeof(amrFrame)); 
    memset(pcmFrame, 0, sizeof(pcmFrame)); 
    if (!ReadAMRFrame(fpamr, amrFrame, stdFrameSize, stdFrameHeader)) break; 

    // 解码一个AMR音频帧成PCM数据 (8k-16b-单声道) 
    Decoder_Interface_Decode(destate, amrFrame, pcmFrame, 0); 
    nFrameCount++; 
    fwrite(pcmFrame, sizeof(short), PCM_FRAME_SIZE, fpwave); 
} 

Decoder_Interface_exit(destate); 

fclose(fpamr); 
fclose(fpwave); 

// 重写WAVE文件头 
fpwave = fopen(pchWAVEFilename, "r+"); 
WriteWAVEFileHeader(fpwave, nFrameCount); 
fclose(fpwave); 

return nFrameCount; 
} 

코멘트 중국에서 writen되는 코드 : D