2
A
回答
3
首先找到一種方法來逐個樣本地處理它們,然後將所有流中的樣本加在一起。
您將遇到溢出問題。如果發生這種情況,只需將結果值鉗制到最大/最小採樣值。
您可能還想提供一個選項,以在夾緊到用戶之前縮放輸出,並且您可能還想報告一些統計信息(每秒左右)發生夾緊事件的一些統計信息,因此用戶可以對聲音進行一些控制質量。
0
PCM音頻文件有一個標題和連續的音頻數據樣本。您需要閱讀標題並可以在複合(混合)文件標題中使用它。
FILE *fpIn; // Input file pointer
char temp[2*FrameSize];
char inFile[]="input_1.wav" ;
char outFile[]="result.wav" ;
if ((fpIn = fopen(inFile,"rb")) == NULL)
{
printf("Can't open input file\n");
exit(0);
}
if ((fpOut = fopen(outFile,"wb")) == NULL)
{
printf("Can't open data file\n");
exit(0);
}
// Cut the wav headers 44 byte
fread(temp,sizeof(char),44,fpIn); // Remove wave header from input file
for the writing back
fwrite(temp,sizeof(char),22*2,fpOut); // Add wave header from input file2
while(fread(temp, sizeof(char),N*2,fpIn) == (unsigned short)(2*N))
{
for (i=0;i<N;i++) // Get PCM input data
{
input1[i] = (temp[2*i]&0xFF)|(temp[2*i+1]<<8);
}
// Mixing logic goes here
for (j=0, i=0;i<N;i++)
{
input[i]=0;
temp[j++] = input [i]&0xFF;
temp[j++] = (input [i]>>8)&0xFF;
}
fwrite(temp,sizeof(char),N*2,fpOut); // Save result
}
fclose(fpOut);
fclose(fpIn);
上面的代碼演示瞭如何讀取和寫入wav文件,你需要實現加權因子的混合邏輯等,如。輸出=阿爾法。 Input1 +(1-alpha)Input2 //其中alpha在0和1之間取決於你喜歡如何添加Input 1 vs Input 2.如果alpha = 0.5,均勻添加。
相關問題
- 1. 將pcm轉換爲adpcm的算法是什麼?
- 2. 加載用於openGL的OBJ文件的好算法是什麼?
- 3. MsOffice用於文件加密的算法是什麼?
- 4. 什麼是將mp3文件轉換爲wav文件的算法?
- 5. 什麼是算法
- 6. 什麼是修改加維克算法?
- 7. 什麼是C++文件和DPLL算法追溯樹的方法?
- 8. 什麼是TreeNode.Nodes.ContainsKey的算法
- 9. 使用cat加入mp3文件。這是什麼黑魔法?
- 10. 什麼是Math.tan(x)的Java庫的源文件算法?
- 11. 這是什麼算法?
- 12. 什麼是McNaughton-Yamada算法?
- 13. 這是什麼算法?
- 14. 什麼是s2k算法?
- 15. 什麼是cooks-kim算法
- 16. 這是什麼算法
- 17. 什麼是單遍算法
- 18. 什麼是Excel Days360算法?
- 19. 什麼是「make -jX」算法
- 20. 壓縮文件中記錄的壓縮算法是什麼?
- 21. 什麼是算法的bigO與每個添加的n相加?
- 22. 減法算法的意思是什麼?
- 23. 將PCM轉換爲IMA ADPCM的算法?
- 24. 計算大於5GB的文件的Amazon-S3 Etag的算法是什麼?
- 25. AudioRecord - 寫PCM文件
- 26. PCM wav vox文件
- 27. PCM爲WAV文件
- 28. 什麼加密算法保留文件差異?
- 29. 爲什麼遞歸算法添加重複文件?
- 30. 什麼是單程算法,是我的算法?
請參閱http://stackoverflow.com/questions/1784396/how-to-mix-audio-samples – 2010-03-28 23:36:26