Main Page Namespace List Class Hierarchy Compound List File List Namespace Members Compound Members Related Pages
Audio.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef AUDIO_H
00022 #define AUDIO_H
00023
00024 #include <stdio.h>
00025 #include <math.h>
00026 #include <string>
00027 #include "common.h"
00028
00029 namespace OpenVRML {
00030
00031 class Doc;
00032 class MFString;
00033
00034 OPENVRML_SCOPE enum AudioEncoding { AUDIO_LINEAR, AUDIO_ULAW };
00035
00036 class OPENVRML_SCOPE Audio {
00037 Doc * _doc;
00038
00039 AudioEncoding _encoding;
00040 int _channels;
00041 int _bits_per_sample;
00042 int _samples_per_sec;
00043
00044
00045
00046
00047
00048 int _sample_blocksize;
00049
00050 int _num_samples;
00051 unsigned char * _samples;
00052
00053 public:
00054 explicit Audio(const std::string & url, Doc * relative = 0);
00055 ~Audio ();
00056
00057 bool setURL(const std::string & url, Doc * relative = 0);
00058 bool tryURLs(const MFString & urls, Doc * relative = 0);
00059
00060 const char *url() const;
00061
00062 AudioEncoding encoding() const { return _encoding; }
00063 int channels() const { return _channels; }
00064 int bitsPerSample() const { return _bits_per_sample; }
00065 int samplesPerSec() const { return _samples_per_sec; }
00066 int sampleBlockSize() const { return _sample_blocksize; }
00067 int numSamples() const { return _num_samples; }
00068
00069 int numBytes() const { return _num_samples * _sample_blocksize; }
00070 const unsigned char *samples() const { return _samples; }
00071
00072 double duration() const {
00073 if (_samples_per_sec > 0)
00074 return (double)_num_samples/(double)_samples_per_sec;
00075 else
00076 return 0;
00077 }
00078
00079
00080
00081
00082
00083
00084
00085 int getByteIndex(double time_index) const {
00086 if (_num_samples > 0 && _samples_per_sec > 0)
00087 return _sample_blocksize *
00088 (int)(fmod(time_index, duration()) * (double)_samples_per_sec);
00089 else
00090 return -1;
00091 }
00092
00093 private:
00094 bool wavread (FILE *fp);
00095 };
00096 }
00097
00098 #endif // AUDIO_H