首页 > 解决方案 > 流式传输到多个输出设备

问题描述

我目前正在尝试使用 Windows 用 c++ 开发一个音板项目。我搜索音频库并找到 portaudio。

我想知道是否可以在两个不同的音频输出上播放流?与portaudio?或另一个库?

非常感谢您提前提供的帮助。

标签: c++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;
}

推荐阅读