DEV Community

Tim Dang
Tim Dang

Posted on

How to play Streaming Audio?

I have a live call system, and backend receives data from Twilio, with payload is base64 string, sequence of payload and send to me via webSocket. The sound could be played but the quality is not good.
I'm not sure about the reason for it, Internet Connection or my code. I want the quality of sound better. How can i do? Thank!

subject.subscribe(async (msg: any) => {
      if (msg.event === 'media') {
        if ( !this.audioBuffers[msg.streamSid]) {
            this.audioBuffers[msg.streamSid] = {
            timestamp: '',
            phone: '',
            buffer: [],
          };

          tempAudio[msg.streamSid] = {
            timestamp: [],
            payload: [],
            phone: '',

          };

        }
          tempAudio[msg.streamSid].payload[msg.sequenceNumber] =
            await this.audio_ctx.decodeAudioData(
              this.base64ToBuffer(msg.media)
            );
          var buffer = tempAudio[msg.streamSid].payload.filter(function (el) {
            return el != null;
          });
          this.audioBuffers[msg.streamSid].buffer = buffer;
            }      
    });
Enter fullscreen mode Exit fullscreen mode
this.audio_ctx.resume()
 const gainNode = this.audio_ctx.createGain();
while (current < this.data.length) {
        const source = this.audio_ctx.createBufferSource();
        source.buffer = this.data[current];
        gainNode.gain.value = this.isMute ? 0 : this.volume;
        gainNode.connect(this.audio_ctx.destination);
        source.connect(gainNode);
        const will_stop = new Promise((res) => (source.onended = res));

        source.start(0);
        await will_stop;
        current++;

      }
Enter fullscreen mode Exit fullscreen mode

Top comments (0)