社区
多媒体/流媒体开发
帖子详情
求助~~ 麦克风和混音mixer只能选择一个。。如用同时捕捉这两路输入。
starcbh
2006-02-17 03:33:23
麦克风和混音mixer只能选择一个。。如用同时捕捉这两路输入??
~~~~~~~~~~~~~~~~~
...全文
255
7
打赏
收藏
求助~~ 麦克风和混音mixer只能选择一个。。如用同时捕捉这两路输入。
麦克风和混音mixer只能选择一个。。如用同时捕捉这两路输入?? ~~~~~~~~~~~~~~~~~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lserlohn
2006-03-22
打赏
举报
回复
应该可以吧,我觉得只要你能够采集到这两路音频,写一个Transform Filter,两个输入Pin一个输出Pin,中间过程的处理,我倒是有个一例子
mix(sample_buffer_t &samples)
{
sample_t buf[NCHANNELS];
int ch, nsample;
int in_ch = in_mode.channels;
int out_ch = out_mode.channels;
int in_nch = in_mode.nchans();
int out_nch = out_mode.nchans();
int in_order[6];
int out_order[6];
memcpy(in_order, in_mode.order, sizeof(in_order));
memcpy(out_order, out_mode.order, sizeof(out_order));
sample_t max;
sample_t factor;
sample_t s;
sample_t *sptr;
sample_t in_levels_loc[NCHANNELS];
sample_t out_levels_loc[NCHANNELS];
memset(in_levels_loc, 0, sizeof(in_levels_loc));
memset(out_levels_loc, 0, sizeof(out_levels_loc));
sample_t release_factor;
if (release < 1.0)
release = 1.0;
release_factor = pow(release, double(NSAMPLES) / 48000);
///////////////////////////////////////
// Reorder matrix
mixer_matrix_t m;
memset(&m, 0, sizeof(m));
int ch1, ch2;
for (ch1 = 0; ch1 < in_nch; ch1++)
for (ch2 = 0; ch2 < out_nch; ch2++)
m[ch1][ch2] = matrix[in_order[ch1]][out_order[ch2]] * in_gains[in_order[ch1]] * out_gains[out_order[ch2]];
///////////////////////////////////////
// Adjust gain
///////////////////////////////////////
// Adjust gain
if (auto_gain && !normalize)
if (gain * release_factor > master)
gain = master;
else
gain *= release_factor;
///////////////////////////////////////
// Input levels
// optimize: expand channels cycle
for (ch = 0; ch < in_nch; ch++)
{
max = 0;
sptr = samples[ch];
for (nsample = 0; nsample < NSAMPLES2/8; nsample++)
{
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
}
in_levels_loc[ch] = max;
}
max = in_levels_loc[0];
for (ch = 1; ch < in_nch; ch++)
if (max < in_levels_loc[ch]) max = in_levels_loc[ch];
///////////////////////////////////////
// DRC
// drc_power means level increase at -50dB
if (drc_on)
if (drc_level * release_factor > pow(max/in_mode.level, -log10(drc_power)*20/50))
drc_level = pow(max/in_mode.level, -log10(drc_power)*20/50);
else
drc_level *= release_factor;
else
drc_level = 1.0;
///////////////////////////////////////
// Mix samples
// optimize: do not multiply by nulls (most of matrix)
factor = gain * drc_level * out_mode.level / in_mode.level;
memset(buf, 0, sizeof(buf));
for (nsample = 0; nsample < NSAMPLES2; nsample++)
{
for (ch = 0; ch < out_nch; ch++)
{
buf[ch] = 0;
for (ch2 = 0; ch2 < in_nch; ch2++)
buf[ch] += samples[ch2][nsample] * m[ch2][ch];
}
for (ch = 0; ch < out_nch; ch++)
samples[ch][nsample] = buf[ch] * factor;
}
///////////////////////////////////////
// Output levels
memset(out_levels_loc, 0, sizeof(out_levels_loc));
for (ch = 0; ch < out_nch; ch++)
{
max = 0;
sptr = samples[ch];
for (nsample = 0; nsample < NSAMPLES2/8; nsample++)
{
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
if (fabs(*sptr) > max) max = fabs(*sptr); sptr++;
}
out_levels_loc[ch] = max;
}
max = out_levels_loc[0];
for (ch = 1; ch < out_nch; ch++)
if (max < out_levels_loc[ch]) max = out_levels_loc[ch];
///////////////////////////////////////
// Auto Gain Control
if (auto_gain)
{
if (max > out_mode.level)
{
factor = out_mode.level / max;
gain *= factor;
if (gain < min_gain)
{
factor *= min_gain / gain;
gain = min_gain;
}
max *= factor;
sptr = (float *)samples;
nsample = out_nch * NSAMPLES2 / 8;
while (nsample--)
{
*sptr++ *= factor; *sptr++ *= factor;
*sptr++ *= factor; *sptr++ *= factor;
*sptr++ *= factor; *sptr++ *= factor;
*sptr++ *= factor; *sptr++ *= factor;
}
}
}
///////////////////////////////////////
// Clip
// should be rare
if (max > out_mode.level)
{
sptr = (sample_t *)samples;
nsample = out_nch * NSAMPLES2;
while (nsample--)
{
s = *sptr;
if (s > +out_mode.level) *sptr = +out_mode.level;
if (s < -out_mode.level) *sptr = -out_mode.level;
sptr++;
}
}
///////////////////////////////////////
// Normalize output levels
for (ch = 0; ch < NCHANNELS; ch++)
{
if (CH_MASK(in_order[ch]) & in_ch)
{
in_levels_loc[ch] /= in_mode.level;
in_levels_loc[ch] *= in_gains[in_order[ch]];
if (in_levels_loc[ch] > in_levels[in_order[ch]])
in_levels[in_order[ch]] = in_levels_loc[ch];
}
if (CH_MASK(out_order[ch]) & out_ch)
{
out_levels_loc[ch] /= out_mode.level;
if (out_levels_loc[ch] > out_levels[out_order[ch]])
out_levels[out_order[ch]] = out_levels_loc[ch];
}
}
具体的你到Sourceforge.net上搜索一个叫matrix mixer的例子看看好了,我是搞视频混合的,对这个也不是太了解。
zcd_jimy
2006-03-22
打赏
举报
回复
个人认为是不行的, 在windows中, 录音选择音源时, 都是只能选其中一个.
如果非要这样, 那肯定要声卡支持同时采集两路音源.
cx0928
2006-02-22
打赏
举报
回复
可以考虑使用硬件混响器
ccxian123
2006-02-21
打赏
举报
回复
采集两个出来,再混合应该可以的。
zhaojian999
2006-02-21
打赏
举报
回复
我觉得也不行
蒋晟
2006-02-21
打赏
举报
回复
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/enumerating_capture_devices.asp
DentistryDoctor
2006-02-18
打赏
举报
回复
这个不行吧。
C/C++语言基础进阶算法备赛面试 经典、实用、趣味 程序设计编程300例精解每日一练第18天
备赛蓝桥杯,大学电子设计大赛,C语言提高,算法准备,定位大厂刷题,所以每天一练,不是很适合新手,适合长期规划有一定基础的同学跟上,每日文档由三部分组成,基础题(适合备赛国二),趣味题(适合有兴趣的同学),经典算法题(适合更高要求)组成。当然本意是记录自己训练的过程,基础题基本能做出来,能给自己
一个
正面回馈,趣味题可以培养兴趣,经典算法题用于真正来训练自己,开眼见长见识,在遇到困难的问题有更好的解决办法,最关键是每天三个题充分利用了零碎时间,细水才能长流,共勉坚持!!!!
SQL注释不是装饰:数据工程师的元信息基础设施
SQL注释是声明式语言中承载业务语义、技术决策与治理要求的关键元信息机制。其本质远超代码说明,而是解决SQL固有缺陷——无法自表达计算口径、环境依赖与合规依据——的核心工程实践。通过单行(--)与多行(/* */)注释的语法级差异,可构建覆盖执行计划优化、业务规则固化、审计证据留存的三层结构。在金融、医疗等强监管场景及跨库ETL流程中,规范化注释直接决定故障定位效率、交接成本与合规通过率。本文聚焦SQL注释的设计原理、方言适配与自动化落地,提供可即用的企业级注释工作流。
《算法竞赛·快冲300题》每日一题:“英文数字计数”
模拟
微软1000亿美元重构科学发现:AI驱动的科研操作系统
科学计算正从分散工具链迈向统一操作系统级范式。随着AI for Science技术成熟,算力瓶颈、数据孤岛与工作流断裂成为制约科研效率的核心障碍;光子计算、联邦学习与协议即代码(PaC)等工程化方案正系统性破除这三重壁垒。其技术价值不仅在于加速蛋白质折叠或材料模拟,更在于将科学家的隐性直觉转化为可执行、可验证、可复用的计算指令——
如用
自然语言驱动原子级分子动力学,或以Git方式管理湿实验流程。该范式已深度落地生物医药、气候建模与半导体材料等领域,标志着科研基础设施进入‘确定性可编程’新阶段。
混元3.0编程能力解析:SWE-bench 74.4%背后的工程化AI范式
编程大模型正从通用语言理解迈向专业软件工程能力,其核心在于对代码语义、AST结构与测试反馈的深度建模。SWE-bench作为真实开源Bug修复基准,已成为衡量模型工程可信度的关键标尺——它不考语法生成,而验问题定位、上下文感知与最小化补丁能力。混元3.0实现74.4%高分,关键在于引入符号执行感知、AST驱动合成与多粒度测试闭环等编程认知引擎,显著提升代码一次通过率与架构兼容性。该能力已支撑一线工程师高效完成跨栈调试、PR自动修复与CI/CD嵌入等典型场景,标志着AI辅助开发正式进入‘可落地、可审查、可集成
多媒体/流媒体开发
2,554
社区成员
20,277
社区内容
发帖
与我相关
我的任务
多媒体/流媒体开发
专题开发/技术/项目 多媒体/流媒体开发
复制链接
扫一扫
分享
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章