diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c
index 3749d7b98c522fc3b20cbe8fa3c08039d533a736..46bc4b905d7fbc23cc41520646558f4b8bd4fad1 100644
--- a/res/res_musiconhold.c
+++ b/res/res_musiconhold.c
@@ -477,7 +477,12 @@ static int moh_files_generator(struct ast_channel *chan, void *data, int len, in
 			return -1;
 		}
 
-		state->samples += f->samples;
+		/* Only track our offset within the current file if we are not in the
+		 * the middle of an announcement */
+		if (!state->announcement) {
+			state->samples += f->samples;
+		}
+
 		state->sample_queue -= f->samples;
 		if (ast_format_cmp(f->subclass.format, state->mohwfmt) == AST_FORMAT_CMP_NOT_EQUAL) {
 			ao2_replace(state->mohwfmt, f->subclass.format);