diff options
-rw-r--r-- | sword1/music.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/sword1/music.cpp b/sword1/music.cpp index d24203bc2f..d1112e4cac 100644 --- a/sword1/music.cpp +++ b/sword1/music.cpp @@ -63,12 +63,34 @@ WaveAudioStream::~WaveAudioStream(void) { int WaveAudioStream::readBuffer(int16 *buffer, const int numSamples) { int samples = ((int)_samplesLeft < numSamples) ? (int)_samplesLeft : numSamples; + +#ifdef __PALM_OS__ + int cnt = samples; + int size = (_bitsPerSample == 16 ? samples * 2 : samples); + void *sound = malloc(size); + + _sourceFile->read(sound, size); + + if (_bitsPerSample == 16) { + int16 *src = (int16 *)sound; + while(cnt--) + *buffer++ = (int16)READ_LE_UINT16(src++); + + } else { + int8 *src = (int8 *)sound; + while(cnt--) + *buffer++ = (int16)*src++ << 8; + } + + free(sound); +#else if (_bitsPerSample == 16) for (int cnt = 0; cnt < samples; cnt++) *buffer++ = (int16)_sourceFile->readUint16LE(); else for (int cnt = 0; cnt < samples; cnt++) *buffer++ = (int16)_sourceFile->readByte() << 8; +#endif _samplesLeft -= samples; return samples; } |