c++ - 流式传输到多个输出设备
问题描述
我目前正在尝试使用 Windows 用 c++ 开发一个音板项目。我搜索音频库并找到 portaudio。
我想知道是否可以在两个不同的音频输出上播放流?与portaudio?或另一个库?
非常感谢您提前提供的帮助。
解决方案
我建议查看http://www.un4seen.com/(低音库)。
// initialize the input device
BASS_WASAPI_Init(indevice, 0, 0, BASS_WASAPI_EVENT, 0.5, 0, InWasapiProc, NULL);
// get its sample format
BASS_WASAPI_INFO wi;
BASS_WASAPI_GetInfo(&wi);
// create a push stream with same sample format to receive the input data
instream = BASS_StreamCreate(wi.freq, wi.chans, BASS_STREAM_DECODE|BASS_SAMPLE_FLOAT, STREAMPROC_PUSH, NULL);
for (int n = 0; n < num_outputs; n++) {
// initialize the n'th output device
BASS_WASAPI_Init(outdevice[n], 0, 0, BASS_WASAPI_EVENT, 0.1, 0, OutWasapiProc, (void*)n);
// get its sample format
BASS_WASAPI_INFO wi;
BASS_WASAPI_GetInfo(&wi);
// create a mixer with same format
mixer[n] = BASS_Mixer_StreamCreate(wi.freq, wi.chans, BASS_STREAM_DECODE|BASS_SAMPLE_FLOAT);
// create a splitter on the input push stream and plug it into the mixer
DWORD splitter = BASS_Split_StreamCreate(instream, BASS_STREAM_DECODE, NULL);
BASS_Mixer_StreamAddChannel(mixer[n], splitter, BASS_STREAM_AUTOFREE);
}
// start the input device
BASS_WASAPI_SetDevice(indevice);
BASS_WASAPI_Start();
// start the output devices
for (int n = 0; n < num_outputs; n++) {
BASS_WASAPI_SetDevice(outdevice[n]);
BASS_WASAPI_Start();
}
...
DWORD CALLBACK InWasapiProc(void *buffer, DWORD length, void *user)
{
// pass the data to the push stream
BASS_StreamPutData(instream, buffer, length);
return 1;
}
DWORD CALLBACK OutWasapiProc(void *buffer, DWORD length, void *user)
{
// get data from the output's mixer
int n = (int)user;
int got = BASS_ChannelGetData(mixer[n], buffer, length);
if (got < 0) got = 0;
return got;
}
推荐阅读
- python - 如何使用 or-tools 和 google-distance 矩阵创建车辆路线优化问题,同时仅取消结束位置?
- r - coord_polar 中间的孔未显示
- unix - 为什么 ZSH 在字符串中使用`:r` 执行字符串编辑
- sql - T SQL 错误 3706 试图将值拉到最远的“-”
- julia - 来自DifferentialEquations.jl 的Heston 模型示例给出桥接分布错误
- c++ - C++ 中的 M_PI 给了我不正确的值
- java - 是否可以设置多个连接到一张表的多对一关系
- firebase - Firebase multi-tenancy 有这个错误 没有与提供的标识符对应的用户记录
- html - Handlebars - 如何在通过 {{#each something2}} 渲染另一个集合时获取另一个集合 {{#each something1}}
- design-patterns - 只为布尔变量分配单一含义的设计原则是什么?