1
Windows Phone 8은 amr-nb 오디오 형식을 지원합니까? Windows phone 8에서 amr-nb를 pcm으로 변환 할 수 있습니까?Windows Phone 8의 AMR-NB 오디오 지원
Windows Phone 8은 amr-nb 오디오 형식을 지원합니까? Windows phone 8에서 amr-nb를 pcm으로 변환 할 수 있습니까?Windows Phone 8의 AMR-NB 오디오 지원
예 ... 우리가 할 수 있습니다. Windows Phone 8에서는 이제 C++ 코드를 사용할 수 있습니다.
나는이 correctly.You 다음 단계를 수행 할 수 행한 :
런타임 프로젝트 C++를 만들
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