diff --git a/src/g_game.c b/src/g_game.c
index f891b010591cccd4d5b23188d32902a84751956e..84db90132b0b1dafebaf77b8f48411eaec2b0534 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -5579,7 +5579,7 @@ boolean G_CheckDemoStatus(void)
 		WRITEUINT8(demo_p, DEMOMARKER); // add the demo end marker
 		md5_buffer((char *)p+16, demo_p - (p+16), p); // make a checksum of everything after the checksum in the file.
 #endif
-		saved = FIL_WriteFile(demoname, demobuffer, demo_p - demobuffer); // finally output the file.
+		saved = FIL_WriteFile(va(pandf, srb2home, demoname), demobuffer, demo_p - demobuffer); // finally output the file.
 		free(demobuffer);
 		demorecording = false;
 
diff --git a/src/sdl/mixer_sound.c b/src/sdl/mixer_sound.c
index 4a46813c111ce0e69023e08372958d6d127e7b3d..88bbadd20ad91ecd1aa7a41230700539bd7b7fca 100644
--- a/src/sdl/mixer_sound.c
+++ b/src/sdl/mixer_sound.c
@@ -220,7 +220,7 @@ static Mix_Chunk *ds2chunk(void *stream)
 		break;
 	default: // convert arbitrary hz to 44100.
 		step = 0;
-		frac = ((UINT32)freq << FRACBITS) / 44100;
+		frac = ((UINT32)freq << FRACBITS) / 44100 + 1; //Add 1 to counter truncation.
 		while (i < samples)
 		{
 			o = (INT16)(*s+0x80)<<8; // changed signedness and shift up to 16 bits