我正在使用WinAPI - Wave函數來創建錄製程序,將麥克風錄製X秒。我在網上搜索了一下,發現PCM數據太大,並且通過套接字發送它會成爲問題...壓縮PCM數據
如何將它壓縮到更小的東西?任何簡單/「便宜」的方式?
我也注意到,當我用波動API函數聲明的格式,我使用這個代碼:
WAVEFORMATEX pFormat;
pFormat.wFormatTag= WAVE_FORMAT_PCM; // simple, uncompressed format
pFormat.nChannels=1; // 1=mono, 2=stereo
pFormat.nSamplesPerSec=sampleRate; // 44100
pFormat.nAvgBytesPerSec=sampleRate*2; // = nSamplesPerSec * n.Channels * wBitsPerSample/8
pFormat.nBlockAlign=2; // = n.Channels * wBitsPerSample/8
pFormat.wBitsPerSample=16; // 16 for high quality, 8 for telephone-grade
pFormat.cbSize=0;
正如你所看到的,pFormat.wFormatTag= WAVE_FORMAT_PCM;
也許我可以插入,而不是WAVE_FORMAT_PCM
別的東西,所以它會馬上被壓縮? 我已經檢查了其他值的MSDN,但它們都不適用於我的Visual Studio ...
那麼,我該怎麼做?
謝謝!
wFormat標籤描述數據。改變它不會改變數據,它只會導致它解釋錯誤。您需要的是一個編碼器,它將採用PCM並輸出壓縮格式,如ADPCM或Vorbis。 – AShelly
你需要一個編解碼器。你需要什麼編解碼器?這取決於你的約束。你正在錄製語音或音樂還是別的什麼?您是否編碼了一個可以無損下載或編碼實時流的文件?如果是實時的,你的帶寬是多少?一旦你回答了這些問題,你可以選擇一個編解碼器。 – arx
@arx我試圖寫一個小型的IP語音程序 – Amit