diff options
-rw-r--r-- | engines/agi/sound.cpp | 9 | ||||
-rw-r--r-- | engines/agi/sound.h | 4 |
2 files changed, 10 insertions, 3 deletions
diff --git a/engines/agi/sound.cpp b/engines/agi/sound.cpp index 8527d11202..3bff875cc4 100644 --- a/engines/agi/sound.cpp +++ b/engines/agi/sound.cpp @@ -639,7 +639,7 @@ void SoundMgr::playSound() { if (playingSound != -1) { if (_vm->_game.sounds[playingSound]->type() == AGI_SOUND_MIDI) { /* play_midi_sound (); */ - warning("playSound: Trying to play an Apple IIGS MIDI sound. Not yet implemented!"); + //warning("playSound: Trying to play an Apple IIGS MIDI sound. Not yet implemented!"); playing = 0; } else if (_vm->_game.sounds[playingSound]->type() == AGI_SOUND_SAMPLE) { //debugC(3, kDebugLevelSound, "playSound: Trying to play an Apple IIGS sample"); @@ -687,8 +687,11 @@ uint32 SoundMgr::mixSound(void) { //double hertz = 8.175798915644 * pow(SEMITONE, fracToDouble(chn.note)); // double step = getRate() / hertz; // chn.posAdd = doubleToFrac(step); - - double hertz = 1076.0 * pow(SEMITONE, fracToDouble(chn.note)); + + // Frequency multiplier was 1076.0 based on tests made with MESS 0.117. + // Tests made with KEGS32 averaged the multiplier to around 1045. + // So this is a guess but maybe it's 1046.5... i.e. C6's frequency? + double hertz = C6_FREQ * pow(SEMITONE, fracToDouble(chn.note)); chn.posAdd = doubleToFrac(hertz / getRate()); chn.vol = doubleToFrac(fracToDouble(chn.envVol) * fracToDouble(chn.chanVol) / 127.0); double tempVol = fracToDouble(chn.vol)/127.0; diff --git a/engines/agi/sound.h b/engines/agi/sound.h index e6689b7e90..5d6b423053 100644 --- a/engines/agi/sound.h +++ b/engines/agi/sound.h @@ -66,6 +66,10 @@ struct IIgsEnvelope { // 2**(1/12) i.e. the 12th root of 2 #define SEMITONE 1.059463094359295 +// C6's frequency is A4's (440 Hz) frequency but one full octave and three semitones higher +// i.e. C6_FREQ = 440 * pow(2.0, 15/12.0) +#define C6_FREQ 1046.502261202395 + // Size of the SIERRASTANDARD file (i.e. the wave file i.e. the sample data used by the instruments). #define SIERRASTANDARD_SIZE 65536 |