diff --git a/src/media/audio/pulseaudio/pulselayer.cpp b/src/media/audio/pulseaudio/pulselayer.cpp
index 57561c267c1f210e62066c7258c09666b180ca0e..be8f0b5d3016c30984ff58121b0e5895becb91ee 100644
--- a/src/media/audio/pulseaudio/pulselayer.cpp
+++ b/src/media/audio/pulseaudio/pulselayer.cpp
@@ -468,7 +468,7 @@ void PulseLayer::writeToSpeaker()
     pa_stream *s = playback_->pulseStream();
     const pa_sample_spec* sample_spec = pa_stream_get_sample_spec(s);
     size_t sample_size = pa_frame_size(sample_spec);
-    const AudioFormat format(playback_->getFormat());
+    const AudioFormat format(sample_spec->rate, sample_spec->channels);
 
     // available bytes to be written in pulseaudio internal buffer
     int ret = pa_stream_writable_size(s);
@@ -554,9 +554,10 @@ void PulseLayer::writeToSpeaker()
 
     pa_stream_begin_write(s, (void**)&data, &resampledBytes);
 
-    playbackBuffer_.setFormat(format);
+    playbackBuffer_.setFormat(mainBufferAudioFormat);
     playbackBuffer_.resize(readableSamples);
     Manager::instance().getRingBufferPool().getData(playbackBuffer_, RingBufferPool::DEFAULT_ID);
+    playbackBuffer_.setChannelNum(format.nb_channels, true);
 
     if (resample) {
         AudioBuffer rsmpl_out(nResampled, format);