我正在编写一个用于编辑Wav音频文件的C程序。 我已将所有文件数据加载到无符号整数值数组(UINT16_T)中。
现在,我想减少文件的音量。 我认为减少单个值的值(一定百分比)就足够了。但如果我这样做,我会得到一个带噪音的音频文件(我想我理解的是“静态”或“点击噪音”)
为什么呢?哪个是正确的程序?
谢谢!
这是受影响的一段代码:
FILE* fp;
FILE* fp2;
/*Size of my file*/
#define BUFFER_SIZE 28242852
/*Array with file data*/
unsigned char *buffer;
/*Array used for converting two bytes in an unsigned int*/
unsigned char uintBytes[2];
/*The unsigned int obtained*/
uint16_t * conv;
/*The new value calculated*/
uint16_t nuovoValore;
/*Array used for the reverse conversion, form UINT to bytes*/
unsigned char* nuovoValArray;
for(i=44; i<BUFFER_SIZE;i++){
if(i%2==0){
/*I read 2 bytes form the array and "convert" it in an unsigned int*/
uintBytes[0]=buffer[i];
uintBytes[1]=buffer[i+1];
conv=(uint16_t *) &uintBytes[0];
/*Calculate the new value (-30%) to write in the new file*/
nuovoValore= *conv - ((float)*conv*30/100);
if(nuovoValore<0) nuovoValore=0;
nuovoValArray=malloc(2);
memset(nuovoValArray,'\0',2);
nuovoValArray=(unsigned char*)&nuovoValore;
/*Write the two bytes of the new file*/
fwrite(&nuovoValArray[0], 1, 1, fp2);
fwrite(&nuovoValArray[1], 1, 1, fp2);
}
}
答案 0 :(得分:1)
为简单起见,请在编译程序之前检查音频文件的所有规格。普通.wav
文件具有以下属性:
因此,请确保您正在解析的音频文件包含这些属性。一旦确认这些属性对于音频文件是通用的,那么您就可以开始测试了。如果您的文件不包含这些属性,您可能需要考虑获取Audacity或类似内容来制作测试.wav
文件。
你的代码有点奇怪。首先,您将数据转换为char
,然后转换为int
,然后转换为float
。这会给你一些严重的错误。所有这些数据类型的大小都不同。 Float
也有完全不同的二进制格式。值int
的{{1}}可能是65
float
(或类似的东西)。只需使用-34564.23
。
我也看到你为你的代码打开了两个文件 - 不要打扰,因为它会使代码更大。保持代码尽可能简单,直到它完成你想要的 - 然后添加辅助属性。
另外,在您
int16_t
上写了fwrites
,但它应该是fwrite (&nuovoValArray[0], 1, 1, fp2)
,因为fwrite (&nuovoValArray[0], 2, 1, fp2)
的大小是2个字节而不是1个。
当涉及到减少文件的数量时,这是一个应该有效的一般方法:
int16_t
(16位或2个字节)samp[i]
samp[i] -= (int16_t) (samp[i] * percent);
以下是一段可能有用的代码:
i
我之前编写了一个应用程序,用于绘制// open file
// read into char * fileBuffer
int sampleCount = ((fileSize - dataOffset) / sizeof (int16_t));
int16_t * samp = (int16_t *) &fileBuffer[dataOffset];
float percent = 0.6f;
for (int i = 0; i < sampleCount; i++){
samp[i] -= (int16_t) (samp[i] * percent); // Should work +/- values
}
// save file
文件以进行波形分析。所有我必须阅读以了解文件格式的是this页面 - 它也应该对您有所帮助。