beeps 0.1.12 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
 - data/.doc/ext/beeps/beeps.cpp +2 -5
 - data/.doc/ext/beeps/file_in.cpp +0 -5
 - data/.doc/ext/beeps/native.cpp +0 -4
 - data/.doc/ext/beeps/processor.cpp +1 -5
 - data/.doc/ext/beeps/sawtooth_wave.cpp +0 -5
 - data/.doc/ext/beeps/sine_wave.cpp +0 -5
 - data/.doc/ext/beeps/sound.cpp +0 -5
 - data/.doc/ext/beeps/square_wave.cpp +0 -5
 - data/README.md +1 -1
 - data/Rakefile +15 -12
 - data/VERSION +1 -1
 - data/beeps.gemspec +5 -7
 - data/ext/beeps/beeps.cpp +2 -5
 - data/ext/beeps/defs.h +3 -2
 - data/ext/beeps/extconf.rb +2 -3
 - data/ext/beeps/file_in.cpp +0 -5
 - data/ext/beeps/native.cpp +0 -4
 - data/ext/beeps/processor.cpp +1 -5
 - data/ext/beeps/sawtooth_wave.cpp +0 -5
 - data/ext/beeps/sine_wave.cpp +0 -5
 - data/ext/beeps/sound.cpp +0 -5
 - data/ext/beeps/square_wave.cpp +0 -5
 - data/include/beeps.h +5 -0
 - data/include/beeps/debug.h +23 -0
 - data/include/beeps/exception.h +6 -2
 - data/include/beeps/processor.h +9 -6
 - data/include/beeps/ruby/beeps.h +1 -0
 - data/include/beeps/signals.h +2 -9
 - data/include/beeps/sound.h +2 -1
 - data/lib/beeps/module.rb +4 -19
 - data/lib/beeps/processor.rb +16 -20
 - data/src/beeps.cpp +3 -64
 - data/src/exception.cpp +0 -3
 - data/src/openal.cpp +63 -174
 - data/src/openal.h +15 -4
 - data/src/processor.cpp +5 -5
 - data/src/signals.cpp +21 -19
 - data/src/signals.h +23 -0
 - data/src/sound.cpp +173 -14
 - data/src/sound.h +17 -0
 - metadata +30 -73
 - data/include/beeps/openal.h +0 -34
 - data/src/stk/include/Blit.h +0 -151
 - data/src/stk/include/BlitSaw.h +0 -148
 - data/src/stk/include/BlitSquare.h +0 -170
 - data/src/stk/include/FileRead.h +0 -141
 - data/src/stk/include/FileWvIn.h +0 -195
 - data/src/stk/include/Generator.h +0 -50
 - data/src/stk/include/SineWave.h +0 -159
 - data/src/stk/include/Stk.h +0 -589
 - data/src/stk/include/WvIn.h +0 -46
 - data/src/stk/src/Blit.cpp +0 -78
 - data/src/stk/src/BlitSaw.cpp +0 -91
 - data/src/stk/src/BlitSquare.cpp +0 -95
 - data/src/stk/src/FileRead.cpp +0 -903
 - data/src/stk/src/FileWvIn.cpp +0 -260
 - data/src/stk/src/SineWave.cpp +0 -78
 - data/src/stk/src/Stk.cpp +0 -395
 
    
        data/include/beeps/ruby/beeps.h
    CHANGED
    
    
    
        data/include/beeps/signals.h
    CHANGED
    
    | 
         @@ -8,9 +8,6 @@ 
     | 
|
| 
       8 
8 
     | 
    
         
             
            #include <beeps/defs.h>
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
            namespace stk {class StkFrames;};
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
11 
     | 
    
         
             
            namespace Beeps
         
     | 
| 
       15 
12 
     | 
    
         
             
            {
         
     | 
| 
       16 
13 
     | 
    
         | 
| 
         @@ -24,7 +21,7 @@ namespace Beeps 
     | 
|
| 
       24 
21 
     | 
    
         | 
| 
       25 
22 
     | 
    
         
             
            			~Signals ();
         
     | 
| 
       26 
23 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
            			Signals  
     | 
| 
      
 24 
     | 
    
         
            +
            			Signals dup () const;
         
     | 
| 
       28 
25 
     | 
    
         | 
| 
       29 
26 
     | 
    
         
             
            			float seconds () const;
         
     | 
| 
       30 
27 
     | 
    
         | 
| 
         @@ -32,17 +29,13 @@ namespace Beeps 
     | 
|
| 
       32 
29 
     | 
    
         | 
| 
       33 
30 
     | 
    
         
             
            			uint channels () const;
         
     | 
| 
       34 
31 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
            			      stk::StkFrames* frames ();
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
            			const stk::StkFrames* frames () const;
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
32 
     | 
    
         
             
            			operator bool () const;
         
     | 
| 
       40 
33 
     | 
    
         | 
| 
       41 
34 
     | 
    
         
             
            			bool operator ! () const;
         
     | 
| 
       42 
35 
     | 
    
         | 
| 
       43 
36 
     | 
    
         
             
            			struct Data;
         
     | 
| 
       44 
37 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
            			Xot:: 
     | 
| 
      
 38 
     | 
    
         
            +
            			Xot::PSharedImpl<Data> self;
         
     | 
| 
       46 
39 
     | 
    
         | 
| 
       47 
40 
     | 
    
         
             
            	};// Signals
         
     | 
| 
       48 
41 
     | 
    
         | 
    
        data/include/beeps/sound.h
    CHANGED
    
    
    
        data/lib/beeps/module.rb
    CHANGED
    
    | 
         @@ -6,6 +6,8 @@ module Beeps 
     | 
|
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
              module Module
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
      
 9 
     | 
    
         
            +
                module_function
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
       9 
11 
     | 
    
         
             
                def name ()
         
     | 
| 
       10 
12 
     | 
    
         
             
                  super.split('::')[-2]
         
     | 
| 
       11 
13 
     | 
    
         
             
                end
         
     | 
| 
         @@ -15,10 +17,10 @@ module Beeps 
     | 
|
| 
       15 
17 
     | 
    
         
             
                end
         
     | 
| 
       16 
18 
     | 
    
         | 
| 
       17 
19 
     | 
    
         
             
                def root_dir (path = '')
         
     | 
| 
       18 
     | 
    
         
            -
                  File.expand_path " 
     | 
| 
      
 20 
     | 
    
         
            +
                  File.expand_path "../../#{path}", __dir__
         
     | 
| 
       19 
21 
     | 
    
         
             
                end
         
     | 
| 
       20 
22 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
                def  
     | 
| 
      
 23 
     | 
    
         
            +
                def inc_dir ()
         
     | 
| 
       22 
24 
     | 
    
         
             
                  root_dir 'include'
         
     | 
| 
       23 
25 
     | 
    
         
             
                end
         
     | 
| 
       24 
26 
     | 
    
         | 
| 
         @@ -26,23 +28,6 @@ module Beeps 
     | 
|
| 
       26 
28 
     | 
    
         
             
                  root_dir 'lib'
         
     | 
| 
       27 
29 
     | 
    
         
             
                end
         
     | 
| 
       28 
30 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
                def task_dir ()
         
     | 
| 
       30 
     | 
    
         
            -
                  root_dir 'task'
         
     | 
| 
       31 
     | 
    
         
            -
                end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                def load_tasks (*names)
         
     | 
| 
       34 
     | 
    
         
            -
                  if names.empty?
         
     | 
| 
       35 
     | 
    
         
            -
                    Dir["#{task_dir}/**/*.rake"].each {|path| load path}
         
     | 
| 
       36 
     | 
    
         
            -
                  else
         
     | 
| 
       37 
     | 
    
         
            -
                    names.each do |name|
         
     | 
| 
       38 
     | 
    
         
            -
                      path = "#{task_dir}/#{name}.rake"
         
     | 
| 
       39 
     | 
    
         
            -
                      load path if File.exist? path
         
     | 
| 
       40 
     | 
    
         
            -
                    end
         
     | 
| 
       41 
     | 
    
         
            -
                  end
         
     | 
| 
       42 
     | 
    
         
            -
                end
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                extend self
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
31 
     | 
    
         
             
              end# Module
         
     | 
| 
       47 
32 
     | 
    
         | 
| 
       48 
33 
     | 
    
         | 
    
        data/lib/beeps/processor.rb
    CHANGED
    
    | 
         @@ -2,6 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            require 'xot/setter'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'xot/universal_accessor'
         
     | 
| 
       5 
6 
     | 
    
         
             
            require 'xot/block_util'
         
     | 
| 
       6 
7 
     | 
    
         
             
            require 'beeps/ext'
         
     | 
| 
       7 
8 
     | 
    
         | 
| 
         @@ -9,50 +10,45 @@ require 'beeps/ext' 
     | 
|
| 
       9 
10 
     | 
    
         
             
            module Beeps
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
              class  
     | 
| 
      
 13 
     | 
    
         
            +
              class Processor
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
15 
     | 
    
         
             
                include Xot::Setter
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
                 
     | 
| 
       17 
     | 
    
         
            -
                alias freq  frequency
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                def initialize (opts = {}, &block)
         
     | 
| 
      
 17 
     | 
    
         
            +
                def initialize (options = nil, &block)
         
     | 
| 
       20 
18 
     | 
    
         
             
                  super()
         
     | 
| 
       21 
     | 
    
         
            -
                  set  
     | 
| 
      
 19 
     | 
    
         
            +
                  set options if options
         
     | 
| 
       22 
20 
     | 
    
         
             
                  Xot::BlockUtil.instance_eval_or_block_call self, &block if block
         
     | 
| 
       23 
21 
     | 
    
         
             
                end
         
     | 
| 
       24 
22 
     | 
    
         | 
| 
      
 23 
     | 
    
         
            +
              end# Processor
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              class SineWave
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                alias freq= frequency=
         
     | 
| 
      
 29 
     | 
    
         
            +
                alias freq  frequency
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                universal_accessor :frequency, :freq
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
       25 
33 
     | 
    
         
             
              end# SineWave
         
     | 
| 
       26 
34 
     | 
    
         | 
| 
       27 
35 
     | 
    
         | 
| 
       28 
36 
     | 
    
         
             
              class SquareWave
         
     | 
| 
       29 
37 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
                include Xot::Setter
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
38 
     | 
    
         
             
                alias freq= frequency=
         
     | 
| 
       33 
39 
     | 
    
         
             
                alias freq  frequency
         
     | 
| 
       34 
40 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
                 
     | 
| 
       36 
     | 
    
         
            -
                  super()
         
     | 
| 
       37 
     | 
    
         
            -
                  set opts
         
     | 
| 
       38 
     | 
    
         
            -
                  Xot::BlockUtil.instance_eval_or_block_call self, &block if block
         
     | 
| 
       39 
     | 
    
         
            -
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
                universal_accessor :frequency, :freq
         
     | 
| 
       40 
42 
     | 
    
         | 
| 
       41 
43 
     | 
    
         
             
              end# SquareWave
         
     | 
| 
       42 
44 
     | 
    
         | 
| 
       43 
45 
     | 
    
         | 
| 
       44 
46 
     | 
    
         
             
              class SawtoothWave
         
     | 
| 
       45 
47 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
                include Xot::Setter
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
48 
     | 
    
         
             
                alias freq= frequency=
         
     | 
| 
       49 
49 
     | 
    
         
             
                alias freq  frequency
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
                 
     | 
| 
       52 
     | 
    
         
            -
                  super()
         
     | 
| 
       53 
     | 
    
         
            -
                  set opts
         
     | 
| 
       54 
     | 
    
         
            -
                  Xot::BlockUtil.instance_eval_or_block_call self, &block if block
         
     | 
| 
       55 
     | 
    
         
            -
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
                universal_accessor :frequency, :freq
         
     | 
| 
       56 
52 
     | 
    
         | 
| 
       57 
53 
     | 
    
         
             
              end# SawtoothWave
         
     | 
| 
       58 
54 
     | 
    
         | 
    
        data/src/beeps.cpp
    CHANGED
    
    | 
         @@ -2,90 +2,29 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            #include "beeps/beeps.h"
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            #include <stdlib.h>
         
     | 
| 
       6 
5 
     | 
    
         
             
            #include "Stk.h"
         
     | 
| 
       7 
     | 
    
         
            -
            #include "beeps/openal.h"
         
     | 
| 
       8 
6 
     | 
    
         
             
            #include "beeps/exception.h"
         
     | 
| 
      
 7 
     | 
    
         
            +
            #include "openal.h"
         
     | 
| 
       9 
8 
     | 
    
         | 
| 
       10 
9 
     | 
    
         | 
| 
       11 
10 
     | 
    
         
             
            namespace Beeps
         
     | 
| 
       12 
11 
     | 
    
         
             
            {
         
     | 
| 
       13 
12 
     | 
    
         | 
| 
       14 
13 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            	namespace global
         
     | 
| 
       16 
     | 
    
         
            -
            	{
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
            		static ALCdevice* device   = NULL;
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
            		static ALCcontext* context = NULL;
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
            	}// global
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
            	namespace g = global;
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
            	static void
         
     | 
| 
       29 
     | 
    
         
            -
            	cleanup ()
         
     | 
| 
       30 
     | 
    
         
            -
            	{
         
     | 
| 
       31 
     | 
    
         
            -
            		void cleanup_sources ();
         
     | 
| 
       32 
     | 
    
         
            -
            		cleanup_sources();
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
            		alcMakeContextCurrent(NULL);
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
            		if (g::context)
         
     | 
| 
       37 
     | 
    
         
            -
            		{
         
     | 
| 
       38 
     | 
    
         
            -
            			alcDestroyContext(g::context);
         
     | 
| 
       39 
     | 
    
         
            -
            			g::context = NULL;
         
     | 
| 
       40 
     | 
    
         
            -
            		}
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
            		if (g::device)
         
     | 
| 
       43 
     | 
    
         
            -
            		{
         
     | 
| 
       44 
     | 
    
         
            -
            			alcCloseDevice(g::device);
         
     | 
| 
       45 
     | 
    
         
            -
            			g::device = NULL;
         
     | 
| 
       46 
     | 
    
         
            -
            		}
         
     | 
| 
       47 
     | 
    
         
            -
            	}
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
14 
     | 
    
         
             
            	void
         
     | 
| 
       50 
15 
     | 
    
         
             
            	init ()
         
     | 
| 
       51 
16 
     | 
    
         
             
            	{
         
     | 
| 
       52 
     | 
    
         
            -
            		 
     | 
| 
       53 
     | 
    
         
            -
            			beeps_error(__FILE__, __LINE__, "Beeps::init(): already initialized.");
         
     | 
| 
      
 17 
     | 
    
         
            +
            		OpenAL_init();
         
     | 
| 
       54 
18 
     | 
    
         | 
| 
       55 
19 
     | 
    
         
             
            		stk::Stk::setSampleRate(44100);
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
            		g::device = alcOpenDevice(NULL);
         
     | 
| 
       58 
     | 
    
         
            -
            		if (!g::device) goto FAILED;
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
            		g::context = alcCreateContext(g::device, NULL);
         
     | 
| 
       61 
     | 
    
         
            -
            		if (!g::context) goto FAILED;
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
            		if (!alcMakeContextCurrent(g::context))
         
     | 
| 
       64 
     | 
    
         
            -
            			goto FAILED;
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
            		return;
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
            	FAILED:
         
     | 
| 
       69 
     | 
    
         
            -
            		cleanup();
         
     | 
| 
       70 
     | 
    
         
            -
            		openal_error(__FILE__, __LINE__, "failed to setup OpenAL.");
         
     | 
| 
       71 
20 
     | 
    
         
             
            	}
         
     | 
| 
       72 
21 
     | 
    
         | 
| 
       73 
22 
     | 
    
         
             
            	void
         
     | 
| 
       74 
23 
     | 
    
         
             
            	fin ()
         
     | 
| 
       75 
24 
     | 
    
         
             
            	{
         
     | 
| 
       76 
     | 
    
         
            -
            		 
     | 
| 
       77 
     | 
    
         
            -
            			beeps_error(__FILE__, __LINE__, "Beeps::fin(): not initialized.");
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
            		cleanup();
         
     | 
| 
       80 
     | 
    
         
            -
            	}
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
            	ALCdevice*
         
     | 
| 
       83 
     | 
    
         
            -
            	get_device ()
         
     | 
| 
       84 
     | 
    
         
            -
            	{
         
     | 
| 
       85 
     | 
    
         
            -
            		return g::device;
         
     | 
| 
      
 25 
     | 
    
         
            +
            		OpenAL_fin();
         
     | 
| 
       86 
26 
     | 
    
         
             
            	}
         
     | 
| 
       87 
27 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
28 
     | 
    
         
             
            	uint
         
     | 
| 
       90 
29 
     | 
    
         
             
            	sampling_rate ()
         
     | 
| 
       91 
30 
     | 
    
         
             
            	{
         
     | 
    
        data/src/exception.cpp
    CHANGED
    
    
    
        data/src/openal.cpp
    CHANGED
    
    | 
         @@ -1,221 +1,110 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #include "beeps/openal.h"
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            #include <vector>
         
     | 
| 
       5 
     | 
    
         
            -
            #include <xot/debug.h>
         
     | 
| 
       6 
     | 
    
         
            -
            #include "beeps/defs.h"
         
     | 
| 
       7 
     | 
    
         
            -
            #include "beeps/sound.h"
         
     | 
| 
       8 
     | 
    
         
            -
            #include "beeps/exception.h"
         
     | 
| 
       9 
1 
     | 
    
         
             
            #include "openal.h"
         
     | 
| 
       10 
2 
     | 
    
         | 
| 
       11 
3 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
            # 
     | 
| 
       13 
     | 
    
         
            -
            # 
     | 
| 
       14 
     | 
    
         
            -
            # 
     | 
| 
       15 
     | 
    
         
            -
            #define LOG(...)
         
     | 
| 
       16 
     | 
    
         
            -
            #endif
         
     | 
| 
      
 4 
     | 
    
         
            +
            #include "beeps/exception.h"
         
     | 
| 
      
 5 
     | 
    
         
            +
            #include "beeps/debug.h"
         
     | 
| 
      
 6 
     | 
    
         
            +
            #include "sound.h"
         
     | 
| 
       17 
7 
     | 
    
         | 
| 
       18 
8 
     | 
    
         | 
| 
       19 
9 
     | 
    
         
             
            namespace Beeps
         
     | 
| 
       20 
10 
     | 
    
         
             
            {
         
     | 
| 
       21 
11 
     | 
    
         | 
| 
       22 
12 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
            	 
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
            	ALCenum
         
     | 
| 
       27 
     | 
    
         
            -
            	get_error ()
         
     | 
| 
       28 
     | 
    
         
            -
            	{
         
     | 
| 
       29 
     | 
    
         
            -
            		return alcGetError(get_device());
         
     | 
| 
       30 
     | 
    
         
            -
            	}
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
            	bool
         
     | 
| 
       33 
     | 
    
         
            -
            	no_error ()
         
     | 
| 
      
 13 
     | 
    
         
            +
            	namespace global
         
     | 
| 
       34 
14 
     | 
    
         
             
            	{
         
     | 
| 
       35 
     | 
    
         
            -
            		return get_error() == ALC_NO_ERROR;
         
     | 
| 
       36 
     | 
    
         
            -
            	}
         
     | 
| 
       37 
15 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
            	is_error (ALCenum err)
         
     | 
| 
       40 
     | 
    
         
            -
            	{
         
     | 
| 
       41 
     | 
    
         
            -
            		return get_error() == err;
         
     | 
| 
       42 
     | 
    
         
            -
            	}
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
            	static String
         
     | 
| 
       45 
     | 
    
         
            -
            	get_error_name (ALenum error)
         
     | 
| 
       46 
     | 
    
         
            -
            	{
         
     | 
| 
       47 
     | 
    
         
            -
            		switch (error)
         
     | 
| 
       48 
     | 
    
         
            -
            		{
         
     | 
| 
       49 
     | 
    
         
            -
            			case ALC_NO_ERROR:        return "ALC_NO_ERROR";
         
     | 
| 
       50 
     | 
    
         
            -
            			case ALC_INVALID_DEVICE:  return "ALC_INVALID_DEVICE";
         
     | 
| 
       51 
     | 
    
         
            -
            			case ALC_INVALID_CONTEXT: return "ALC_INVALID_CONTEXT";
         
     | 
| 
       52 
     | 
    
         
            -
            			case ALC_INVALID_ENUM:    return "ALC_INVALID_ENUM";
         
     | 
| 
       53 
     | 
    
         
            -
            			case ALC_OUT_OF_MEMORY:   return "ALC_OUT_OF_MEMORY";
         
     | 
| 
       54 
     | 
    
         
            -
            		}
         
     | 
| 
       55 
     | 
    
         
            -
            		return "UNKNOWN ERROR";
         
     | 
| 
       56 
     | 
    
         
            -
            	}
         
     | 
| 
      
 16 
     | 
    
         
            +
            		static ALCdevice* device   = NULL;
         
     | 
| 
       57 
17 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
            	check_error (const char* file, int line)
         
     | 
| 
       60 
     | 
    
         
            -
            	{
         
     | 
| 
       61 
     | 
    
         
            -
            		ALCenum e = get_error();
         
     | 
| 
       62 
     | 
    
         
            -
            		if (e != ALC_NO_ERROR)
         
     | 
| 
       63 
     | 
    
         
            -
            			openal_error(file, line, "OpenAL error %s", get_error_name(e).c_str());
         
     | 
| 
       64 
     | 
    
         
            -
            	}
         
     | 
| 
      
 18 
     | 
    
         
            +
            		static ALCcontext* context = NULL;
         
     | 
| 
       65 
19 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
            	 
     | 
| 
       67 
     | 
    
         
            -
            	clear_error ()
         
     | 
| 
       68 
     | 
    
         
            -
            	{
         
     | 
| 
       69 
     | 
    
         
            -
            		get_error();
         
     | 
| 
       70 
     | 
    
         
            -
            	}
         
     | 
| 
      
 20 
     | 
    
         
            +
            	}// global
         
     | 
| 
       71 
21 
     | 
    
         | 
| 
       72 
22 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
            	 
     | 
| 
      
 23 
     | 
    
         
            +
            	static void
         
     | 
| 
      
 24 
     | 
    
         
            +
            	cleanup ()
         
     | 
| 
       74 
25 
     | 
    
         
             
            	{
         
     | 
| 
      
 26 
     | 
    
         
            +
            		Sound_cleanup_sources();
         
     | 
| 
       75 
27 
     | 
    
         | 
| 
       76 
     | 
    
         
            -
            		 
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
            		typedef boost::shared_ptr<This> Ptr;
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
            		ALint id;
         
     | 
| 
      
 28 
     | 
    
         
            +
            		alcMakeContextCurrent(NULL);
         
     | 
| 
       81 
29 
     | 
    
         | 
| 
       82 
     | 
    
         
            -
            		 
     | 
| 
      
 30 
     | 
    
         
            +
            		if (global::context)
         
     | 
| 
       83 
31 
     | 
    
         
             
            		{
         
     | 
| 
       84 
     | 
    
         
            -
            			 
     | 
| 
       85 
     | 
    
         
            -
            			 
     | 
| 
       86 
     | 
    
         
            -
            			if (!no_error()) return Ptr();
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
            			This* p = new This;
         
     | 
| 
       89 
     | 
    
         
            -
            			p->id = id_;
         
     | 
| 
       90 
     | 
    
         
            -
            			return Ptr(p);
         
     | 
| 
      
 32 
     | 
    
         
            +
            			alcDestroyContext(global::context);
         
     | 
| 
      
 33 
     | 
    
         
            +
            			global::context = NULL;
         
     | 
| 
       91 
34 
     | 
    
         
             
            		}
         
     | 
| 
       92 
35 
     | 
    
         | 
| 
       93 
     | 
    
         
            -
            		 
     | 
| 
       94 
     | 
    
         
            -
            		:	id(-1)
         
     | 
| 
      
 36 
     | 
    
         
            +
            		if (global::device)
         
     | 
| 
       95 
37 
     | 
    
         
             
            		{
         
     | 
| 
      
 38 
     | 
    
         
            +
            			alcCloseDevice(global::device);
         
     | 
| 
      
 39 
     | 
    
         
            +
            			global::device = NULL;
         
     | 
| 
       96 
40 
     | 
    
         
             
            		}
         
     | 
| 
      
 41 
     | 
    
         
            +
            	}
         
     | 
| 
       97 
42 
     | 
    
         | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
            			 
     | 
| 
       103 
     | 
    
         
            -
            			alDeleteSources(1, &id_);
         
     | 
| 
       104 
     | 
    
         
            -
            			check_error(__FILE__, __LINE__);
         
     | 
| 
       105 
     | 
    
         
            -
            		}
         
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
            		void play (const Sound& sound)
         
     | 
| 
       108 
     | 
    
         
            -
            		{
         
     | 
| 
       109 
     | 
    
         
            -
            			if (!sound)
         
     | 
| 
       110 
     | 
    
         
            -
            				argument_error(__FILE__, __LINE__);
         
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
            			if (!*this)
         
     | 
| 
       113 
     | 
    
         
            -
            				invalid_state_error(__FILE__, __LINE__);
         
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
     | 
    
         
            -
            			alSourcei(id, AL_BUFFER, get_sound_buffer_id(sound));
         
     | 
| 
       116 
     | 
    
         
            -
            			alSourcePlay(id);
         
     | 
| 
       117 
     | 
    
         
            -
            			check_error(__FILE__, __LINE__);
         
     | 
| 
       118 
     | 
    
         
            -
            		}
         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
            		void stop ()
         
     | 
| 
       121 
     | 
    
         
            -
            		{
         
     | 
| 
       122 
     | 
    
         
            -
            			if (!*this)
         
     | 
| 
       123 
     | 
    
         
            -
            				invalid_state_error(__FILE__, __LINE__);
         
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
            			alSourceStop(id);
         
     | 
| 
       126 
     | 
    
         
            -
            			check_error(__FILE__, __LINE__);
         
     | 
| 
       127 
     | 
    
         
            -
            		}
         
     | 
| 
      
 43 
     | 
    
         
            +
            	void
         
     | 
| 
      
 44 
     | 
    
         
            +
            	OpenAL_init ()
         
     | 
| 
      
 45 
     | 
    
         
            +
            	{
         
     | 
| 
      
 46 
     | 
    
         
            +
            		if (global::device || global::context)
         
     | 
| 
      
 47 
     | 
    
         
            +
            			beeps_error(__FILE__, __LINE__, "already initialized.");
         
     | 
| 
       128 
48 
     | 
    
         | 
| 
       129 
     | 
    
         
            -
            		 
     | 
| 
       130 
     | 
    
         
            -
            		 
     | 
| 
       131 
     | 
    
         
            -
            			if (!*this) return false;
         
     | 
| 
      
 49 
     | 
    
         
            +
            		global::device = alcOpenDevice(NULL);
         
     | 
| 
      
 50 
     | 
    
         
            +
            		if (!global::device) goto FAILED;
         
     | 
| 
       132 
51 
     | 
    
         | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
            			check_error(__FILE__, __LINE__);
         
     | 
| 
      
 52 
     | 
    
         
            +
            		global::context = alcCreateContext(global::device, NULL);
         
     | 
| 
      
 53 
     | 
    
         
            +
            		if (!global::context) goto FAILED;
         
     | 
| 
       136 
54 
     | 
    
         | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
      
 55 
     | 
    
         
            +
            		if (!alcMakeContextCurrent(global::context))
         
     | 
| 
      
 56 
     | 
    
         
            +
            			goto FAILED;
         
     | 
| 
       139 
57 
     | 
    
         | 
| 
       140 
     | 
    
         
            -
            		 
     | 
| 
       141 
     | 
    
         
            -
            		{
         
     | 
| 
       142 
     | 
    
         
            -
            			return id >= 0;
         
     | 
| 
       143 
     | 
    
         
            -
            		}
         
     | 
| 
      
 58 
     | 
    
         
            +
            		return;
         
     | 
| 
       144 
59 
     | 
    
         | 
| 
       145 
     | 
    
         
            -
             
     | 
| 
       146 
     | 
    
         
            -
            		 
     | 
| 
       147 
     | 
    
         
            -
             
     | 
| 
       148 
     | 
    
         
            -
             
     | 
| 
       149 
     | 
    
         
            -
             
     | 
| 
       150 
     | 
    
         
            -
            	};// SoundSource
         
     | 
| 
      
 60 
     | 
    
         
            +
            	FAILED:
         
     | 
| 
      
 61 
     | 
    
         
            +
            		cleanup();
         
     | 
| 
      
 62 
     | 
    
         
            +
            		openal_error(__FILE__, __LINE__, "failed to initialize OpenAL.");
         
     | 
| 
      
 63 
     | 
    
         
            +
            	}
         
     | 
| 
       151 
64 
     | 
    
         | 
| 
      
 65 
     | 
    
         
            +
            	void
         
     | 
| 
      
 66 
     | 
    
         
            +
            	OpenAL_fin ()
         
     | 
| 
      
 67 
     | 
    
         
            +
            	{
         
     | 
| 
      
 68 
     | 
    
         
            +
            		if (!global::context)
         
     | 
| 
      
 69 
     | 
    
         
            +
            			beeps_error(__FILE__, __LINE__, "not initialized.");
         
     | 
| 
       152 
70 
     | 
    
         | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
      
 71 
     | 
    
         
            +
            		cleanup();
         
     | 
| 
      
 72 
     | 
    
         
            +
            	}
         
     | 
| 
       154 
73 
     | 
    
         | 
| 
       155 
     | 
    
         
            -
            	 
     | 
| 
      
 74 
     | 
    
         
            +
            	ALCenum
         
     | 
| 
      
 75 
     | 
    
         
            +
            	OpenAL_get_error ()
         
     | 
| 
      
 76 
     | 
    
         
            +
            	{
         
     | 
| 
      
 77 
     | 
    
         
            +
            		assert(global::device);
         
     | 
| 
       156 
78 
     | 
    
         | 
| 
      
 79 
     | 
    
         
            +
            		return alcGetError(global::device);
         
     | 
| 
      
 80 
     | 
    
         
            +
            	}
         
     | 
| 
       157 
81 
     | 
    
         | 
| 
       158 
     | 
    
         
            -
            	 
     | 
| 
       159 
     | 
    
         
            -
            	 
     | 
| 
      
 82 
     | 
    
         
            +
            	bool
         
     | 
| 
      
 83 
     | 
    
         
            +
            	OpenAL_no_error ()
         
     | 
| 
       160 
84 
     | 
    
         
             
            	{
         
     | 
| 
       161 
     | 
    
         
            -
            		 
     | 
| 
      
 85 
     | 
    
         
            +
            		return OpenAL_get_error() == ALC_NO_ERROR;
         
     | 
| 
       162 
86 
     | 
    
         
             
            	}
         
     | 
| 
       163 
87 
     | 
    
         | 
| 
       164 
     | 
    
         
            -
            	static  
     | 
| 
       165 
     | 
    
         
            -
            	 
     | 
| 
      
 88 
     | 
    
         
            +
            	static String
         
     | 
| 
      
 89 
     | 
    
         
            +
            	get_error_name (ALenum error)
         
     | 
| 
       166 
90 
     | 
    
         
             
            	{
         
     | 
| 
       167 
     | 
    
         
            -
            		 
     | 
| 
       168 
     | 
    
         
            -
            		for (SoundSourceList::iterator it = sources.begin(); it != sources.end(); ++it)
         
     | 
| 
       169 
     | 
    
         
            -
            		{
         
     | 
| 
       170 
     | 
    
         
            -
            			const SoundSource::Ptr& p = *it;
         
     | 
| 
       171 
     | 
    
         
            -
            			if (p && *p && !p->is_playing())
         
     | 
| 
       172 
     | 
    
         
            -
            			{
         
     | 
| 
       173 
     | 
    
         
            -
            				source = p;
         
     | 
| 
       174 
     | 
    
         
            -
            				sources.erase(it);
         
     | 
| 
       175 
     | 
    
         
            -
            				LOG("reuse source");
         
     | 
| 
       176 
     | 
    
         
            -
            				break;
         
     | 
| 
       177 
     | 
    
         
            -
            			}
         
     | 
| 
       178 
     | 
    
         
            -
            		}
         
     | 
| 
       179 
     | 
    
         
            -
             
     | 
| 
       180 
     | 
    
         
            -
            		if (!source)
         
     | 
| 
       181 
     | 
    
         
            -
            		{
         
     | 
| 
       182 
     | 
    
         
            -
            			source = SoundSource::create();
         
     | 
| 
       183 
     | 
    
         
            -
            			LOG("new source");
         
     | 
| 
       184 
     | 
    
         
            -
            		}
         
     | 
| 
       185 
     | 
    
         
            -
             
     | 
| 
       186 
     | 
    
         
            -
            		if (!source)
         
     | 
| 
      
 91 
     | 
    
         
            +
            		switch (error)
         
     | 
| 
       187 
92 
     | 
    
         
             
            		{
         
     | 
| 
       188 
     | 
    
         
            -
            			 
     | 
| 
       189 
     | 
    
         
            -
            			 
     | 
| 
       190 
     | 
    
         
            -
            			 
     | 
| 
       191 
     | 
    
         
            -
            			 
     | 
| 
      
 93 
     | 
    
         
            +
            			case ALC_NO_ERROR:        return "ALC_NO_ERROR";
         
     | 
| 
      
 94 
     | 
    
         
            +
            			case ALC_INVALID_DEVICE:  return "ALC_INVALID_DEVICE";
         
     | 
| 
      
 95 
     | 
    
         
            +
            			case ALC_INVALID_CONTEXT: return "ALC_INVALID_CONTEXT";
         
     | 
| 
      
 96 
     | 
    
         
            +
            			case ALC_INVALID_ENUM:    return "ALC_INVALID_ENUM";
         
     | 
| 
      
 97 
     | 
    
         
            +
            			case ALC_OUT_OF_MEMORY:   return "ALC_OUT_OF_MEMORY";
         
     | 
| 
      
 98 
     | 
    
         
            +
            			default:                  return "UNKNOWN ERROR";
         
     | 
| 
       192 
99 
     | 
    
         
             
            		}
         
     | 
| 
       193 
     | 
    
         
            -
             
     | 
| 
       194 
     | 
    
         
            -
            		if (!source)
         
     | 
| 
       195 
     | 
    
         
            -
            			return NULL;
         
     | 
| 
       196 
     | 
    
         
            -
             
     | 
| 
       197 
     | 
    
         
            -
            		sources.push_back(source);
         
     | 
| 
       198 
     | 
    
         
            -
            		return source.get();
         
     | 
| 
       199 
100 
     | 
    
         
             
            	}
         
     | 
| 
       200 
101 
     | 
    
         | 
| 
       201 
102 
     | 
    
         
             
            	void
         
     | 
| 
       202 
     | 
    
         
            -
            	 
     | 
| 
      
 103 
     | 
    
         
            +
            	OpenAL_check_error (const char* file, int line)
         
     | 
| 
       203 
104 
     | 
    
         
             
            	{
         
     | 
| 
       204 
     | 
    
         
            -
            		 
     | 
| 
       205 
     | 
    
         
            -
             
     | 
| 
       206 
     | 
    
         
            -
             
     | 
| 
       207 
     | 
    
         
            -
            		SoundSource* source = next_source();
         
     | 
| 
       208 
     | 
    
         
            -
            		if (!source || !*source)
         
     | 
| 
       209 
     | 
    
         
            -
            			invalid_state_error(__FILE__, __LINE__);
         
     | 
| 
       210 
     | 
    
         
            -
             
     | 
| 
       211 
     | 
    
         
            -
            		source->play(sound);
         
     | 
| 
       212 
     | 
    
         
            -
             
     | 
| 
       213 
     | 
    
         
            -
            #if 0
         
     | 
| 
       214 
     | 
    
         
            -
            		std::string ox = "";
         
     | 
| 
       215 
     | 
    
         
            -
            		for (size_t i = 0; i < sources.size(); ++i)
         
     | 
| 
       216 
     | 
    
         
            -
            			ox += sources[i]->is_playing() ? 'o' : 'x';
         
     | 
| 
       217 
     | 
    
         
            -
            		LOG("playing with %d sources. (%s)", sources.size(), ox.c_str());
         
     | 
| 
       218 
     | 
    
         
            -
            #endif
         
     | 
| 
      
 105 
     | 
    
         
            +
            		ALCenum e = OpenAL_get_error();
         
     | 
| 
      
 106 
     | 
    
         
            +
            		if (e != ALC_NO_ERROR)
         
     | 
| 
      
 107 
     | 
    
         
            +
            			openal_error(file, line, "OpenAL error %s", get_error_name(e).c_str());
         
     | 
| 
       219 
108 
     | 
    
         
             
            	}
         
     | 
| 
       220 
109 
     | 
    
         | 
| 
       221 
110 
     | 
    
         |