webrtc PCM 音频 相关函数

来源:互联网 发布:手机淘宝一元秒杀 编辑:程序博客网 时间:2024/06/07 18:20

webrtc PCM resample


在webrtc中,对应的音频resample文件是:

"webrtc\common_audio\resampler\include\resampler.h"


目前,在这个文件中,仅仅可以对PCM的采样率进行改变,不可以改变声道数;

但是左右声道的提取,也比较简单,可以自己实现,可以看我之前的文章;


如果需要更加强大和方便的音频resample可以直接用FFmpeg,但是为了最小限度的改变webrtc,所以还是用webrtc中提供的相关库;




#include "webrtc\common_audio\resampler\include\resampler.h"




int file_size(char* filename)
{
FILE *fp = fopen(filename, "r");
if (!fp) return -1;
fseek(fp, 0L, SEEK_END);
int size = ftell(fp);
fclose(fp);


return size;
}




void Ctmfc_webrtc_videoDlg::OnBnClickedButton3()
{
// TODO: Add your control notification handler code here




char * pstrFile = "E:\\webrtc_Audio_Remote_BytesPerSample_2,__channels_2,__SampleRate_48000 - test.pcm";
int lengthIn = file_size(pstrFile);


size_t outLen = 0;


uint8_t * samplesIn = new uint8_t[lengthIn];
uint8_t * samplesOut = new uint8_t[lengthIn];


FILE * f = fopen(pstrFile, "r+b");
fread(samplesIn, 1, lengthIn, f);
fclose(f);










webrtc::Resampler pcmResampler( 48000, 8000,  2 ); 






// Resample samplesIn to samplesOut.
int Res = pcmResampler.Push((int16_t*)samplesIn, lengthIn/2, (int16_t* )samplesOut, lengthIn/2, outLen);  // NOLINT: to avoid changing APIs




FILE * fAudio = fopen( "E:\\webrtc_Audio_resample.pcm", "w+b");
fwrite((uint8_t *)samplesOut, 1, outLen*2, fAudio);
fclose(fAudio);


}





简单封装为一个函数:

uint8_t * resampe( uint8_t * samplesIn, int lengthIn,  int nSampleRate, int nChannel, size_t & outLen)
{
  webrtc::Resampler pcmResampler(nSampleRate, /*nTargetAudioSample*/8000, nChannel);

uint8_t * samplesOut = new uint8_t[lengthIn];
outLen = 0; 


// // Resample samplesIn to samplesOut.
  int Res = pcmResampler.Push((int16_t*)samplesIn, lengthIn / 2, (int16_t*)samplesOut, lengthIn / 2, outLen);


Res = 0;


outLen = outLen * 2;


if (outLen>0)
{
return samplesOut;
}


return NULL;


}


这里要注意的是,修改采样率后,音质可能出现噪音;













关于左右声道的算法可以用: class AudioFrameOperations

相关目录:webrtc58\src\webrtc\audio\utility\audio_frame_operations.h




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 智校园忘记密码怎么办 wps图片显示空白怎么办 dr.com闪退怎么办 联想笔记本连不上无线网络怎么办 长时间不用电池休眠怎么办? 校园电信卡欠费怎么办 校园联通卡欠费怎么办 校园网等不上怎么办 app显示尚未授权怎么办 手机屏有气泡怎么办 平板老是闪退怎么办 挖机环保不合格怎么办 摩托车高压火弱怎么办 助力转向机漏油怎么办 淘宝运费险不够怎么办 iphonex锁屏延迟怎么办 淘宝不能评价了怎么办 微商卖香烟不发货怎么办? 三诺血糖仪不准怎么办 如果点球平了怎么办 a2期胃溃疡怎么办水肿 末次月经记不清怎么办 身体弱容易生病怎么办 用复方沙棘出血怎么办 服了苯扎氯铵溶液怎么办 药监局查到过期药品怎么办 血管粥样硬化怎么办 化疗后血管硬化怎么办 牛油果没熟切开了怎么办 切开的牛油果没熟怎么办 牛油果打开不熟怎么办 牛油果切开不熟怎么办 牛油果没有熟怎么办 舌头上有白点怎么办 仇人追我怎么办gl 瑞和宝被锁了怎么办 微哨无法下线怎么办 Ppt版本不一样打不开怎么办 ps文件太大打不开怎么办 想代理皮肤药怎么办 按摩店办理执照怎么办