     private func renderVolumes() {
         let sampleCount = UInt32(self.length * UInt64(SampleRate) / 1000)
 
-        self.volumes = Array<Float>()
+        self.volumeBuffer = getBuffer()
 
         let sectionLength = lengthOfSections(sampleCount, sequence: self.volumeSequence.map({ (volume) -> UInt32 in
                 UInt32(1)
             }))
 
+        var counter = 0;
         for (var i = 0; i < sectionLength.count; i++) {
             let length = sectionLength[i]
             let volume = self.volumeSequence[i]
 
             for (var j:UInt32 = 0; j < length; j++) {
-                volumes.append(volume)
+                volumeBuffer?.floatChannelData.memory[counter++] = volume
             }
         }
     }

        }

        for (var i = 0; i < count; i++) {
            self.volumes[start +  i] *= Float(1) - (Float(i) / Float(count))
        }

    }

        else {
            // fallback -> static frequency of 440hz

            if (self.volumeBuffer != nil) {
                for (var i = Int(0); i < sampleCount; i++) {
                    let value = (self.volumeBuffer?.floatChannelData.memory[i])! * sin(Float(i) * 2 * π * 440 / SampleRate)
                    buffer.floatChannelData.memory[i] = value
                    // second channel
                    buffer.floatChannelData.memory[sampleCount + i] = value
