NUVIE: Fix crash using queing audio streams for PC speaker
The PC Speaker streams are hardcoded at 22Khz, but when the ScummVM queueing audio streams were created, they were being set at the mixer rate of 44Khz. Which caused an error, because the queueing audio stream expected the added streams to be at the same rate. For now, the best solution seemed to be to ignore the passed rate, and hardcode the queueing audio streams to a rate of 22Khz to match.
This commit is contained in:
parent
f77e238629
commit
d872e3a3b5
1 changed files with 18 additions and 16 deletions
|
@ -327,8 +327,8 @@ int PCSpeakerStutterStream::readBuffer(sint16 *buffer, const int numSamples) {
|
|||
return s;
|
||||
}
|
||||
|
||||
Audio::AudioStream *makePCSpeakerSlugDissolveSfxStream(uint rate) {
|
||||
Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(rate, false);
|
||||
Audio::AudioStream *makePCSpeakerSlugDissolveSfxStream(uint /*rate*/) {
|
||||
Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(SPKR_OUTPUT_RATE, false);
|
||||
for (uint16 i = 0; i < 20; i++) {
|
||||
stream->queueAudioStream(new PCSpeakerRandomStream((NUVIE_RAND() % 0x1068) + 0x258, 0x15e, 1), DisposeAfterUse::YES);
|
||||
}
|
||||
|
@ -336,8 +336,8 @@ Audio::AudioStream *makePCSpeakerSlugDissolveSfxStream(uint rate) {
|
|||
return stream;
|
||||
}
|
||||
|
||||
Audio::AudioStream *makePCSpeakerGlassSfxStream(uint rate) {
|
||||
Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(rate, false);
|
||||
Audio::AudioStream *makePCSpeakerGlassSfxStream(uint /*rate*/) {
|
||||
Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(SPKR_OUTPUT_RATE, false);
|
||||
for (uint16 i = 0x7d0; i < 0x4e20; i += 0x3e8) {
|
||||
stream->queueAudioStream(new PCSpeakerRandomStream(i, 0x78, 0x28), DisposeAfterUse::YES);
|
||||
}
|
||||
|
@ -346,7 +346,7 @@ Audio::AudioStream *makePCSpeakerGlassSfxStream(uint rate) {
|
|||
}
|
||||
|
||||
|
||||
Audio::AudioStream *makePCSpeakerMagicCastingP1SfxStream(uint rate, uint8 magic_circle) {
|
||||
Audio::AudioStream *makePCSpeakerMagicCastingP1SfxStream(uint /*rate*/, uint8 magic_circle) {
|
||||
//Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(rate, false);
|
||||
|
||||
return new PCSpeakerRandomStream(0x2bc, 0x640 * magic_circle + 0x1f40, 0x320);
|
||||
|
@ -354,8 +354,8 @@ Audio::AudioStream *makePCSpeakerMagicCastingP1SfxStream(uint rate, uint8 magic_
|
|||
//return stream;
|
||||
}
|
||||
|
||||
Audio::AudioStream *makePCSpeakerMagicCastingP2SfxStream(uint rate, uint8 magic_circle) {
|
||||
Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(rate, false);
|
||||
Audio::AudioStream *makePCSpeakerMagicCastingP2SfxStream(uint /*rate*/, uint8 magic_circle) {
|
||||
Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(SPKR_OUTPUT_RATE, false);
|
||||
|
||||
const sint16 word_30188[] = {3, 2, 2, 2, 1, 1, 1, 1, 1};
|
||||
|
||||
|
@ -370,10 +370,10 @@ Audio::AudioStream *makePCSpeakerMagicCastingP2SfxStream(uint rate, uint8 magic_
|
|||
return stream;
|
||||
}
|
||||
|
||||
Audio::AudioStream *makePCSpeakerAvatarDeathSfxStream(uint rate) {
|
||||
Audio::AudioStream *makePCSpeakerAvatarDeathSfxStream(uint /*rate*/) {
|
||||
const uint16 avatar_death_tune[] = {0x12C, 0x119, 0x12C, 0xFA, 0x119, 0xDE, 0xFA, 0xFA};
|
||||
|
||||
Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(rate, false);
|
||||
Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(SPKR_OUTPUT_RATE, false);
|
||||
for (uint8 i = 0; i < 8; i++) {
|
||||
stream->queueAudioStream(new PCSpeakerStutterStream(3, 1, 0x4e20, 1, avatar_death_tune[i]));
|
||||
}
|
||||
|
@ -381,8 +381,8 @@ Audio::AudioStream *makePCSpeakerAvatarDeathSfxStream(uint rate) {
|
|||
return stream;
|
||||
}
|
||||
|
||||
Audio::AudioStream *makePCSpeakerKalLorSfxStream(uint rate) {
|
||||
Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(rate, false);
|
||||
Audio::AudioStream *makePCSpeakerKalLorSfxStream(uint /*rate*/) {
|
||||
Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(SPKR_OUTPUT_RATE, false);
|
||||
for (uint8 i = 0; i < 0x32; i++) {
|
||||
stream->queueAudioStream(new PCSpeakerStutterStream((0x32 - i) << 2, 0x2710 - (i << 6), 0x3e8, 1, (i << 4) + 0x320));
|
||||
}
|
||||
|
@ -392,9 +392,11 @@ Audio::AudioStream *makePCSpeakerKalLorSfxStream(uint rate) {
|
|||
return stream;
|
||||
}
|
||||
|
||||
Audio::AudioStream *makePCSpeakerHailStoneSfxStream(uint rate) {
|
||||
//FIXME This doesn't sound right. It should probably use a single pcspkr object. The original also plays the hailstones individually not all at once like we do. :(
|
||||
Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(rate, false);
|
||||
Audio::AudioStream *makePCSpeakerHailStoneSfxStream(uint /*rate*/) {
|
||||
//FIXME This doesn't sound right. It should probably use a single
|
||||
// pcspkr object. The original also plays the hailstones
|
||||
// individually, not all at once like we do. :(
|
||||
Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(SPKR_OUTPUT_RATE, false);
|
||||
|
||||
for (uint16 i = 0; i < 0x28; i++) {
|
||||
stream->queueAudioStream(new PCSpeakerFreqStream((NUVIE_RAND() % 0x28) + 0x20, 8), DisposeAfterUse::YES);
|
||||
|
@ -414,8 +416,8 @@ Audio::AudioStream *makePCSpeakerHailStoneSfxStream(uint rate) {
|
|||
return stream;
|
||||
}
|
||||
|
||||
Audio::AudioStream *makePCSpeakerEarthQuakeSfxStream(uint rate) {
|
||||
Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(rate, false);
|
||||
Audio::AudioStream *makePCSpeakerEarthQuakeSfxStream(uint /*rate*/) {
|
||||
Audio::QueuingAudioStream *stream = Audio::makeQueuingAudioStream(SPKR_OUTPUT_RATE, false);
|
||||
|
||||
for (uint16 i = 0; i < 0x28; i++) {
|
||||
stream->queueAudioStream(new PCSpeakerFreqStream((NUVIE_RAND() % 0xb5) + 0x13, 8), DisposeAfterUse::YES);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue