社区
多媒体/流媒体开发
帖子详情
求音频加减增益的算法
qingdaolibo
2010-12-26 03:13:29
通过DirectShow的SampleGrabber filter,我可以拿到音频PCM数据的buffer,但是如果对其做加减增益的处理,请高手帮忙,谢谢
...全文
1001
18
打赏
收藏
求音频加减增益的算法
通过DirectShow的SampleGrabber filter,我可以拿到音频PCM数据的buffer,但是如果对其做加减增益的处理,请高手帮忙,谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pp673802227
2013-07-23
打赏
举报
回复
请问有speex的增益降噪算法吗?
shangqt
2011-03-14
打赏
举报
回复
[Quote=引用 16 楼 shangqt 的回复:]
第一个参数是你每次speex_preprocess_run 做处理的sample个数,因为speex_preprocess_run函数没有指定buff长度的参数,所以需要在初始化时设定。
[/Quote]
自己的帖子居然无法编辑。。。。。
根据你的情况:“按照您说的方法,现在倒是有声音了,但是声音伴随着劈啦劈啦的杂音,而且声音的增益本身也没有变化” ,很有可能是你每次交给speex_preprocess_run的buff长度与你初始化时输入的长度不同导致的。
shangqt
2011-03-14
打赏
举报
回复
第一个参数是你每次speex_preprocess_run 做处理的sample个数,因为speex_preprocess_run函数没有指定buff长度的参数,所以需要在初始化时设定。
qingdaolibo
2011-01-06
打赏
举报
回复
Buffer是严格意义的PCM信号值
qingdaolibo
2011-01-06
打赏
举报
回复
还是不行呀,
frame_size = 48000/1000*10;
float q = 24000.0F;
pOutData是我从DirectShow里取出的Buffer,长度为4096
SpeexPreprocessState *st;
st = speex_preprocess_state_init(frame_size, 48000);
BYTE * p_SingleData =NULL;
hr = speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_AGC, &y);
hr = speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_AGC_LEVEL, &q);
hr = speex_preprocess_run(st, (spx_int16_t*)pOutData);
speex_preprocess_state_destroy(st);
如果frame_size = Buffer的长度,也就是4096,那就是没有声音,如果frame_size > 0 ,那么就会有劈啦劈啦声,如果frame_size = 0,程序就报错。这种情况应该和q是多少没有关系
hdq1115
2011-01-02
打赏
举报
回复
那肯定还是你的参数设定的有问题啊,自己再仔细检查检查吧
qingdaolibo
2010-12-31
打赏
举报
回复
按照您说的方法,现在倒是有声音了,但是声音伴随着劈啦劈啦的杂音,而且声音的增益本身也没有变化
hdq1115
2010-12-29
打赏
举报
回复
[Quote=引用 7 楼 qingdaolibo 的回复:]
还是贴代码吧!!如下:
SpeexPreprocessState * st;
st = speex_preprocess_state_init(SampleSize/2,48000);
int i=1;
hr = speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_AGC, &i);
f = 24000.0F;
hr = speex_……
[/Quote]
[Quote=引用 8 楼 qingdaolibo 的回复:]
现在的问题是,上述的代码在hr = speex_preprocess_run(st,(short*)pOutData);
执行之后pOutData都变成0了
[/Quote]
这个都变成零了,看下是不是参数设置的不正确,hr = speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_AGC_LEVEL, &f); 有可能第二个参数设置的是错的,用另一个SET_AGC选项, 前辍也是 SPEEX_PREPROCESS_SET_AGC_XXXX,具体名字不太记得了,开发环境里面敲一下,有两个,选另一个试试,之前记得用一个会导致不发声的
祝好运!
hdq1115
2010-12-29
打赏
举报
回复
SpeexPreprocessState *speex_preprocess_state_init(int frame_size, int sampling_rate); 这个函数里面的参数自己注意看下Speex的编程API,frame_size是一帧语音时长的样本个数,和你的 sampleing_rate 有关,比如你sampling_rate取 48000,而语音是每 10ms一帧,则 frame_size应该是 ( 48000样本/s)*10ms=480,另外还有一个再次强调下: frame_size只是表示一帧语音时长对应的语音样本个数,每个语音样本用几个字节来表示是另一回事
qingdaolibo
2010-12-27
打赏
举报
回复
现在的问题是,上述的代码在hr = speex_preprocess_run(st,(short*)pOutData);
执行之后pOutData都变成0了
CyberLogix
2010-12-27
打赏
举报
回复
Speex里面有AGC语音增益的代码,你可参考下
qingdaolibo
2010-12-27
打赏
举报
回复
还是贴代码吧!!如下:
SpeexPreprocessState * st;
st = speex_preprocess_state_init(SampleSize/2,48000);
int i=1;
hr = speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_AGC, &i);
f = 24000.0F;
hr = speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_AGC_LEVEL, &f);
i=1;
hr = speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_DENOISE, &i);
hr = speex_preprocess_run(st,(short*)pOutData);
speex_preprocess_state_destroy(st);
qingdaolibo
2010-12-27
打赏
举报
回复
现在还有个问题,就是SpeexPreprocessState *speex_preprocess_state_init(int frame_size, int sampling_rate);这个函数怎么调用?我的DirectShow 的 音频buffer是48000的采样率,buffer的大小是4096,参数是不是可以如下填写:SpeexPreprocessState *speex_preprocess_state_init(4096/2,48000),一直没琢磨明白,还请明白的人指点一下
AudioAEC
2010-12-26
打赏
举报
回复
对,Speex 可以对声音进行增强。
hdq123
2010-12-26
打赏
举报
回复
若还有疑问联系我: 扣扣 403174794。
hdq123
2010-12-26
打赏
举报
回复
有一款开源的编解码器 Speex 提供有语音前后端处理技术,有AGC语音增益处理啊,你看看
qingdaolibo
2010-12-26
打赏
举报
回复
打错字了,不是“如果”,是“如何”
从原理到实践:深入解析
音频
3A
算法
如何重塑清晰通话
本文深入解析
音频
3A
算法
(AEC回声消除、ANS噪声抑制、AGC自动
增益
控制)的核心原理与工程实践。涵盖各
算法
的信号处理机制(如自适应滤波、谱掩模、多段
增益
控制)、联合作战流水线顺序、移动端轻量化优化策略,以及PESQ/STOI/ERLE等客观评估指标和常见问题排查方法。重点讨论实时音视频场景下的参数调优、VAD协同、深度学习融合等关键技术挑战。
音诺ai翻译机利用STM32F4与音量
增益
调节适配听力障碍振动提示
本文介绍音诺AI翻译机如何利用STM32F4实现
音频
增益
调节与振动提示,帮助听力障碍者感知语音信息。系统通过CMSIS-DSP库进行实时信号处理,采用自适应
增益
算法
提升语音可懂度,并结合PWM控制振动马达实现多级触觉反馈。软硬件协同设计确保低延迟、高可靠性,支持多场景应用。
HiChatBox速度比例调节平滑
加减
速实现
本文介绍HiChatBox如何通过
增益
平滑控制和语速比例调节实现自然语音的启停与变速。采用分段线性
增益
调控和余弦缓动插值
算法
,有效避免硬启停和突变调速问题,提升用户体验。系统轻量高效,适用于嵌入式平台,并支持情境感知与交叉淡入淡出等高级特性。
TAS3108 DSP ALU指令集解析:从基础算术到
音频
算法
实战
本文系统解析德州仪器TAS3108
音频
DSP的ALU1与ALU2指令集,涵盖ABS、NEG、SHL/SHR、LOG2/ALOG2、BNC/BOC/JMP等核心指令的操作机制、寄存器交互(B/L、BR/LR、ACC、DO1-DO8)及流水线时序约束。重点结合
音频
处理场景,如峰值检测、
增益
控制、压缩器对数域运算、限幅与峰值保持器实现,阐明定点数格式(25.23/5.4)、裁剪(CLIP)、溢出防护与NOP延迟槽等关键技术要点。
CORDIC
算法
计算三角函数无浮点
本文介绍CORDIC
算法
如何在无FPU的嵌入式系统中,仅用
加减
法和移位运算高效计算sin和cos。适用于FOC电机控制、
音频
合成与机器人运动学,具备低延迟、确定性执行等优势,尤其适合资源受限场景。
多媒体/流媒体开发
2,554
社区成员
20,277
社区内容
发帖
与我相关
我的任务
多媒体/流媒体开发
专题开发/技术/项目 多媒体/流媒体开发
复制链接
扫一扫
分享
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章