diff options
author | Chris Apers | 2004-12-10 15:11:53 +0000 |
---|---|---|
committer | Chris Apers | 2004-12-10 15:11:53 +0000 |
commit | 981d5fb1a203bbd18dce91b6ab2f174a3b1af8c5 (patch) | |
tree | 56d919467c973dd5b19816924f9717dabd469fab /sword1 | |
parent | e1458ca1ff6ddb20c0a4fe5fac296ffd91fef7a1 (diff) | |
download | scummvm-rg350-981d5fb1a203bbd18dce91b6ab2f174a3b1af8c5.tar.gz scummvm-rg350-981d5fb1a203bbd18dce91b6ab2f174a3b1af8c5.tar.bz2 scummvm-rg350-981d5fb1a203bbd18dce91b6ab2f174a3b1af8c5.zip |
Reading from memory card is too slow
svn-id: r16012
Diffstat (limited to 'sword1')
-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; } |