X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Faudio%2Fsound_file.cpp;h=01a4032c38c31381fd3a7fa8aada3e2c0ba7da7f;hb=07ddaed2a657e4d2a3d038fed223fc5827159caf;hp=9a0506bada3c71a2b8ec05fa20f87f74719c5281;hpb=0f0e6a3689e5d810ec55b68ff455210b1081a021;p=supertux.git diff --git a/src/audio/sound_file.cpp b/src/audio/sound_file.cpp index 9a0506bad..01a4032c3 100644 --- a/src/audio/sound_file.cpp +++ b/src/audio/sound_file.cpp @@ -1,3 +1,22 @@ +// $Id$ +// +// SuperTux +// Copyright (C) 2006 Matthias Braun +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + /** Used SDL_mixer and glest source as reference */ #include @@ -12,7 +31,7 @@ #include #include #include -#include "msg.hpp" +#include "log.hpp" class WavSoundFile : public SoundFile { @@ -55,7 +74,7 @@ WavSoundFile::WavSoundFile(PHYSFS_file* file) if(PHYSFS_read(file, magic, sizeof(magic), 1) != 1) throw std::runtime_error("Couldn't read file magic (not a wave file)"); if(strncmp(magic, "RIFF", 4) != 0) { - msg_debug("MAGIC: " << magic); + log_debug << "MAGIC: " << magic << std::endl; throw std::runtime_error("file is not a RIFF wav file"); } @@ -151,6 +170,23 @@ WavSoundFile::read(void* buffer, size_t buffer_size) if(PHYSFS_read(file, buffer, readsize, 1) != 1) throw std::runtime_error("read error while reading samples"); +#ifdef WORDS_BIGENDIAN + if (bits_per_sample != 16) + return readsize; + char *tmp = (char*)buffer; + + size_t i; + char c; + for (i = 0; i < readsize / 2; i++) + { + c = tmp[2*i]; + tmp[2*i] = tmp[2*i+1]; + tmp[2*i+1] = c; + } + + buffer = tmp; +#endif + return readsize; } @@ -203,8 +239,13 @@ OggSoundFile::read(void* _buffer, size_t buffer_size) while(buffer_size>0){ long bytesRead - = ov_read(&vorbis_file, buffer, static_cast (buffer_size), 0, 2, 1, - §ion); + = ov_read(&vorbis_file, buffer, static_cast (buffer_size), +#ifdef WORDS_BIGENDIAN +1, +#else +0, +#endif + 2, 1, §ion); if(bytesRead==0){ break; }