Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/shared_lib/src/lib/sound/sound_buffer.cc @ 7952

Last change on this file since 7952 was 7221, checked in by bensch, 19 years ago

orxonox/trunk: merged the std-branche back, it runs on windows and Linux

svn merge https://svn.orxonox.net/orxonox/branches/std . -r7202:HEAD

File size: 2.5 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}
50
51/**
52 * @brief loads a Waveform from the local fileSystem into this Source.
53 * @param fileName the Name of the File to Load.
54 * @returns true on success.
55 */
56bool SoundBuffer::loadWAV(const std::string& fileName)
57{
58  SDL_AudioSpec wavSpec;
59  Uint32 wavLength;
60  Uint8 *wavBuffer;
61
62  /* Load the WAV */
63  if( SDL_LoadWAV(fileName.c_str(), &wavSpec, &wavBuffer, &wavLength) == NULL)
64  {
65    PRINTF(2)("Could not open %s: %s\n", fileName.c_str(), SDL_GetError());
66    return false;
67  }
68
69  alBufferData(this->bufferID, SoundBuffer::sdlAudioSpecToAlFormat(&wavSpec), wavBuffer, wavLength, wavSpec.freq);
70  SDL_FreeWAV(wavBuffer);
71  if (SoundEngine::checkError("Could not load Wave file", __LINE__))
72    return true;
73  else
74    return false;
75}
76
77/**
78 * @brief converts an SDL_AudioSpec into a valid OpenAL AUDIO_FORMAT enumerator
79 * @param audiospec the AudioSpec to convert.
80 * @returns the AL_FORMAT
81 */
82ALenum SoundBuffer::sdlAudioSpecToAlFormat(const SDL_AudioSpec* audiospec)
83{
84  assert (audiospec != NULL);
85  bool stereo = true;
86  bool is16Bit = true;
87  if (audiospec->format == AUDIO_U8 || audiospec->format == AUDIO_S8)
88    is16Bit = false;
89  if (audiospec->channels == 1)
90    stereo = false;
91
92  if (!stereo && !is16Bit)
93    return AL_FORMAT_MONO8;
94  else if (!stereo && is16Bit)
95    return AL_FORMAT_MONO16;
96  else if (stereo && !is16Bit)
97    return AL_FORMAT_STEREO8;
98  else if (stereo && is16Bit)
99    return AL_FORMAT_STEREO16;
100}
101
Note: See TracBrowser for help on using the repository browser.