Index: uspace/srv/audio/hound/audio_device.c
===================================================================
--- uspace/srv/audio/hound/audio_device.c	(revision 2cc5c8357bcdbc4c5d0ca79839a7c7e2aadfde62)
+++ uspace/srv/audio/hound/audio_device.c	(revision b7c080c8803c39694881ec080de9c9bc2a65dc21)
@@ -46,5 +46,5 @@
 #include "log.h"
 
-#define BUFFER_BLOCKS 2
+#define BUFFER_PARTS 2
 
 static int device_sink_connection_callback(audio_sink_t *sink, bool new);
@@ -107,5 +107,7 @@
 		    dev->buffer.base, dev->buffer.size);
 
-		ret = audio_pcm_start_playback(dev->sess, BUFFER_BLOCKS,
+		const unsigned frames = dev->buffer.size /
+		    (BUFFER_PARTS * audio_format_frame_size(&dev->sink.format));
+		ret = audio_pcm_start_playback(dev->sess, frames,
 		    dev->sink.format.channels, dev->sink.format.sampling_rate,
 		    dev->sink.format.sample_format);
@@ -148,5 +150,7 @@
 			return ret;
 		}
-		ret = audio_pcm_start_record(dev->sess, BUFFER_BLOCKS,
+		const unsigned frames = dev->buffer.size /
+		    (BUFFER_PARTS * audio_format_frame_size(&dev->sink.format));
+		ret = audio_pcm_start_record(dev->sess, frames,
 		    dev->sink.format.channels, dev->sink.format.sampling_rate,
 		    dev->sink.format.sample_format);
@@ -187,8 +191,9 @@
 		async_answer_0(callid, EOK);
 		switch(IPC_GET_IMETHOD(call)) {
-		case PCM_EVENT_PLAYBACK_DONE: {
+		case PCM_EVENT_FRAMES_PLAYED: {
+			//TODO add underrun protection.
 			if (dev->buffer.position) {
 				dev->buffer.position +=
-				    (dev->buffer.size / BUFFER_BLOCKS);
+				    (dev->buffer.size / BUFFER_PARTS);
 			}
 			if ((!dev->buffer.position) ||
@@ -199,5 +204,5 @@
 			}
 			audio_sink_mix_inputs(&dev->sink, dev->buffer.position,
-			    dev->buffer.size / BUFFER_BLOCKS);
+			    dev->buffer.size / BUFFER_PARTS);
 			break;
 		}
@@ -206,5 +211,5 @@
 			return;
 		}
-		case PCM_EVENT_RECORDING_DONE: {
+		case PCM_EVENT_FRAMES_RECORDED: {
 			//TODO implement
 			break;
Index: uspace/srv/audio/hound/audio_format.h
===================================================================
--- uspace/srv/audio/hound/audio_format.h	(revision 2cc5c8357bcdbc4c5d0ca79839a7c7e2aadfde62)
+++ uspace/srv/audio/hound/audio_format.h	(revision b7c080c8803c39694881ec080de9c9bc2a65dc21)
@@ -61,5 +61,8 @@
 
 
-
+static inline size_t audio_format_frame_size(const audio_format_t *a)
+{
+	return a->channels * pcm_sample_format_size(a->sample_format);
+}
 
 bool audio_format_same(const audio_format_t *a, const audio_format_t* b);
