Я пытаюсь воспроизвести несколько аудиопотоков (друг за другом) на импульсном аудио устройстве.Однако только первый поток фактически делает его доступным для устройства.
Код прослушивает голосовой канал Discord и создает необработанный аудиопоток (PCM) для каждого разговора.Затем он передает поток через транскодер ( sox-stream ) и к аудиоустройству с модулем, называемым speaker :
conn.on('speaking', (user, speaking) => {
if (speaking) {
console.log(`I'm listening to ${user}`);
const audioStream = receiver.createPCMStream(user);
// This works for every time someone speaks.
audioStream.pipe(generateOutputFile()); // generateOutputFile returns a writeStream to a file.
// This only works for the first time someone speaks after the script is initiated.
audioStream.pipe(
sox({ // sox-stream package
global: { G: true , guard: true, 'no-dither': true },
input: {type: 'raw', e:'signed', bits: 32, endian: 'little', rate: 48000, channels: 1},
output: {type: 'raw', bits: 16, endian: 'little', e: 'signed', rate: 44100 , channels:2},
}))
.pipe(speaker); // speaker package with libpulse back-end
}
});
Динамик определяется как:
const speaker = new Speaker({
channels: 2, // 2 channels
bitDepth: 16, // 16-bit samples
sampleRate: 44100, // 44,100 Hz sample rate
device: 'test1'
});
Интересно то, что я добавил audioStream.pipe(generateOutputFile());
для записи необработанного аудио в файл PCM, и это работает для каждого потока.Даже audioStream.pipe(sox(options)).pipe(generateOutputFile())
работает для каждого потока.Это заставляет меня поверить, что проблема в том, что speaker
не обрабатывает несколько потоков так, как мне хотелось бы.
Любые указания относительно того, почему это происходит, были бы очень полезны!