00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef OSDL_AUDIO_H_
00028 #define OSDL_AUDIO_H_
00029
00030
00031 #include "OSDLAudioCommon.h"
00032 #include "OSDLMusic.h"
00033
00034 #include "Ceylan.h"
00035
00036 #include <string>
00037 #include <vector>
00038
00039
00040
00041
00042 namespace OSDL
00043 {
00044
00045
00046
00047
00048 class CommonModule ;
00049
00050
00051
00052 namespace Audio
00053 {
00054
00055
00056
00057
00058 class AudioChannel ;
00059
00060
00061
00068 std::string sampleFormatToString( SampleFormat format ) ;
00069
00070
00071
00078 std::string channelFormatToString( ChannelFormat format ) ;
00079
00080
00081
00082
00093 class OSDL_DLL AudioModule: public Ceylan::Module
00094 {
00095
00096
00097
00098
00099 friend class OSDL::CommonModule ;
00100
00101
00102
00118 OSDL_DLL friend AudioModule & getExistingAudioModule() ;
00119
00120
00121
00122 public:
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00135 static const SampleFormat Uint8SampleFormat ;
00136
00137
00139 static const SampleFormat Sint8SampleFormat ;
00140
00141
00142
00144 static const SampleFormat LittleUint16SampleFormat ;
00145
00146
00148 static const SampleFormat LittleSint16SampleFormat ;
00149
00150
00151
00153 static const SampleFormat BigUint16SampleFormat ;
00154
00155
00157 static const SampleFormat BigSint16SampleFormat ;
00158
00159
00160
00162 static const SampleFormat NativeUint16SampleFormat ;
00163
00164
00166 static const SampleFormat NativeSint16SampleFormat ;
00167
00168
00169
00171 static const SampleFormat IMAADPCMSampleFormat ;
00172
00173
00174
00175
00176
00177
00178
00179
00180
00182 static const ChannelFormat Mono ;
00183
00184
00186 static const ChannelFormat Stereo ;
00187
00188
00189
00191 static const Volume MinVolume ;
00192
00193
00195 static const Volume MaxVolume ;
00196
00197
00198
00200 typedef Ceylan::Uint16 ChannelNumber ;
00201
00202
00203
00255 virtual void setMode(
00256 Ceylan::Maths::Hertz outputFrequency,
00257 SampleFormat outputSampleFormat,
00258 ChannelFormat outputChannel,
00259 ChunkSize outputBufferSize,
00260 ChannelNumber mixingChannelNumber = 16 ) ;
00261
00262
00263
00284 virtual Ceylan::System::Millisecond getObtainedMode(
00285 Ceylan::Maths::Hertz & actualOutputFrequency,
00286 SampleFormat & actualOutputSampleFormat,
00287 ChannelNumber & actualOutputChannelNumber ) ;
00288
00289
00290
00299 virtual void unsetMode() ;
00300
00301
00302
00320 virtual void setPanning(
00321 Ceylan::Maths::Percentage leftPercentage ) ;
00322
00323
00324
00332 virtual void unsetPanning() ;
00333
00334
00335
00350 virtual void setReverseStereo( bool reverse = true ) ;
00351
00352
00353
00372 virtual void setDistanceAttenuation(
00373 ListenerDistance distance ) ;
00374
00375
00376
00385 virtual void unsetDistanceAttenuation() ;
00386
00387
00388
00410 virtual void setPositionAttenuation( ListenerDistance distance,
00411 ListenerAngle angle ) ;
00412
00413
00414
00423 virtual void unsetPositionAttenuation() ;
00424
00425
00426
00427
00428
00429
00430
00431
00432
00439 virtual ChannelNumber getMixingChannelCount() const ;
00440
00441
00442
00452 virtual AudioChannel & getMixingChannelAt( ChannelNumber index )
00453 const ;
00454
00455
00456
00465 virtual void setVolumeForAllMixingChannels( Volume newVolume ) ;
00466
00467
00468
00477 virtual ChannelNumber getPlayingChannelCount() const ;
00478
00479
00480
00489 virtual ChannelNumber getPausedChannelCount() const ;
00490
00491
00492
00502 virtual void pauseAllChannels() ;
00503
00504
00505
00513 virtual void resumeAllChannels() ;
00514
00515
00516
00527 virtual void haltAllChannels() ;
00528
00529
00530
00545 virtual ChannelNumber expireAllChannelsIn(
00546 Ceylan::System::Millisecond expireDuration ) ;
00547
00548
00549
00564 virtual ChannelNumber fadeOutAllChannelsDuring(
00565 Ceylan::System::Millisecond fadeOutDuration ) ;
00566
00567
00568
00569
00570
00571
00572
00573
00574
00583 virtual MusicType getTypeOfCurrentMusic() const ;
00584
00585
00586
00596 virtual bool isMusicPlaying() const ;
00597
00598
00599
00610 virtual bool isMusicPaused() const ;
00611
00612
00613
00624 virtual FadingStatus getMusicFadingStatus() const ;
00625
00626
00627
00637 virtual std::string getDriverName() const ;
00638
00639
00640
00653 virtual const std::string toString(
00654 Ceylan::VerbosityLevels level = Ceylan::high ) const ;
00655
00656
00657
00658
00659
00660
00661
00662
00663
00664
00665
00666
00667
00668
00675 static std::string AudioPathEnvironmentVariable ;
00676
00677
00678
00688 static Ceylan::System::FileLocator AudioFileLocator ;
00689
00690
00691
00701 static std::string DescribeEnvironmentVariables() ;
00702
00703
00704
00716 static bool IsAudioInitialized() ;
00717
00718
00719
00729 static std::string GetDriverName() ;
00730
00731
00732
00734 static const Ceylan::Uint16 DriverNameMaximumLength ;
00735
00736
00737
00738
00739 protected:
00740
00741
00742
00744 bool _mixerInitialized ;
00745
00746
00748 ChunkSize _chunkSize ;
00749
00750
00756 bool _controlMusicManager ;
00757
00758
00759
00760
00761
00762
00763
00764
00765
00766 #pragma warning( push )
00767 #pragma warning( disable: 4251 )
00768
00769
00771 std::vector<AudioChannel *> _inputChannels ;
00772
00773 #pragma warning( pop )
00774
00775
00776
00792 virtual void onMusicPlaybackFinished() ;
00793
00794
00795
00808 static ChannelNumber GetChannelCountFor( ChannelFormat format );
00809
00810
00811
00824 static ChunkSize GetSampleSizeFor( SampleFormat format ) ;
00825
00826
00827
00836 static bool _AudioInitialized ;
00837
00838
00839
00840
00841 private:
00842
00843
00844
00851 static void HandleMusicPlaybackFinishedCallback() ;
00852
00853
00854
00863 AudioModule() ;
00864
00865
00866
00868 virtual ~AudioModule() throw() ;
00869
00870
00871
00880 explicit AudioModule( const AudioModule & source ) ;
00881
00882
00883
00892 AudioModule & operator = ( const AudioModule & source ) ;
00893
00894
00895
00896
00902 static const std::string SDLEnvironmentVariables[] ;
00903
00904
00905
00906 friend class CommonModule ;
00907
00908
00909
00910 } ;
00911
00912
00913
00914
00930 OSDL_DLL AudioModule & getExistingAudioModule() ;
00931
00932
00933
00934 }
00935
00936
00937 }
00938
00939
00940
00941 #endif // OSDL_AUDIO_H_
00942