【C語言】PCM音頻資料處理---音量增大或減小__C語言

來源:互聯網
上載者:User

PCM音頻資料增大或減小的原理主要是,將採樣的資料乘上一個數字或者是除以一個數字,但要注意溢出處理。具體實現如下 C語言實現

#define OLD_FILE_PATH "file.pcm"#define VOL_FILE_PATH "vol.pcm"int volume_adjust(short  * in_buf, short  * out_buf, float in_vol){    int i, tmp;    // in_vol[0, 100]    float vol = in_vol - 98;    if(-98<vol && vol<0)        vol = 1/(vol*(-1));    else if(0<=vol && vol<=1)        vol = 1;    /*    else if(1<=vol && vol<=2)        vol = vol;    */    else if(vol<=-98)        vol = 0;    else if(vol>=2)        vol = 40;  //這個值可以根據你的實際情況去調整    tmp = (*in_buf)*vol; // 上面所有關於vol的判斷,其實都是為了此處*in_buf乘以一個倍數,你可以根據自己的需要去修改    // 下面的code主要是為了溢出判斷    if(tmp > 32767)        tmp = 32767;    else if(tmp < -32768)        tmp = -32768;    *out_buf = tmp;    return 0;}void pcm_volume_control(int volume){    short s16In = 0;    short s16Out = 0;    int size = 0;    FILE *fp = fopen(OLD_FILE_PATH, "rb+");    FILE *fp_vol = fopen(VOL_FILE_PATH, "wb+");    while(!feof(fp))    {        size = fread(&s16In, 2, 1, fp);        if(size>0)        {                    volume_adjust(&s16In, &s16Out, volume);            fwrite(&s16Out, 2, 1, fp_vol);               }    }    fclose(fp);    fclose(fp_vol);}int main(void){    pcm_volume_control(100);     return 0;}

上面程式中,main函數中pcm_volume_control(100),這裡設定為100主要是為了讓其走入volume_adjust函數中的最後一個else語句,而最終放大的資料,是將其乘上一個40,這個值可以根據你自己的需求去調整。

vol = 40; tmp = (*in_buf)*vol;

經過上面的演算法放大後,可以用Audacity工具去查看,放大後的PCM資料,如下圖所示,上面的波形是未經處理資料,下面的波形是經過音量放大後的資料
參考資料

1.PCM聲音資料解析
2.音頻重採樣與PCM音量大小最後代碼
3.PCM 音量大小

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.