diff --git a/daemon/src/audio/audiobuffer.cpp b/daemon/src/audio/audiobuffer.cpp
index 3a405b5f2b8fdb1c32f299acf6e4fcc61c9e99c8..32b656b591b0cf054f4de328b74d2e390672fdc4 100644
--- a/daemon/src/audio/audiobuffer.cpp
+++ b/daemon/src/audio/audiobuffer.cpp
@@ -48,7 +48,7 @@ AudioBuffer::AudioBuffer(const SFLAudioSample* in, size_t sample_num, unsigned c
 AudioBuffer::AudioBuffer(const AudioBuffer& other, bool copy_content /* = false */)
     :  sampleRate_(other.sampleRate_),
        samples_(copy_content ? other.samples_ :
-                std::vector<std::vector<SFLAudioSample> >(other.samples_.size(), std::vector<SFLAudioSample>(other.samples_[0].size())))
+                std::vector<std::vector<SFLAudioSample> >(other.samples_.size(), std::vector<SFLAudioSample>(other.samples())))
 {}
 
 int AudioBuffer::getSampleRate() const
@@ -68,10 +68,7 @@ void AudioBuffer::setChannelNum(unsigned n, bool copy_content /* = false */)
     if (n == samples_.size())
         return;
 
-    size_t start_size = 0;
-
-    if (not samples_.empty())
-        start_size = samples_[0].size();
+    const size_t start_size = samples();
 
     if (copy_content and not samples_.empty())
         samples_.resize(n, samples_[0]);
@@ -81,7 +78,7 @@ void AudioBuffer::setChannelNum(unsigned n, bool copy_content /* = false */)
 
 void AudioBuffer::resize(size_t sample_num)
 {
-    if (samples_[0].size() == sample_num)
+    if (samples() == sample_num)
         return;
 
     for (unsigned i = 0; i < samples_.size(); i++)
@@ -117,20 +114,20 @@ void AudioBuffer::applyGain(double gain)
 
 size_t AudioBuffer::interleave(SFLAudioSample* out) const
 {
-    for (unsigned i = 0; i < samples_[0].size(); i++)
+    for (unsigned i = 0; i < samples(); i++)
         for (unsigned j = 0; j < samples_.size(); j++)
             *out++ = samples_[j][i];
 
-    return samples_[0].size() * samples_.size();
+    return samples() * samples_.size();
 }
 
 size_t AudioBuffer::interleaveFloat(float* out) const
 {
-    for (unsigned i = 0; i < samples_[0].size(); i++)
+    for (unsigned i = 0; i < samples(); i++)
         for (unsigned j = 0; j < samples_.size(); j++)
             *out++ = (float) samples_[j][i] * .000030517578125f;
 
-    return samples_[0].size() * samples_.size();
+    return samples() * samples_.size();
 }
 
 void AudioBuffer::deinterleave(const SFLAudioSample* in, size_t sample_num, unsigned channel_num)
@@ -142,7 +139,7 @@ void AudioBuffer::deinterleave(const SFLAudioSample* in, size_t sample_num, unsi
     setChannelNum(channel_num);
     resize(sample_num);
 
-    for (unsigned i = 0; i < samples_[0].size(); i++)
+    for (unsigned i = 0; i < samples(); i++)
         for (unsigned j = 0; j < samples_.size(); j++)
             samples_[j][i] = *in++;
 }
@@ -150,7 +147,7 @@ void AudioBuffer::deinterleave(const SFLAudioSample* in, size_t sample_num, unsi
 size_t AudioBuffer::mix(const AudioBuffer& other, bool up /* = true */)
 {
     const bool upmix = up && (other.samples_.size() < samples_.size());
-    const size_t samp_num = std::min(samples_[0].size(), other.samples_[0].size());
+    const size_t samp_num = std::min(samples(), other.samples());
     const unsigned chan_num = upmix ? samples_.size() : std::min(samples_.size(), other.samples_.size());
 
     for (unsigned i = 0; i < chan_num; i++) {
@@ -175,7 +172,7 @@ size_t AudioBuffer::copy(AudioBuffer& in, int sample_num /* = -1 */, size_t pos_
     const bool upmix = up && (in.samples_.size() < samples_.size());
     const size_t chan_num = upmix ? samples_.size() : std::min(in.samples_.size(), samples_.size());
 
-    if ((pos_out + to_copy) > samples_[0].size())
+    if ((pos_out + to_copy) > samples())
         resize(pos_out + to_copy);
 
     sampleRate_ = in.sampleRate_;
@@ -193,7 +190,7 @@ size_t AudioBuffer::copy(SFLAudioSample* in, size_t sample_num, size_t pos_out /
 {
     if (in == NULL) return 0;
 
-    if ((pos_out + sample_num) > samples_[0].size())
+    if ((pos_out + sample_num) > samples())
         resize(pos_out + sample_num);
 
     const size_t chan_num = samples_.size();
@@ -208,7 +205,7 @@ size_t AudioBuffer::copy(SFLAudioSample* in, size_t sample_num, size_t pos_out /
 
 std::ostream& operator<<(std::ostream& os, const AudioBuffer& buf)
 {
-    for (unsigned i = 0; i < buf.samples_[0].size(); i++) {
+    for (unsigned i = 0; i < buf.samples(); i++) {
         for (unsigned j = 0; j < buf.samples_.size(); j++)
             os << buf.samples_[j][i];
     }
diff --git a/daemon/src/audio/audiobuffer.h b/daemon/src/audio/audiobuffer.h
index a3a4ea7dc371327b393216d422f493cdb17e3cc8..878c8f284aa592a3b79edaf3b61457e12e55faa5 100644
--- a/daemon/src/audio/audiobuffer.h
+++ b/daemon/src/audio/audiobuffer.h
@@ -60,9 +60,9 @@ class AudioBuffer {
                 std::fill(i->begin(), i->end(), 0);
         }
 
-		inline size_t size() {
-			return samples_[0].size() * channels() * sizeof(SFLAudioSample);
-		}
+        inline size_t size() {
+            return samples() * channels() * sizeof(SFLAudioSample);
+        }
 
         /**
          * Returns the sample rate (in samples/sec) associated to this buffer.
@@ -94,8 +94,11 @@ class AudioBuffer {
          * Returns the number of (multichannel) samples in this buffer.
          */
         inline size_t samples() const {
-			return samples_[0].size();
-		}
+            if (not samples_.empty())
+                return samples_[0].size();
+            else
+                return 0;
+        }
 
         /**
          * Return the total number of single samples in the buffer (same as samples()*channels()).