Index: uspace/lib/pcm/include/pcm/format.h
===================================================================
--- uspace/lib/pcm/include/pcm/format.h	(revision e98a8c4499e4a38be8694807821199697b291e05)
+++ uspace/lib/pcm/include/pcm/format.h	(revision f3fb83a6c71b3d6adb5e181dd5b7807c2ca5d6a9)
@@ -61,5 +61,12 @@
 static inline size_t pcm_format_frame_size(const pcm_format_t *a)
 {
-	return a->channels * pcm_sample_format_size(a->sample_format);
+	return pcm_sample_format_frame_size(a->channels, a->sample_format);
+}
+
+static inline suseconds_t pcm_format_size_to_usec(size_t size,
+    const pcm_format_t *a)
+{
+	return pcm_sample_format_size_to_usec(size, a->sampling_rate,
+	    a->channels, a->sample_format);
 }
 
Index: uspace/lib/pcm/include/pcm/sample_format.h
===================================================================
--- uspace/lib/pcm/include/pcm/sample_format.h	(revision e98a8c4499e4a38be8694807821199697b291e05)
+++ uspace/lib/pcm/include/pcm/sample_format.h	(revision f3fb83a6c71b3d6adb5e181dd5b7807c2ca5d6a9)
@@ -38,4 +38,5 @@
 
 #include <bool.h>
+#include <time.h>
 
 typedef enum {
@@ -121,4 +122,25 @@
 }
 
+static inline size_t pcm_sample_format_frame_size(unsigned channels,
+    pcm_sample_format_t format)
+{
+	return pcm_sample_format_size(format) * channels;
+}
+
+static inline size_t pcm_sample_format_size_to_frames(size_t size,
+    unsigned channels, pcm_sample_format_t format)
+{
+	const size_t frame_size = pcm_sample_format_frame_size(channels, format);
+	return (size + frame_size - 1) / frame_size;
+}
+
+static inline useconds_t pcm_sample_format_size_to_usec(size_t size,
+    unsigned sample_rate, unsigned channels, pcm_sample_format_t format)
+{
+	const long long frames =
+	    pcm_sample_format_size_to_frames(size, channels, format);
+	return (frames * 1000000ULL) / sample_rate;
+}
+
 static inline const char * pcm_sample_format_str(pcm_sample_format_t format)
 {
