2 changed files with 1233 additions and 0 deletions
File diff suppressed because it is too large
@ -0,0 +1,157 @@ |
|||
#pragma once |
|||
|
|||
#include "ofConstants.h" |
|||
|
|||
#ifdef OF_SOUND_PLAYER_OPENAL |
|||
#include "ofSoundBaseTypes.h" |
|||
#include "ofThread.h" |
|||
|
|||
|
|||
|
|||
typedef unsigned int ALuint; |
|||
|
|||
#include "kiss_fft.h" |
|||
#include "kiss_fftr.h" |
|||
|
|||
|
|||
|
|||
typedef struct SNDFILE_tag SNDFILE ; |
|||
|
|||
|
|||
#ifdef OF_USING_MPG123 |
|||
typedef struct mpg123_handle_struct mpg123_handle; |
|||
#endif |
|||
|
|||
class ofEventArgs; |
|||
|
|||
// TO DO :
|
|||
// ---------------------------
|
|||
// -fft via fmod, as in the last time...
|
|||
// -close fmod if it's up
|
|||
// -loadSoundForStreaming(char * fileName);
|
|||
// ---------------------------
|
|||
|
|||
// interesting:
|
|||
// http://www.compuphase.com/mp3/mp3loops.htm
|
|||
|
|||
|
|||
// ---------------------------------------------------------------------------- SOUND SYSTEM FMOD
|
|||
|
|||
// --------------------- global functions:
|
|||
void ofFmodSoundStopAll(); |
|||
void ofFmodSoundSetVolume(float vol); |
|||
void ofOpenALSoundUpdate(); // calls FMOD update.
|
|||
float * ofFmodSoundGetSpectrum(int nBands); // max 512...
|
|||
|
|||
|
|||
// --------------------- player functions:
|
|||
class ofOpenALSoundPlayer : public ofBaseSoundPlayer, public ofThread { |
|||
|
|||
public: |
|||
|
|||
ofOpenALSoundPlayer(); |
|||
virtual ~ofOpenALSoundPlayer(); |
|||
|
|||
bool load(const std::filesystem::path& fileName, bool stream = false); |
|||
void unload(); |
|||
void play(); |
|||
void stop(); |
|||
|
|||
void setVolume(float vol); |
|||
void setPan(float vol); // -1 to 1
|
|||
void setSpeed(float spd); |
|||
void setPaused(bool bP); |
|||
void setLoop(bool bLp); |
|||
void setMultiPlay(bool bMp); |
|||
void setPosition(float pct); // 0 = start, 1 = end;
|
|||
void setPositionMS(int ms); |
|||
|
|||
|
|||
float getPosition() const; |
|||
int getPositionMS() const; |
|||
bool isPlaying() const; |
|||
float getSpeed() const; |
|||
float getPan() const; |
|||
float getVolume() const; |
|||
bool isPaused() const; |
|||
bool isLoaded() const; |
|||
|
|||
static void initialize(); |
|||
static void close(); |
|||
|
|||
float * getSpectrum(int bands); |
|||
|
|||
static float * getSystemSpectrum(int bands); |
|||
|
|||
protected: |
|||
void threadedFunction(); |
|||
|
|||
private: |
|||
friend void ofOpenALSoundUpdate(); |
|||
void update(ofEventArgs & args); |
|||
void initFFT(int bands); |
|||
float * getCurrentBufferSum(int size); |
|||
|
|||
static void createWindow(int size); |
|||
static void runWindow(std::vector<float> & signal); |
|||
static void initSystemFFT(int bands); |
|||
|
|||
bool sfReadFile(const std::filesystem::path& path,std::vector<short> & buffer,std::vector<float> & fftAuxBuffer); |
|||
bool sfStream(const std::filesystem::path& path,std::vector<short> & buffer,std::vector<float> & fftAuxBuffer); |
|||
#ifdef OF_USING_MPG123 |
|||
bool mpg123ReadFile(const std::filesystem::path& path,std::vector<short> & buffer,std::vector<float> & fftAuxBuffer); |
|||
bool mpg123Stream(const std::filesystem::path& path,std::vector<short> & buffer,std::vector<float> & fftAuxBuffer); |
|||
#endif |
|||
|
|||
bool readFile(const std::filesystem::path& fileName,std::vector<short> & buffer); |
|||
bool stream(const std::filesystem::path& fileName, std::vector<short> & buffer); |
|||
|
|||
bool isStreaming; |
|||
bool bMultiPlay; |
|||
bool bLoop; |
|||
bool bLoadedOk; |
|||
bool bPaused; |
|||
float pan; // 0 - 1
|
|||
float volume; // 0 - 1
|
|||
float internalFreq; // 44100 ?
|
|||
float speed; // -n to n, 1 = normal, -1 backwards
|
|||
unsigned int length; // in samples;
|
|||
|
|||
static std::vector<float> window; |
|||
static float windowSum; |
|||
|
|||
int channels; |
|||
float duration; //in secs
|
|||
int samplerate; |
|||
std::vector<ALuint> buffers; |
|||
std::vector<ALuint> sources; |
|||
|
|||
// fft structures
|
|||
std::vector<std::vector<float> > fftBuffers; |
|||
kiss_fftr_cfg fftCfg; |
|||
std::vector<float> windowedSignal; |
|||
std::vector<float> bins; |
|||
std::vector<kiss_fft_cpx> cx_out; |
|||
|
|||
|
|||
static kiss_fftr_cfg systemFftCfg; |
|||
static std::vector<float> systemWindowedSignal; |
|||
static std::vector<float> systemBins; |
|||
static std::vector<kiss_fft_cpx> systemCx_out; |
|||
|
|||
SNDFILE* streamf; |
|||
size_t stream_samples_read; |
|||
#ifdef OF_USING_MPG123 |
|||
mpg123_handle * mp3streamf; |
|||
int stream_encoding; |
|||
#endif |
|||
int mp3_buffer_size; |
|||
int stream_subformat; |
|||
double stream_scale; |
|||
std::vector<short> buffer; |
|||
std::vector<float> fftAuxBuffer; |
|||
|
|||
bool stream_end; |
|||
}; |
|||
|
|||
#endif |
Loading…
Reference in new issue