6

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);


    }
}
4

1 に答える 1