Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/sound/sound_buffer.cc @ 7352

Last change on this file since 7352 was 7290, checked in by bensch, 19 years ago

orxonox/trunk: more debug

File size: 2.6 KB
RevLine 
[4744]1/*
[1853]2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
[1855]10
11   ### File Specific:
[5386]12   main-programmer: Benjamin Grauer
[1855]13   co-programmer: ...
[1853]14*/
15
[5386]16#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_SOUND
[1853]17
[5386]18#include "sound_buffer.h"
[1853]19
[5386]20#include "sound_engine.h"
21
[6836]22#include "sdlincl.h"
23#include <cassert>
24
[1856]25using namespace std;
[1853]26
[5386]27//////////////////
28/* SOUND-BUFFER */
29//////////////////
[3245]30/**
[5386]31 *  Creates a Soundbuffer out of an inputfile
32 * @param fileName The name of the File
33 */
[7221]34SoundBuffer::SoundBuffer(const std::string& fileName)
[3365]35{
[5386]36  this->setClassID(CL_SOUND_BUFFER, "SoundBuffer");
37  this->setName(fileName);
[4320]38
[5386]39  // generate a Buffer
40  alGenBuffers(1, &this->bufferID);
[6836]41  SoundEngine::checkError("Generate Buffer", __LINE__);
42  this->loadWAV(fileName);
43}
[5386]44
[6836]45SoundBuffer::~SoundBuffer()
46{
47  //  SoundEngine::getInstance()->removeBuffer(this);
48  alDeleteBuffers(1, &this->bufferID);
[7290]49  SoundEngine::checkError("SoundBuffer: Delete Buffer", __LINE__);
[6836]50}
[5386]51
[6836]52/**
53 * @brief loads a Waveform from the local fileSystem into this Source.
54 * @param fileName the Name of the File to Load.
55 * @returns true on success.
56 */
[7221]57bool SoundBuffer::loadWAV(const std::string& fileName)
[6836]58{
59  SDL_AudioSpec wavSpec;
60  Uint32 wavLength;
61  Uint8 *wavBuffer;
[5386]62
[6836]63  /* Load the WAV */
[7221]64  if( SDL_LoadWAV(fileName.c_str(), &wavSpec, &wavBuffer, &wavLength) == NULL)
[6836]65  {
[7221]66    PRINTF(2)("Could not open %s: %s\n", fileName.c_str(), SDL_GetError());
[6836]67    return false;
68  }
69
70  alBufferData(this->bufferID, SoundBuffer::sdlAudioSpecToAlFormat(&wavSpec), wavBuffer, wavLength, wavSpec.freq);
71  SDL_FreeWAV(wavBuffer);
72  if (SoundEngine::checkError("Could not load Wave file", __LINE__))
73    return true;
74  else
75    return false;
[3365]76}
[1853]77
[6836]78/**
79 * @brief converts an SDL_AudioSpec into a valid OpenAL AUDIO_FORMAT enumerator
80 * @param audiospec the AudioSpec to convert.
81 * @returns the AL_FORMAT
82 */
83ALenum SoundBuffer::sdlAudioSpecToAlFormat(const SDL_AudioSpec* audiospec)
[3543]84{
[6836]85  assert (audiospec != NULL);
86  bool stereo = true;
87  bool is16Bit = true;
88  if (audiospec->format == AUDIO_U8 || audiospec->format == AUDIO_S8)
89    is16Bit = false;
90  if (audiospec->channels == 1)
91    stereo = false;
92
93  if (!stereo && !is16Bit)
94    return AL_FORMAT_MONO8;
95  else if (!stereo && is16Bit)
96    return AL_FORMAT_MONO16;
97  else if (stereo && !is16Bit)
98    return AL_FORMAT_STEREO8;
99  else if (stereo && is16Bit)
100    return AL_FORMAT_STEREO16;
[3543]101}
[6836]102
Note: See TracBrowser for help on using the repository browser.