Я создаю бот Discord. js, использующий Node.js, который записывает аудио пользователей в голосовом канале. Он присоединяется к каналу и начинает слушать каждого пользователя отдельно. Он записывает в файл .pcm (т.е. только необработанные данные).
Теперь это работает, но природа аудиопотока Discord вызывает проблемы. Аудиопоток, полученный из API Discord, отправляет данные только тогда, когда говорит пользователь c, а не когда он молчит. Это приводит к тому, что пользователь говорит, что его вставляют друг за другом, без молчания.
Например, я говорю 5 секунд, затем перестаю говорить 5 секунд, затем снова начинаю говорить и т. Д. , Если я сделаю это в течение 1 минуты, я получу файл, который длится всего 30 секунд, так как 5 секунд тишины не записываются в поток.
Код выглядит примерно так (receiver
is то, что Discord API обеспечивает для голосового соединения, поток заканчивается произвольно, когда я даю команду):
const audioStream = receiver.createStream(user, {mode:'pcm', end:'manual'};
const outputStream = fs.createWriteStream('SOME_PATH');
audioStream.pipe(outputStream);
audioStream.on('end', () => {
console.log('Ended stream')
});
Выход audioStream
- это 16-битный поток с прямым порядком байтов 44100 Гц (так, только когда пользователь говорит).
Есть ли способ, которым я могу заполнить пробелы в данных какими-то бесшумными кадрами? Или, может быть, поддерживать поток молчания и вводить данные только тогда, когда они поступают?