Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Dec 13, 2007, 5:58:14 PM (17 years ago)
Author:
nicolasc
Message:

added copyright notice
network still need to be done

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/FICN/src/audio/AudioStream.cc

    r430 r513  
     1/*
     2 *   ORXONOX - the hottest 3D action shooter ever to exist
     3 *
     4 *
     5 *   License notice:
     6 *
     7 *   This program is free software; you can redistribute it and/or
     8 *   modify it under the terms of the GNU General Public License
     9 *   as published by the Free Software Foundation; either version 2
     10 *   of the License, or (at your option) any later version.
     11 *
     12 *   This program is distributed in the hope that it will be useful,
     13 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 *   GNU General Public License for more details.
     16 *
     17 *   You should have received a copy of the GNU General Public License
     18 *   along with this program; if not, write to the Free Software
     19 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
     20 *
     21 *   Author:
     22 *      ...
     23 *   Co-authors:
     24 *      ...
     25 *
     26 */
     27
    128
    229#include "AudioStream.h"
     
    835                this->path = path;
    936                loaded = false;
    10         }       
     37        }
    1138
    1239        void AudioStream::open()
     
    1441            int result;
    1542
    16            
     43
    1744            if(!(oggFile = fopen(path.c_str(), "rb")))
    1845                        {
     
    2350            if((result = ov_open(oggFile, &oggStream, NULL, 0)) < 0)
    2451            {
    25         fclose(oggFile);               
     52        fclose(oggFile);
    2653              orxonox::Error("Could not open Ogg stream. " + errorString(result));
    2754                                return;
     
    2956
    3057                        loaded = true;
    31        
     58
    3259            vorbisInfo = ov_info(&oggStream, -1);
    3360            vorbisComment = ov_comment(&oggStream, -1);
    34        
     61
    3562            if(vorbisInfo->channels == 1)
    3663                format = AL_FORMAT_MONO16;
    3764            else
    3865                format = AL_FORMAT_STEREO16;
    39                
    40                
     66
     67
    4168            alGenBuffers(2, buffers);
    4269            check();
    4370            alGenSources(1, &source);
    4471            check();
    45            
     72
    4673            alSource3f(source, AL_POSITION,        0.0, 0.0, 0.0);
    4774            alSource3f(source, AL_VELOCITY,        0.0, 0.0, 0.0);
     
    5077            alSourcei (source, AL_SOURCE_RELATIVE, AL_FALSE      );
    5178        }
    52        
    53        
    54        
    55        
     79
     80
     81
     82
    5683        void AudioStream::release()
    5784        {
     
    6390            alDeleteBuffers(1, buffers);
    6491            check();
    65        
     92
    6693            ov_clear(&oggStream);
    6794                        loaded = false;
    68                
    69         }
    70        
    71        
    72        
    73        
     95
     96        }
     97
     98
     99
     100
    74101        void AudioStream::display()
    75102        {
     
    86113                << "\n"
    87114                << "vendor " << vorbisComment->vendor << "\n";
    88                
     115
    89116            for(int i = 0; i < vorbisComment->comments; i++)
    90117                std::cout << "   " << vorbisComment->user_comments[i] << "\n";
    91                
    92             std::cout << std::endl;     
     118
     119            std::cout << std::endl;
    93120                }
    94121        }
    95        
    96        
    97        
    98        
     122
     123
     124
     125
    99126        bool AudioStream::playback()
    100127        {
     
    106133            if(playing())
    107134                return true;
    108                
     135
    109136            if(!stream(buffers[0]))
    110137                return false;
    111                
     138
    112139            if(!stream(buffers[1]))
    113140                return false;
    114            
     141
    115142            alSourceQueueBuffers(source, 2, buffers);
    116143            alSourcePlay(source);
    117            
     144
    118145            return true;
    119146        }
    120        
    121        
    122        
    123        
     147
     148
     149
     150
    124151        bool AudioStream::playing()
    125152        {
     
    133160            return (state == AL_PLAYING);
    134161        }
    135        
    136        
    137        
    138        
     162
     163
     164
     165
    139166        bool AudioStream::update()
    140167        {
    141168            int processed;
    142169            bool active = true;
    143        
     170
    144171            alGetSourcei(source, AL_BUFFERS_PROCESSED, &processed);
    145        
     172
    146173            while(processed--)
    147174            {
    148175                ALuint buffer;
    149                
     176
    150177                alSourceUnqueueBuffers(source, 1, &buffer);
    151178                check();
    152        
     179
    153180                active = stream(buffer);
    154        
     181
    155182                alSourceQueueBuffers(source, 1, &buffer);
    156183                check();
    157184            }
    158        
     185
    159186                        if (active==false)
    160187                        {
     
    163190            return active;
    164191        }
    165        
    166        
    167        
    168        
     192
     193
     194
     195
    169196        bool AudioStream::stream(ALuint buffer)
    170197        {
     
    173200            int  section;
    174201            int  result;
    175        
     202
    176203            while(size < BUFFER_SIZE)
    177204            {
    178205                result = ov_read(&oggStream, pcm + size, BUFFER_SIZE - size, 0, 2, 1, &section);
    179            
     206
    180207                if(result > 0)
    181208                    size += result;
     
    186213                        break;
    187214            }
    188            
     215
    189216            if(size == 0)
    190217                return false;
    191                
     218
    192219            alBufferData(buffer, format, pcm, size, vorbisInfo->rate);
    193220            check();
    194            
     221
    195222            return true;
    196223        }
    197        
    198        
     224
     225
    199226
    200227        void AudioStream::empty()
    201228        {
    202229            int queued;
    203            
     230
    204231            alGetSourcei(source, AL_BUFFERS_QUEUED, &queued);
    205            
     232
    206233            while(queued--)
    207234            {
    208235                ALuint buffer;
    209            
     236
    210237                alSourceUnqueueBuffers(source, 1, &buffer);
    211238                check();
    212239            }
    213240        }
    214        
    215        
    216        
    217        
     241
     242
     243
     244
    218245        void AudioStream::check()
    219246        {
    220247                int error = alGetError();
    221        
     248
    222249                if(error != AL_NO_ERROR)
    223250                        orxonox::Error("OpenAL error was raised.");
    224251        }
    225        
    226        
    227        
     252
     253
     254
    228255        std::string AudioStream::errorString(int code)
    229256        {
Note: See TracChangeset for help on using the changeset viewer.