Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/cd/src/lib/sound/sound_buffer.cc @ 7587

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

orxonox/trunk: more debug

File size: 2.6 KB
Line 
1/*
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.
10
11   ### File Specific:
12   main-programmer: Benjamin Grauer
13   co-programmer: ...
14*/
15
16#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_SOUND
17
18#include "sound_buffer.h"
19
20#include "sound_engine.h"
21
22#include "sdlincl.h"
23#include <cassert>
24
25using namespace std;
26
27//////////////////
28/* SOUND-BUFFER */
29//////////////////
30/**
31 *  Creates a Soundbuffer out of an inputfile
32 * @param fileName The name of the File
33 */
34SoundBuffer::SoundBuffer(const std::string& fileName)
35{
36  this->setClassID(CL_SOUND_BUFFER, "SoundBuffer");
37  this->setName(fileName);
38
39  // generate a Buffer
40  alGenBuffers(1, &this->bufferID);
41  SoundEngine::checkError("Generate Buffer", __LINE__);
42  this->loadWAV(fileName);
43}
44
45SoundBuffer::~SoundBuffer()
46{
47  //  SoundEngine::getInstance()->removeBuffer(this);
48  alDeleteBuffers(1, &this->bufferID);
49  SoundEngine::checkError("SoundBuffer: Delete Buffer", __LINE__);
50}
51
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 */
57bool SoundBuffer::loadWAV(const std::string& fileName)
58{
59  SDL_AudioSpec wavSpec;
60  Uint32 wavLength;
61  Uint8 *wavBuffer;
62
63  /* Load the WAV */
64  if( SDL_LoadWAV(fileName.c_str(), &wavSpec, &wavBuffer, &wavLength) == NULL)
65  {
66    PRINTF(2)("Could not open %s: %s\n", fileName.c_str(), SDL_GetError());
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;
76}
77
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)
84{
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;
101}
102
Note: See TracBrowser for help on using the repository browser.