diff options
author | Linus Nielsen Feltzing <linus@haxx.se> | 2002-07-22 16:38:02 +0000 |
---|---|---|
committer | Linus Nielsen Feltzing <linus@haxx.se> | 2002-07-22 16:38:02 +0000 |
commit | e0d88a11d9e0d8c29fc1cea507f7ebdf1e07bf7a (patch) | |
tree | 61716d69ae846a0b5fcf5819256d475d04612a42 | |
parent | 6515c1c10901e96c67647f3d8e9cb7a943b33d3b (diff) | |
download | rockbox-e0d88a11d9e0d8c29fc1cea507f7ebdf1e07bf7a.tar.gz rockbox-e0d88a11d9e0d8c29fc1cea507f7ebdf1e07bf7a.zip |
Loudness and Superbass patch by Heikki Hannikainen
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1400 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/drivers/mas.h | 5 | ||||
-rw-r--r-- | firmware/mpeg.c | 77 | ||||
-rw-r--r-- | firmware/mpeg.h | 2 |
3 files changed, 74 insertions, 10 deletions
diff --git a/firmware/drivers/mas.h b/firmware/drivers/mas.h index 32314fc789..f5ab554ca1 100644 --- a/firmware/drivers/mas.h +++ b/firmware/drivers/mas.h | |||
@@ -60,6 +60,11 @@ | |||
60 | #define MAS_REG_KPRESCALE 0xe7 | 60 | #define MAS_REG_KPRESCALE 0xe7 |
61 | #define MAS_REG_KBASS 0x6b | 61 | #define MAS_REG_KBASS 0x6b |
62 | #define MAS_REG_KTREBLE 0x6f | 62 | #define MAS_REG_KTREBLE 0x6f |
63 | #define MAS_REG_KMDB_SWITCH 0x21 | ||
64 | #define MAS_REG_KMDB_STR 0x22 | ||
65 | #define MAS_REG_KMDB_HAR 0x23 | ||
66 | #define MAS_REG_KMDB_FC 0x24 | ||
67 | #define MAS_REG_KLOUDNESS 0x1e | ||
63 | 68 | ||
64 | /* | 69 | /* |
65 | * MAS commands | 70 | * MAS commands |
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index 70232571b7..9906620fdb 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -56,21 +56,30 @@ static char *units[] = | |||
56 | { | 56 | { |
57 | "%", /* Volume */ | 57 | "%", /* Volume */ |
58 | "dB", /* Bass */ | 58 | "dB", /* Bass */ |
59 | "dB" /* Treble */ | 59 | "dB", /* Treble */ |
60 | "", /* Balance */ | ||
61 | "dB", /* Loudness */ | ||
62 | "%" /* Bass boost */ | ||
60 | }; | 63 | }; |
61 | 64 | ||
62 | static int numdecimals[] = | 65 | static int numdecimals[] = |
63 | { | 66 | { |
64 | 0, /* Volume */ | 67 | 0, /* Volume */ |
65 | 0, /* Bass */ | 68 | 0, /* Bass */ |
66 | 0 /* Treble */ | 69 | 0, /* Treble */ |
70 | 0, /* Balance */ | ||
71 | 0, /* Loudness */ | ||
72 | 0 /* Bass boost */ | ||
67 | }; | 73 | }; |
68 | 74 | ||
69 | static int minval[] = | 75 | static int minval[] = |
70 | { | 76 | { |
71 | 0, /* Volume */ | 77 | 0, /* Volume */ |
72 | 0, /* Bass */ | 78 | 0, /* Bass */ |
73 | 0 /* Treble */ | 79 | 0, /* Treble */ |
80 | 0, /* Balance */ | ||
81 | 0, /* Loudness */ | ||
82 | 0 /* Bass boost */ | ||
74 | }; | 83 | }; |
75 | 84 | ||
76 | static int maxval[] = | 85 | static int maxval[] = |
@@ -78,11 +87,14 @@ static int maxval[] = | |||
78 | 50, /* Volume */ | 87 | 50, /* Volume */ |
79 | #ifdef ARCHOS_RECORDER | 88 | #ifdef ARCHOS_RECORDER |
80 | 24, /* Bass */ | 89 | 24, /* Bass */ |
81 | 24 /* Treble */ | 90 | 24, /* Treble */ |
82 | #else | 91 | #else |
83 | 30, /* Bass */ | 92 | 30, /* Bass */ |
84 | 30 /* Treble */ | 93 | 30, /* Treble */ |
85 | #endif | 94 | #endif |
95 | 100, /* Balance */ | ||
96 | 17, /* Loudness */ | ||
97 | 10 /* Bass boost */ | ||
86 | }; | 98 | }; |
87 | 99 | ||
88 | static int defaultval[] = | 100 | static int defaultval[] = |
@@ -90,11 +102,14 @@ static int defaultval[] = | |||
90 | 70/2, /* Volume */ | 102 | 70/2, /* Volume */ |
91 | #ifdef ARCHOS_RECORDER | 103 | #ifdef ARCHOS_RECORDER |
92 | 12+6, /* Bass */ | 104 | 12+6, /* Bass */ |
93 | 12+6 /* Treble */ | 105 | 12+6, /* Treble */ |
94 | #else | 106 | #else |
95 | 15+7, /* Bass */ | 107 | 15+7, /* Bass */ |
96 | 15+7 /* Treble */ | 108 | 15+7, /* Treble */ |
97 | #endif | 109 | #endif |
110 | 50, /* Balance */ | ||
111 | 0, /* Loudness */ | ||
112 | 0 /* Bass boost */ | ||
98 | }; | 113 | }; |
99 | 114 | ||
100 | char *mpeg_sound_unit(int setting) | 115 | char *mpeg_sound_unit(int setting) |
@@ -965,6 +980,34 @@ void mpeg_sound_set(int setting, int value) | |||
965 | set_prescaled_volume(); | 980 | set_prescaled_volume(); |
966 | #endif | 981 | #endif |
967 | break; | 982 | break; |
983 | |||
984 | #ifdef ARCHOS_RECORDER | ||
985 | case SOUND_SUPERBASS: | ||
986 | if (value) { | ||
987 | tmp = MAX(MIN(value * 12, 0x7f), 0); | ||
988 | mas_codec_writereg(MAS_REG_KMDB_STR, (tmp & 0xff) << 8); | ||
989 | tmp = 0x30; /* MDB_HAR: Space for experiment here */ | ||
990 | mas_codec_writereg(MAS_REG_KMDB_HAR, (tmp & 0xff) << 8); | ||
991 | tmp = 60 / 10; /* calculate MDB_FC, 60hz - experiment here, | ||
992 | this would depend on the earphones... | ||
993 | perhaps make it tunable? */ | ||
994 | mas_codec_writereg(MAS_REG_KMDB_FC, (tmp & 0xff) << 8); | ||
995 | tmp = (3 * tmp) / 2; /* calculate MDB_SHAPE */ | ||
996 | mas_codec_writereg(MAS_REG_KMDB_SWITCH, | ||
997 | ((tmp & 0xff) << 8) /* MDB_SHAPE */ | ||
998 | | 2); /* MDB_SWITCH enable */ | ||
999 | } else { | ||
1000 | mas_codec_writereg(MAS_REG_KMDB_STR, 0); | ||
1001 | mas_codec_writereg(MAS_REG_KMDB_HAR, 0); | ||
1002 | mas_codec_writereg(MAS_REG_KMDB_SWITCH, 0); /* MDB_SWITCH disable */ | ||
1003 | } | ||
1004 | break; | ||
1005 | |||
1006 | case SOUND_LOUDNESS: | ||
1007 | tmp = MAX(MIN(value * 4, 0x44), 0); | ||
1008 | mas_codec_writereg(MAS_REG_KLOUDNESS, (tmp & 0xff) << 8); | ||
1009 | break; | ||
1010 | #endif | ||
968 | } | 1011 | } |
969 | #endif /* SIMULATOR */ | 1012 | #endif /* SIMULATOR */ |
970 | } | 1013 | } |
@@ -994,18 +1037,30 @@ int mpeg_val2phys(int setting, int value) | |||
994 | result = value - 15; | 1037 | result = value - 15; |
995 | #endif | 1038 | #endif |
996 | break; | 1039 | break; |
1040 | |||
1041 | #ifdef ARCHOS_RECORDER | ||
1042 | case SOUND_LOUDNESS: | ||
1043 | result = value; | ||
1044 | break; | ||
1045 | |||
1046 | case SOUND_SUPERBASS: | ||
1047 | result = value * 10; | ||
1048 | break; | ||
1049 | #endif | ||
997 | } | 1050 | } |
998 | return result; | 1051 | return result; |
999 | } | 1052 | } |
1000 | 1053 | ||
1001 | void mpeg_init(int volume, int bass, int treble) | 1054 | void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost) |
1002 | { | 1055 | { |
1003 | #ifdef SIMULATOR | 1056 | #ifdef SIMULATOR |
1004 | volume = bass = treble; | 1057 | volume = bass = treble = loudness = bass_boost; |
1005 | #else | 1058 | #else |
1006 | #ifdef ARCHOS_RECORDER | 1059 | #ifdef ARCHOS_RECORDER |
1007 | int rc; | 1060 | int rc; |
1008 | unsigned long val; | 1061 | unsigned long val; |
1062 | #else | ||
1063 | loudness = bass_boost; | ||
1009 | #endif | 1064 | #endif |
1010 | 1065 | ||
1011 | setup_sci0(); | 1066 | setup_sci0(); |
@@ -1069,5 +1124,9 @@ void mpeg_init(int volume, int bass, int treble) | |||
1069 | mpeg_sound_set(SOUND_BASS, bass); | 1124 | mpeg_sound_set(SOUND_BASS, bass); |
1070 | mpeg_sound_set(SOUND_TREBLE, treble); | 1125 | mpeg_sound_set(SOUND_TREBLE, treble); |
1071 | mpeg_sound_set(SOUND_VOLUME, volume); | 1126 | mpeg_sound_set(SOUND_VOLUME, volume); |
1127 | #ifdef ARCHOS_RECORDER | ||
1128 | mpeg_sound_set(SOUND_LOUDNESS, loudness); | ||
1129 | mpeg_sound_set(SOUND_SUPERBASS, bass_boost); | ||
1130 | #endif | ||
1072 | #endif /* SIMULATOR */ | 1131 | #endif /* SIMULATOR */ |
1073 | } | 1132 | } |
diff --git a/firmware/mpeg.h b/firmware/mpeg.h index baf6b7b476..4150181620 100644 --- a/firmware/mpeg.h +++ b/firmware/mpeg.h | |||
@@ -21,7 +21,7 @@ | |||
21 | 21 | ||
22 | #include <stdbool.h> | 22 | #include <stdbool.h> |
23 | 23 | ||
24 | void mpeg_init(int volume, int bass, int treble); | 24 | void mpeg_init(int volume, int bass, int treble, int loudness, int bass_boost); |
25 | void mpeg_play(char* trackname); | 25 | void mpeg_play(char* trackname); |
26 | void mpeg_stop(void); | 26 | void mpeg_stop(void); |
27 | void mpeg_pause(void); | 27 | void mpeg_pause(void); |