首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用超级动力SDK重新录制音频

使用超级动力SDK重新录制音频
EN

Stack Overflow用户
提问于 2020-11-18 22:10:26
回答 1查看 100关注 0票数 0

我正在使用一个超级强大的录音机来录音,我正在录制音频然后添加曲目,所以如果我编辑第一首曲目并在第一首曲目上重新录制,那么添加曲目就是将音频与旧音频混合在一起,而不是覆盖音频。超强SDK有没有覆盖音频的功能?任何帮助都将不胜感激。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-12-22 11:43:03

您必须分析录制的pcm文件,并从要重新录制的部分覆盖该文件。SuperPowered没有这个功能。

代码语言:javascript
复制
FILE *fin;
float runTime=0;
//PCM HEADER
int SampleRate_24to27=0;// 441000,...,8000
int ByteRate_28to31=0;
short MonoStreo_32to33=0;
short BitPerSample_34to35=0;
int DataChunkSize_40to43=0;

std::string file = GS->mWritePath;
file.append("rec1.wav");

fin=fopen(file.c_str(),"rb");

fseek(fin,24,SEEK_SET);
fread(&SampleRate_24to27 , sizeof(int) , 1, fin);
printf("SampleRate %d \n",SampleRate_24to27);
fseek(fin,28,SEEK_SET);
fread(&ByteRate_28to31 , sizeof(int) , 1, fin);
printf("ByteRate %d \n",ByteRate_28to31);
fseek(fin,32,SEEK_SET);
fread(&MonoStreo_32to33 , sizeof(short) , 1, fin);
printf("MonoStreo %d \n",MonoStreo_32to33);
fseek(fin,34,SEEK_SET);
fread(&BitPerSample_34to35 , sizeof(short) , 1, fin);
printf("BitPerSample %d \n",BitPerSample_34to35);
fseek(fin,40,SEEK_SET);
fread(&DataChunkSize_40to43 , sizeof(int) , 1, fin);
printf("DataChunkSize %d \n",DataChunkSize_40to43);
runTime=(float)(((float)DataChunkSize_40to43/(float)(SampleRate_24to27*MonoStreo_32to33)));
printf("duration sec = %fsec\n", runTime);
printf("duration min = %3.2fmin", (float)runTime/60);
fclose(fin);

int savePos = 0;
savePos = 44+reRecordStartSec*(SampleRate_24to27*MonoStreo_32to33);
// 44 -> HEADER SIZE
// 4sec * (SampleRate_24to27*MonoStreo_32to33)

char buf[SPLIT_BYTE]; //1000KB

std::string file1 = GS->mWritePath;
file1.append("rec1.wav");
std::string file2 = GS->mWritePath;
file2.append("rec2.wav");

FILE * rfp, * wfp;

wfp = fopen(file1.c_str(), "rb+"); //src

rfp = fopen(file2.c_str(), "rb"); //dst

fseek(wfp, savePos, SEEK_SET);
fseek(rfp, 44, SEEK_SET);// dst header skip

long count = 0;

while (feof(rfp) == 0)    // 
{
    count = fread(buf, sizeof(char), SPLIT_BYTE, rfp);
    fwrite(buf, sizeof(char), count, wfp);
    memset(buf, 0, SPLIT_BYTE);
}

fclose(rfp);
fclose(wfp);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64894747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档