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. MsOffice用於文件加密的算法是什麼?
- 3. 什麼是將mp3文件轉換爲wav文件的算法?
- 4. 什麼是算法
- 5. 什麼是修改加維克算法?
- 6. 什麼是C++文件和DPLL算法追溯樹的方法?
- 7. 使用cat加入mp3文件。這是什麼黑魔法?
- 8. 壓縮文件中記錄的壓縮算法是什麼?
- 9. 什麼是計算Windows文件夾大小的最快方法?
- 10. 這是什麼算法?
- 11. 什麼是cooks-kim算法
- 12. 什麼是McNaughton-Yamada算法?
- 13. 什麼是s2k算法?
- 14. 什麼是單遍算法
- 15. 什麼是算法的bigO與每個添加的n相加?
- 16. 將PCM轉換爲IMA ADPCM的算法?
- 17. PCM wav vox文件
- 18. 什麼加密算法保留文件差異?
- 19. 什麼是restore.dg文件?它的語法是什麼?
- 20. 帶文件輸入的onchange的解決方法是什麼?
- 21. 無法將PCM數據寫入wav文件
- 22. 這是什麼「加入」在做什麼?
- 23. 什麼加密算法最適合加密服務器上的會話文件?
- 24. 將數據寫入文件的最有效方法是什麼?
- 25. 文件寫入的最佳做法是什麼
- 26. 將結構寫入文件的最佳方法是什麼?
- 27. 什麼是使用SaveFileDialog寫入文件的語法
- 28. 什麼是「加入」在MySQL
- 29. Random.next()背後的算法是什麼?
- 30. 什麼是基於規則的算法?
請參閱http://stackoverflow.com/questions/1784396/how-to-mix-audio-samples – 2010-03-28 23:36:26