如何轉換音訊資料格式1

2021-09-06 08:50:10 字數 1454 閱讀 2380

原文在此:

前面的音訊處理背景知識就先跳過,需要的請自行腦補。

直接上乾貨。

原理,雙聲道的16位取樣,每16位是乙個聲道,也就是兩位元組;下乙個16位是另外乙個聲道,交錯進行。

private byte monotostereo(byte input)

return output;

}

原理,去掉一半的資料即可。

private byte stereotomono(byte input)

return output;

}

如果是混合立體聲,則可以把左右聲道的資料求平均,得到單聲道的值

private byte mixstereotomono(byte input)

return output;

}

相對簡單,把每個16bit(兩個byte,合成乙個short)除以16位的最大值,得到乙個相對的float值(介於0-1之間)。

public float convert16bittofloat(byte input)

return output;

}

這個就稍微麻煩了,從原資料中每次取24位,即3個byte,補上乙個0,折合成乙個int,然後除以3個byte組成的資料最大值,得到乙個相對float值(介於0-1之間)。

public float convert24bittofloat(byte input)

return output;

}

這種方式其實也相當於把3個取樣點,線性擬合變成了2個了。

兩種方式還原的**一樣(後一種多的乙個點資訊已經丟失,還原也只有2個byte了):

for (int sample = 0; sample < sourcesamples; sample++)

取樣是這個文章中比較複雜的部分。

***************==== 佔坑,以後講原理********************

原理就是,拉大或縮小取樣點的間距。當然,明顯的是,如果如果新取樣率大於舊的,其實沒有意義,造成很多點只會簡單重複。

新取樣率小於舊的,就會在現有的點上,等比例往後拉。

// just about worst resampling algorithm possible:

private float resample*****(float inbuffer, int inputsamplerate, int outputsamplerate)

return outbuffer.toarray();

}

********** 留坑,講重取樣的測試**********

下一部分,音訊檔案格式的轉換

alsa驅動下常用的PCM音訊資料格式

s8 signed 8 bits,有符號字元 char,表示範圍 128 127 u8 unsigned 8 bits,無符號字元 unsigned char,表示範圍 0 255 s16 le little endian signed 16 bits,小端有符號字 short,表示範圍 32768...

C 資料格式轉換

本文主要講述整數 二進位制字串與十六進製制字串之間的轉換。使用 ltoa s 函式可以將整數轉換為二進位制字串。該函式的作用是將乙個 long 整數轉換為字串。ltoa s 函式有很多格式,其中的乙個格式為 errno t ltoa s long value,char str,int radix 其...

Python資料格式轉換

函式 描述int x base 將x轉換為乙個整數 long x base 將x轉換為乙個長整數 float x 將x轉換到乙個浮點數 complex real imag 建立乙個複數 str x 將物件 x 轉換為字串 repr x 將物件 x 轉換為表示式字串 eval str 用來計算在字串中...