首先,我不需要将它们连接在一起。我需要将它们同时写入到同一个文件中。详细信息:我正在尝试录制语音,它可以工作,但当有超过1个人在说话时,输出就会损坏(因为我不知道如何合并opus数据,也不能使用web-audio-api)。
下面是我的代码:
AudioStream类:
const stream = require('stream');
function AudioStream(options) {
stream.Readable.call(this, options);
}
AudioStream.prototype = Object.create(stream.Readable.prototype);
AudioStream.prototype.constructor = stream.Readable;
AudioStream.prototype._read = function() {};
AudioStream.prototype.write = function(chunk) {
this.push(chunk);
};
module.exports = AudioStream;下面是不起作用的代码:
const { opus } = require('prism-media');
//const { pipeline } = require('stream');
const AudioStream = require('./utils/stream/AudioStream');
const receiver = connection.receiver;
const audioStream = new AudioStream();
const oggStream = new opus.OggLogicalBitstream({
opusHead: new opus.OpusHead({
channelCount: 2,
sampleRate: 48000,
}),
pageSizeControl: {
maxPackets: 10,
},
});
audioStream.pipe(oggStream);
oggStream.on('data', (chunk) => {
console.log(chunk)
out.write(chunk);
});
receiver.speaking.on('start', userId => {
if(!users.includes(userId)) {
users.push(userId);
const opusStream = receiver.subscribe(userId, {
end: {
behavior: EndBehaviorType.Manual,
},
});
// oggStream.pipe(audioStream);
opusStream.on('data', (chunk) => {
//console.log(chunk);
audioStream.pushData(chunk)
});
}
});发布于 2021-09-23 14:22:20
它不太实用,但您可以将流写入文件,并将它们与FFmpeg合并
命令:
ffmpeg -i first.wav -i second.wav -filter_complex "[0][1]amerge=inputs=2,pan=stereo|FL<c0+c1|FR<c2+c3[a]" -map "[a]" output.wavnode.js使用率:
import { exec } from 'child_process'; // Or const { exec } = require('child_process'); if you are using javascript
const mergeAudios= (firstAudio: string, secondAudio: string, output: string) => {
return new Promise((resolve, reject) => {
exec(
"ffmpeg -i " + firstAudio + "-i " + secondAudio + ' -filter_complex "[0][1]amerge=inputs=2,pan=stereo|FL<c0+c1|FR<c2+c3[a]" -map "[a]" ' + output,
(error, stdout, stderr) => {
if (error) {
reject(error)
return;
} else {
resolve(null);
}
});
})
}https://stackoverflow.com/questions/69299455
复制相似问题