diff --git a/src/xpdev/xpbeep.c b/src/xpdev/xpbeep.c
index f80f8a6f36d45edf56363cddc80f17213948851d..f1c56f31dfeabd82a53976a032b8c7e51d2a21eb 100644
--- a/src/xpdev/xpbeep.c
+++ b/src/xpdev/xpbeep.c
@@ -634,7 +634,7 @@ void xp_play_sample_thread(void *data)
 			int written=0;
 
 			while(written < sample_size) {
-				ret=alsa_api->snd_pcm_writei(playback_handle, sample_buffer, sample_size);
+				ret=alsa_api->snd_pcm_writei(playback_handle, sample_buffer+written, sample_size-written);
 				if(ret < 0) {
 					if(written==0) {
 						/* Go back and try OSS */
@@ -782,7 +782,7 @@ BOOL DLLCALL xp_play_sample(const unsigned char *sample, size_t sample_size, BOO
 		int written=0;
 
 		while(written < sample_size) {
-			ret=alsa_api->snd_pcm_writei(playback_handle, sample, sample_size);
+			ret=alsa_api->snd_pcm_writei(playback_handle, sample_written, sample_size-written);
 			if(ret < 0) {
 				if(written==0) {
 					/* Go back and try OSS */