Hi everyone, I’m using AudioSocket with Asterisk 20. I’ve created a TCP socket with Nodejs and I can make echo with AudioSocket. But, I can’t send another audio source to AudioSocket clearly. I’ve a 8000 hz, 16 bit, Mono wav file. I’m trying to send the audio to AudioSocket. Audio is sending to AudioSocket but sound is not clear. Here is the code that I wrote in Nodejs
import net from 'net';
import fs from 'fs';
const getHeader = () => {
return Buffer.from([0x10, 0x01, 0x40]);
}
const completeAudio = (data) => {
while (data.length < 320) {
data = Buffer.concat([data, createSilinceBuffer()]);
}
return data;
}
const createSilinceBuffer = () => {
return Buffer.from([0x00]);
}
const delay = (ms) => { return new Promise(resolve => setTimeout(resolve, ms)); }
const sendAudio = async (audio, audioSocket) => {
while (audio.length > 0) {
let socketData = audio.subarray(0, 320);
if (socketData.length < 320) {
socketData = completeAudio(socketData);
}
audioSocket.write(Buffer.concat([getHeader(), socketData]));
audio = audio.slice(320);
await delay(20);
}
}
const tcpServer = net.createServer(async (audioSocket) => {
console.log(new Date().toLocaleString() + ": ", 'New TCP Connection:', audioSocket.remoteAddress);
audioSocket.on('data', (data) => {
console.log("INCOMING DATA", data.length, data);
do {
let header = data.slice(0, 1);
if (header.equals(Buffer.from([0x10]))) {
let audioData = data.subarray(0, 323);
let payload = audioData.slice(3);
data = data.slice(323);
console.log("PAYLOAD", payload.length, payload);
audioSocket.write(audioData);
}
} while (data.length >= 323)
});
audioSocket.on('error', (err) => {
console.error('TCP Error:', err);
});
audioSocket.on('close', () => {
console.log(new Date().toLocaleString() + ": ", 'TCP connection closed: ', audioSocket.remoteAddress);
});
let audio = fs.readFileSync('test_1.wav');
sendAudio(audio, audioSocket);
});
tcpServer.listen(8181, '0.0.0.0', () => {
console.log(new Date().toLocaleString() + ": ", 'TCP Server listening on port 8181');
});
What should I do to fix noice problem. Should I use a codec translation or something?