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?
ldo
March 14, 2025, 8:57pm
2
sezercan:
let audio = fs.readFileSync('test_1.wav');
…
while (audio.length > 0) {
let socketData = audio.subarray(0, 320);
This may be a stupid question (I’m not familiar enough with Node to say), but … where are you decoding the .wav
format?
Thank you for your response. I didn’t decode the .wav file. I’m directly sending the Buffer data to AudioSocket and it works. But, sound is not clear. There is some noice problem. If I need to decode and do somethings on audio, please tell me. I’m not experienced about that process too.
ldo
March 17, 2025, 9:21pm
4
FFmpeg is a good tool to use to convert different audio formats into the form that Asterisk expects. Remember, this has to be 16-bit signed-linear, little-endian, at a sample rate of 8kHz, mono. If you’re converting from a higher-quality audio source, you have to make sure you don’t leave any frequency components above the Nyquist limit, as this will lead to aliasing artifacts.
1 Like
I would hope that any conversion utility would apply an anti-aliasing filter.
ldo
March 17, 2025, 11:34pm
6
If there were one “best” way of doing it, you might have a point.
But FFmpeg does exactly what you tell it to, no more, no less. You want filtering, you get to choose what filtering you want to apply.
I’d normally use sox, which, I believe, does anti-alias, when down sampling.
The footprint of sox is a fraction of ffmpeg:
-pbx11::sedwards:~$ ls -l /usr/bin//sox /usr/bin//ffmpeg
-rwxr-xr-x 1 root root 76072 Mar 16 2023 /usr/bin//sox
-rwxr-xr-x 1 root root 293160 Feb 28 09:03 /usr/bin//ffmpeg
-pbx11::sedwards:~$ ldd /usr/bin//sox /usr/bin//ffmpeg
/usr/bin//sox:
linux-vdso.so.1 (0x00007fff5bcde000)
libsox.so.3 => /lib/x86_64-linux-gnu/libsox.so.3 (0x00007ffa3c709000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ffa3c5c5000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ffa3c5a3000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffa3c3cf000)
libltdl.so.7 => /lib/x86_64-linux-gnu/libltdl.so.7 (0x00007ffa3c3c4000)
libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007ffa3c38a000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ffa3c36b000)
libmagic.so.1 => /lib/x86_64-linux-gnu/libmagic.so.1 (0x00007ffa3c33d000)
libgsm.so.1 => /lib/x86_64-linux-gnu/libgsm.so.1 (0x00007ffa3c32d000)
libgomp.so.1 => /lib/x86_64-linux-gnu/libgomp.so.1 (0x00007ffa3c2ed000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffa3c7b5000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ffa3c2e7000)
libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007ffa3c2d2000)
/usr/bin//ffmpeg:
linux-vdso.so.1 (0x00007ffcb69fd000)
libavdevice.so.58 => /lib/x86_64-linux-gnu/libavdevice.so.58 (0x00007ff85d626000)
libavfilter.so.7 => /lib/x86_64-linux-gnu/libavfilter.so.7 (0x00007ff85d21a000)
libavformat.so.58 => /lib/x86_64-linux-gnu/libavformat.so.58 (0x00007ff85cf95000)
libavcodec.so.58 => /lib/x86_64-linux-gnu/libavcodec.so.58 (0x00007ff85b9dc000)
libavresample.so.4 => /lib/x86_64-linux-gnu/libavresample.so.4 (0x00007ff85b9b8000)
libpostproc.so.55 => /lib/x86_64-linux-gnu/libpostproc.so.55 (0x00007ff85b995000)
libswresample.so.3 => /lib/x86_64-linux-gnu/libswresample.so.3 (0x00007ff85b971000)
libswscale.so.5 => /lib/x86_64-linux-gnu/libswscale.so.5 (0x00007ff85b8d8000)
libavutil.so.56 => /lib/x86_64-linux-gnu/libavutil.so.56 (0x00007ff85b617000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff85b4d3000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff85b4b1000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff85b2dd000)
libraw1394.so.11 => /lib/x86_64-linux-gnu/libraw1394.so.11 (0x00007ff85b2ca000)
libavc1394.so.0 => /lib/x86_64-linux-gnu/libavc1394.so.0 (0x00007ff85b0c5000)
librom1394.so.0 => /lib/x86_64-linux-gnu/librom1394.so.0 (0x00007ff85aec0000)
libiec61883.so.0 => /lib/x86_64-linux-gnu/libiec61883.so.0 (0x00007ff85aeb2000)
libjack.so.0 => /lib/x86_64-linux-gnu/libjack.so.0 (0x00007ff85ae61000)
libdrm.so.2 => /lib/x86_64-linux-gnu/libdrm.so.2 (0x00007ff85ae4d000)
libopenal.so.1 => /lib/x86_64-linux-gnu/libopenal.so.1 (0x00007ff85ad62000)
libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007ff85ad37000)
libxcb-shm.so.0 => /lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007ff85ad32000)
libxcb-shape.so.0 => /lib/x86_64-linux-gnu/libxcb-shape.so.0 (0x00007ff85ad2d000)
libxcb-xfixes.so.0 => /lib/x86_64-linux-gnu/libxcb-xfixes.so.0 (0x00007ff85ad23000)
libcdio_paranoia.so.2 => /lib/x86_64-linux-gnu/libcdio_paranoia.so.2 (0x00007ff85ad19000)
libcdio_cdda.so.2 => /lib/x86_64-linux-gnu/libcdio_cdda.so.2 (0x00007ff85ad0d000)
libdc1394.so.25 => /lib/x86_64-linux-gnu/libdc1394.so.25 (0x00007ff85ac94000)
libasound.so.2 => /lib/x86_64-linux-gnu/libasound.so.2 (0x00007ff85ab97000)
libcaca.so.0 => /lib/x86_64-linux-gnu/libcaca.so.0 (0x00007ff85aacc000)
libGL.so.1 => /lib/x86_64-linux-gnu/libGL.so.1 (0x00007ff85aa45000)
libpulse.so.0 => /lib/x86_64-linux-gnu/libpulse.so.0 (0x00007ff85a9f1000)
libSDL2-2.0.so.0 => /lib/x86_64-linux-gnu/libSDL2-2.0.so.0 (0x00007ff85a863000)
libsndio.so.7.0 => /lib/x86_64-linux-gnu/libsndio.so.7.0 (0x00007ff85a851000)
libXv.so.1 => /lib/x86_64-linux-gnu/libXv.so.1 (0x00007ff85a64c000)
libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007ff85a509000)
libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007ff85a4f4000)
libpocketsphinx.so.3 => /lib/x86_64-linux-gnu/libpocketsphinx.so.3 (0x00007ff85a4a7000)
libsphinxbase.so.3 => /lib/x86_64-linux-gnu/libsphinxbase.so.3 (0x00007ff85a461000)
libbs2b.so.0 => /lib/x86_64-linux-gnu/libbs2b.so.0 (0x00007ff85a459000)
liblilv-0.so.0 => /lib/x86_64-linux-gnu/liblilv-0.so.0 (0x00007ff85a43d000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff85a437000)
librubberband.so.2 => /lib/x86_64-linux-gnu/librubberband.so.2 (0x00007ff85a3fc000)
libmysofa.so.1 => /lib/x86_64-linux-gnu/libmysofa.so.1 (0x00007ff85a3e9000)
libflite_cmu_us_awb.so.1 => /lib/x86_64-linux-gnu/libflite_cmu_us_awb.so.1 (0x00007ff859ff2000)
libflite_cmu_us_kal.so.1 => /lib/x86_64-linux-gnu/libflite_cmu_us_kal.so.1 (0x00007ff859e8c000)
libflite_cmu_us_kal16.so.1 => /lib/x86_64-linux-gnu/libflite_cmu_us_kal16.so.1 (0x00007ff859ab2000)
libflite_cmu_us_rms.so.1 => /lib/x86_64-linux-gnu/libflite_cmu_us_rms.so.1 (0x00007ff859617000)
libflite_cmu_us_slt.so.1 => /lib/x86_64-linux-gnu/libflite_cmu_us_slt.so.1 (0x00007ff85921e000)
libflite.so.1 => /lib/x86_64-linux-gnu/libflite.so.1 (0x00007ff8591de000)
libfribidi.so.0 => /lib/x86_64-linux-gnu/libfribidi.so.0 (0x00007ff8591c2000)
libass.so.9 => /lib/x86_64-linux-gnu/libass.so.9 (0x00007ff85918d000)
libva.so.2 => /lib/x86_64-linux-gnu/libva.so.2 (0x00007ff859160000)
libvidstab.so.1.1 => /lib/x86_64-linux-gnu/libvidstab.so.1.1 (0x00007ff85914a000)
libzmq.so.5 => /lib/x86_64-linux-gnu/libzmq.so.5 (0x00007ff85908d000)
libOpenCL.so.1 => /lib/x86_64-linux-gnu/libOpenCL.so.1 (0x00007ff859079000)
libfontconfig.so.1 => /lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007ff859033000)
libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007ff858f70000)
libmfx.so.1 => /lib/x86_64-linux-gnu/libmfx.so.1 (0x00007ff858f62000)
libxml2.so.2 => /lib/x86_64-linux-gnu/libxml2.so.2 (0x00007ff858db4000)
libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007ff858d9f000)
libgme.so.0 => /lib/x86_64-linux-gnu/libgme.so.0 (0x00007ff858d50000)
libopenmpt.so.0 => /lib/x86_64-linux-gnu/libopenmpt.so.0 (0x00007ff858b66000)
libchromaprint.so.1 => /lib/x86_64-linux-gnu/libchromaprint.so.1 (0x00007ff858b50000)
libbluray.so.2 => /lib/x86_64-linux-gnu/libbluray.so.2 (0x00007ff858b05000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ff858ae8000)
libgnutls.so.30 => /lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007ff8588e6000)
librabbitmq.so.4 => /lib/x86_64-linux-gnu/librabbitmq.so.4 (0x00007ff8588ce000)
libsrt-gnutls.so.1.4 => /lib/x86_64-linux-gnu/libsrt-gnutls.so.1.4 (0x00007ff85880d000)
libssh-gcrypt.so.4 => /lib/x86_64-linux-gnu/libssh-gcrypt.so.4 (0x00007ff85877d000)
libvpx.so.6 => /lib/x86_64-linux-gnu/libvpx.so.6 (0x00007ff858561000)
libwebpmux.so.3 => /lib/x86_64-linux-gnu/libwebpmux.so.3 (0x00007ff858555000)
libwebp.so.6 => /lib/x86_64-linux-gnu/libwebp.so.6 (0x00007ff8584e9000)
liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007ff8584c1000)
libdav1d.so.4 => /lib/x86_64-linux-gnu/libdav1d.so.4 (0x00007ff85838d000)
librsvg-2.so.2 => /lib/x86_64-linux-gnu/librsvg-2.so.2 (0x00007ff85798e000)
libgobject-2.0.so.0 => /lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007ff857934000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007ff857803000)
libcairo.so.2 => /lib/x86_64-linux-gnu/libcairo.so.2 (0x00007ff8576dc000)
libzvbi.so.0 => /lib/x86_64-linux-gnu/libzvbi.so.0 (0x00007ff85764c000)
libsnappy.so.1 => /lib/x86_64-linux-gnu/libsnappy.so.1 (0x00007ff857641000)
libaom.so.0 => /lib/x86_64-linux-gnu/libaom.so.0 (0x00007ff8571c5000)
libcodec2.so.0.9 => /lib/x86_64-linux-gnu/libcodec2.so.0.9 (0x00007ff8563e0000)
libgsm.so.1 => /lib/x86_64-linux-gnu/libgsm.so.1 (0x00007ff8563d0000)
libmp3lame.so.0 => /lib/x86_64-linux-gnu/libmp3lame.so.0 (0x00007ff856356000)
libopenjp2.so.7 => /lib/x86_64-linux-gnu/libopenjp2.so.7 (0x00007ff8562f9000)
libopus.so.0 => /lib/x86_64-linux-gnu/libopus.so.0 (0x00007ff85629e000)
libshine.so.3 => /lib/x86_64-linux-gnu/libshine.so.3 (0x00007ff856093000)
libspeex.so.1 => /lib/x86_64-linux-gnu/libspeex.so.1 (0x00007ff856078000)
libtheoraenc.so.1 => /lib/x86_64-linux-gnu/libtheoraenc.so.1 (0x00007ff85603b000)
libtheoradec.so.1 => /lib/x86_64-linux-gnu/libtheoradec.so.1 (0x00007ff856019000)
libtwolame.so.0 => /lib/x86_64-linux-gnu/libtwolame.so.0 (0x00007ff855ff4000)
libvorbis.so.0 => /lib/x86_64-linux-gnu/libvorbis.so.0 (0x00007ff855fc7000)
libvorbisenc.so.2 => /lib/x86_64-linux-gnu/libvorbisenc.so.2 (0x00007ff855f1c000)
libwavpack.so.1 => /lib/x86_64-linux-gnu/libwavpack.so.1 (0x00007ff855ef0000)
libx264.so.160 => /lib/x86_64-linux-gnu/libx264.so.160 (0x00007ff855c2e000)
libx265.so.192 => /lib/x86_64-linux-gnu/libx265.so.192 (0x00007ff854caf000)
libxvidcore.so.4 => /lib/x86_64-linux-gnu/libxvidcore.so.4 (0x00007ff854b9c000)
libsoxr.so.0 => /lib/x86_64-linux-gnu/libsoxr.so.0 (0x00007ff854b31000)
libva-drm.so.2 => /lib/x86_64-linux-gnu/libva-drm.so.2 (0x00007ff854b2c000)
libva-x11.so.2 => /lib/x86_64-linux-gnu/libva-x11.so.2 (0x00007ff854b24000)
libvdpau.so.1 => /lib/x86_64-linux-gnu/libvdpau.so.1 (0x00007ff854b1c000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff85d6af000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ff854b12000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ff854945000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff85492b000)
libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007ff854926000)
libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007ff85471e000)
libcdio.so.19 => /lib/x86_64-linux-gnu/libcdio.so.19 (0x00007ff8546f2000)
libusb-1.0.so.0 => /lib/x86_64-linux-gnu/libusb-1.0.so.0 (0x00007ff8546d4000)
libslang.so.2 => /lib/x86_64-linux-gnu/libslang.so.2 (0x00007ff8543dc000)
libncursesw.so.6 => /lib/x86_64-linux-gnu/libncursesw.so.6 (0x00007ff8543a1000)
libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007ff854370000)
libGLdispatch.so.0 => /lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007ff8542b8000)
libGLX.so.0 => /lib/x86_64-linux-gnu/libGLX.so.0 (0x00007ff854284000)
libpulsecommon-14.2.so => /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-14.2.so (0x00007ff854200000)
libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007ff8541ab000)
libXcursor.so.1 => /lib/x86_64-linux-gnu/libXcursor.so.1 (0x00007ff85419c000)
libXinerama.so.1 => /lib/x86_64-linux-gnu/libXinerama.so.1 (0x00007ff854197000)
libXi.so.6 => /lib/x86_64-linux-gnu/libXi.so.6 (0x00007ff854185000)
libXrandr.so.2 => /lib/x86_64-linux-gnu/libXrandr.so.2 (0x00007ff853f7a000)
libXss.so.1 => /lib/x86_64-linux-gnu/libXss.so.1 (0x00007ff853f75000)
libXxf86vm.so.1 => /lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007ff853d6f000)
libgbm.so.1 => /lib/x86_64-linux-gnu/libgbm.so.1 (0x00007ff853d5d000)
libwayland-egl.so.1 => /lib/x86_64-linux-gnu/libwayland-egl.so.1 (0x00007ff853d58000)
libwayland-client.so.0 => /lib/x86_64-linux-gnu/libwayland-client.so.0 (0x00007ff853d47000)
libwayland-cursor.so.0 => /lib/x86_64-linux-gnu/libwayland-cursor.so.0 (0x00007ff853d3e000)
libxkbcommon.so.0 => /lib/x86_64-linux-gnu/libxkbcommon.so.0 (0x00007ff853cfb000)
libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007ff853ce4000)
libblas.so.3 => /lib/x86_64-linux-gnu/libblas.so.3 (0x00007ff853c75000)
liblapack.so.3 => /lib/x86_64-linux-gnu/liblapack.so.3 (0x00007ff8535d2000)
libserd-0.so.0 => /lib/x86_64-linux-gnu/libserd-0.so.0 (0x00007ff8535b9000)
libsord-0.so.0 => /lib/x86_64-linux-gnu/libsord-0.so.0 (0x00007ff8535ad000)
libsratom-0.so.0 => /lib/x86_64-linux-gnu/libsratom-0.so.0 (0x00007ff8535a1000)
libsamplerate.so.0 => /lib/x86_64-linux-gnu/libsamplerate.so.0 (0x00007ff853430000)
libfftw3.so.3 => /lib/x86_64-linux-gnu/libfftw3.so.3 (0x00007ff853229000)
libflite_usenglish.so.1 => /lib/x86_64-linux-gnu/libflite_usenglish.so.1 (0x00007ff8531fd000)
libflite_cmulex.so.1 => /lib/x86_64-linux-gnu/libflite_cmulex.so.1 (0x00007ff853166000)
libharfbuzz.so.0 => /lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007ff85307e000)
libgomp.so.1 => /lib/x86_64-linux-gnu/libgomp.so.1 (0x00007ff85303c000)
libsodium.so.23 => /lib/x86_64-linux-gnu/libsodium.so.23 (0x00007ff852fe2000)
libpgm-5.3.so.0 => /lib/x86_64-linux-gnu/libpgm-5.3.so.0 (0x00007ff852f92000)
libnorm.so.1 => /lib/x86_64-linux-gnu/libnorm.so.1 (0x00007ff852e69000)
libgssapi_krb5.so.2 => /lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007ff852e16000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007ff852de7000)
libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007ff852ddc000)
libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007ff852da2000)
libbrotlidec.so.1 => /lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007ff852d94000)
libicuuc.so.67 => /lib/x86_64-linux-gnu/libicuuc.so.67 (0x00007ff852bab000)
libmpg123.so.0 => /lib/x86_64-linux-gnu/libmpg123.so.0 (0x00007ff852b4a000)
libvorbisfile.so.3 => /lib/x86_64-linux-gnu/libvorbisfile.so.3 (0x00007ff852b3d000)
libudfread.so.0 => /lib/x86_64-linux-gnu/libudfread.so.0 (0x00007ff852b32000)
libp11-kit.so.0 => /lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007ff8529fe000)
libidn2.so.0 => /lib/x86_64-linux-gnu/libidn2.so.0 (0x00007ff8529dd000)
libunistring.so.2 => /lib/x86_64-linux-gnu/libunistring.so.2 (0x00007ff85285b000)
libtasn1.so.6 => /lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007ff852843000)
libnettle.so.8 => /lib/x86_64-linux-gnu/libnettle.so.8 (0x00007ff8527fb000)
libhogweed.so.6 => /lib/x86_64-linux-gnu/libhogweed.so.6 (0x00007ff8527b2000)
libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007ff852731000)
libssl.so.1.1 => /lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007ff85269e000)
libcrypto.so.1.1 => /lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007ff8523aa000)
libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007ff852288000)
libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007ff852262000)
libcairo-gobject.so.2 => /lib/x86_64-linux-gnu/libcairo-gobject.so.2 (0x00007ff852256000)
libgdk_pixbuf-2.0.so.0 => /lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0 (0x00007ff852230000)
libgio-2.0.so.0 => /lib/x86_64-linux-gnu/libgio-2.0.so.0 (0x00007ff852050000)
libpangocairo-1.0.so.0 => /lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 (0x00007ff85203d000)
libpango-1.0.so.0 => /lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007ff851feb000)
libffi.so.7 => /lib/x86_64-linux-gnu/libffi.so.7 (0x00007ff851fdf000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007ff851f6c000)
libpixman-1.so.0 => /lib/x86_64-linux-gnu/libpixman-1.so.0 (0x00007ff851ec1000)
libxcb-render.so.0 => /lib/x86_64-linux-gnu/libxcb-render.so.0 (0x00007ff851eb0000)
libXrender.so.1 => /lib/x86_64-linux-gnu/libXrender.so.1 (0x00007ff851ca6000)
libogg.so.0 => /lib/x86_64-linux-gnu/libogg.so.0 (0x00007ff851c99000)
libnuma.so.1 => /lib/x86_64-linux-gnu/libnuma.so.1 (0x00007ff851c8b000)
libXfixes.so.3 => /lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007ff851c83000)
libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007ff851c59000)
libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007ff851ba4000)
libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x00007ff851b98000)
libsndfile.so.1 => /lib/x86_64-linux-gnu/libsndfile.so.1 (0x00007ff851b15000)
libasyncns.so.0 => /lib/x86_64-linux-gnu/libasyncns.so.0 (0x00007ff851b0d000)
libwayland-server.so.0 => /lib/x86_64-linux-gnu/libwayland-server.so.0 (0x00007ff851af4000)
libmd.so.0 => /lib/x86_64-linux-gnu/libmd.so.0 (0x00007ff851ae7000)
libgfortran.so.5 => /lib/x86_64-linux-gnu/libgfortran.so.5 (0x00007ff851831000)
libgraphite2.so.3 => /lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007ff851805000)
libkrb5.so.3 => /lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007ff85172b000)
libk5crypto.so.3 => /lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007ff8516f9000)
libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007ff8516f3000)
libkrb5support.so.0 => /lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007ff8516e4000)
libbrotlicommon.so.1 => /lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007ff8516c1000)
libicudata.so.67 => /lib/x86_64-linux-gnu/libicudata.so.67 (0x00007ff84fba8000)
libgmodule-2.0.so.0 => /lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007ff84fba0000)
libmount.so.1 => /lib/x86_64-linux-gnu/libmount.so.1 (0x00007ff84fb43000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007ff84fb17000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007ff84fafd000)
libpangoft2-1.0.so.0 => /lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 (0x00007ff84fae4000)
libthai.so.0 => /lib/x86_64-linux-gnu/libthai.so.0 (0x00007ff84fad7000)
libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007ff84f9fc000)
liblz4.so.1 => /lib/x86_64-linux-gnu/liblz4.so.1 (0x00007ff84f9d9000)
libnsl.so.2 => /lib/x86_64-linux-gnu/libnsl.so.2 (0x00007ff84f9be000)
libFLAC.so.8 => /lib/x86_64-linux-gnu/libFLAC.so.8 (0x00007ff84f97f000)
libquadmath.so.0 => /lib/x86_64-linux-gnu/libquadmath.so.0 (0x00007ff84f936000)
libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007ff84f92d000)
libblkid.so.1 => /lib/x86_64-linux-gnu/libblkid.so.1 (0x00007ff84f8dc000)
libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcr
e2-8.so.0 (0x00007ff84f844000)
libdatrie.so.1 => /lib/x86_64-linux-gnu/libdatrie.so.1 (0x00007ff84f83a000)
libtirpc.so.3 => /lib/x86_64-linux-gnu/libtirpc.so.3 (0x00007ff84f80a000)
Unless there is a qualitative difference, I’ll keep sox in my toolbox.
ldo
March 18, 2025, 1:15am
9
Just to add some perspective:
root@theon:~ # ls -l /usr/sbin/asterisk
-rwxr-xr-x 1 root root 3549992 Feb 12 08:53 /usr/sbin/asterisk
(That’s Asterisk 22 on Debian Unstable.) Admittedly, its dependencies seem a bit fewer:
root@theon:~ # ls -l /usr/sbin/asterisk
-rwxr-xr-x 1 root root 3549992 Feb 12 08:53 /usr/sbin/asterisk
root@theon:~ # ldd /usr/sbin/asterisk | wc -l
27
root@theon:~ # ldd /usr/local/bin/ffmpeg | wc -l
293
(That’s my custom FFmpeg build, of course.)
But remember what you get functionality-wise: FFmpeg is not limited to audio-only formats, it can also extract audio from video files, or insert audio into video files. And it can directly read from and write to real-time audio/video streams.
And then there’s the whole “filtergraph” architecture …
Hi everyone. Thank you all for your responses. It really helped me to understant the audio formats and translations. But, I’ve noticed the problem is not about audio. It’s about the nodejs code. Asterisk AudioSocket expects 323 byte (3 byte header, 320 byte audio data) per 20 ms. But, in my nodejs script, I’m sending the echo audio and trying to send another audio from file. So, it causes the sound error because, Asterisk receive more than 323 byte per 20 ms. When I turned off the echo, sound became clear.
16 bit, 8000 hz, mono wav file is fine to use with audiosocket. You don’t need to use any translations or decoding action.
Thanks for your help.
ldo
March 19, 2025, 10:32pm
11
Just a note that a .wav
file is not raw audio. It has chunk headers, metadata and stuff that you don’t want to simply send as audio.
Here’s the kind of command I’ve used to launch FFmpeg to convert audio (in the file named by the variable audio_file
), with some suitable filtering, to the format Asterisk expects:
child = subprocess.Popen \
(
args =
(
"ffmpeg", "-i", audio_file,
"-f", "s16le", "-acodec", "pcm_s16le", "-ar", "8000",
"-ac", "1", "-af", ",".join(["lowpass=f=3000"] * 16),
"-y", "/dev/stdout",
),
stdin = subprocess.DEVNULL,
stdout = subprocess.PIPE,
)
Now you can just read the raw audio sample stream from child.stdout
.
That’s Python code, but it should be easy enough to translate to some other suitable language.
Thanks for the information. I’ve realized that I forgot the tell you that I’ve removed the first 44 byte from wav file before sending audio to AudioSocket. After that, I didn’t faced with any other problems. But, If you faced with any sound issue, you can use ffmpeg to translate wav file to raw audio as you told.
system
Closed
April 19, 2025, 5:51am
13
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.