summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--firmware/mpeg.c20
-rw-r--r--firmware/mpeg.h3
2 files changed, 23 insertions, 0 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index 365099129e..ca3ac69692 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -1787,6 +1787,26 @@ void mpeg_sound_channel_config(int configuration)
#endif
}
+#ifdef HAVE_MAS3587F
+/* This function works by telling the decoder that we have another
+ crystal frequency than we actually have. It will adjust its internal
+ parameters and the result is that the audio is played at another pitch */
+void mpeg_set_pitch(int percent)
+{
+ unsigned long val;
+
+ /* Calculate the new (bogus) frequency */
+ val = 18432 + (18432*percent/100);
+
+ mas_writemem(MAS_BANK_D0,0x7f3,&val,1);
+
+ /* We must tell the MAS that the frequency has changed.
+ This will unfortunately cause a short silence. */
+ val = 0x25;
+ mas_writemem(MAS_BANK_D0,0x7f1,&val,1);
+}
+#endif
+
void mpeg_init(int volume, int bass, int treble, int balance, int loudness, int bass_boost, int avc)
{
#ifdef SIMULATOR
diff --git a/firmware/mpeg.h b/firmware/mpeg.h
index f1451227d0..f2a2b38c6c 100644
--- a/firmware/mpeg.h
+++ b/firmware/mpeg.h
@@ -41,6 +41,9 @@ char *mpeg_sound_unit(int setting);
int mpeg_sound_numdecimals(int setting);
struct mp3entry* mpeg_current_track(void);
bool mpeg_has_changed_track(void);
+#ifdef HAVE_MAS3587F
+void mpeg_set_pitch(int percent);
+#endif
#define SOUND_VOLUME 0
#define SOUND_BASS 1