Поскольку ALSA по умолчанию предоставляет микшер (dmix), вы можете просто использовать aplay, например:
aplay song1.wav &
aplay -Dplug:dmix song2.wav
Если ваши аудиофайлы имеют одинаковую скорость и формат, вам не нужно использовать штекер. Это становится :
aplay song1.wav &
aplay -Ddmix song2.wav
Однако, если вы хотите запрограммировать этот метод, есть несколько учебных пособий по программированию аудио на C++ здесь. В этих руководствах показано, как загружать аудиофайлы и работать с различными аудиоподсистемами, такими как jackd и ALSA.
В этом примере демонстрируется воспроизведение одного аудиофайла с использованием ALSA. . Его можно изменить, открыв второй аудиофайл следующим образом:
Sox<short int> sox2;
res=sox2.openRead(argv[2]);
if (res<0 && res!=SOX_READ_MAXSCALE_ERROR)
return SoxDebug().evaluateError(res);
Затем измените цикл while следующим образом:
Eigen::Array<int, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> buffer, buffer2;
size_t totalWritten=0;
while (sox.read(buffer, pSize)>=0 && sox2.read(buffer2, pSize)>=0){
if (buffer.rows()==0 || buffer.rows()==0) // end of the file.
break;
// as the original files were opened as short int, summing will not overload the int buffer.
buffer+=buffer2; // sum the two waveforms together
playBack<<buffer; // play the audio data
totalWritten+=buffer.rows();
}
person
Matt
schedule
03.12.2019