Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
131 lines (99 sloc) 3.1 KB
/*
Copyright (C) 2009 Nasca Octavian Paul
Author: Nasca Octavian Paul
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License
as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License (version 2) for more details.
You should have received a copy of the GNU General Public License (version 2)
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef PLAYER_H
#define PLAYER_H
#include <string>
#include "Input/AInputS.h"
#include "Input/VorbisInputS.h"
#include "Input/MP3InputS.h"
#include "ProcessedStretch.h"
#include "Thread.h"
#include "BinauralBeats.h"
#include "Mutex.h"
#include "globals.h"
#define PA_SOUND_BUFFER_SIZE 8192
class Player:public Thread{
public:
Player();
~Player();
void startplay(std::string filename, REALTYPE startpos,REALTYPE rap, int fftsize,FILE_TYPE intype,bool bypass,ProcessParameters *ppar,BinauralBeatsParameters *bbpar);
//startpos is from 0 (start) to 1.0 (end of file)
void stop();
void pause();
void freeze();
void setrap(REALTYPE newrap);
void seek(REALTYPE pos);
void getaudiobuffer(int nsamples, float *out);//data este stereo
enum ModeType{
MODE_PLAY,MODE_STOP,MODE_PREPARING,MODE_PAUSE
};
ModeType getmode();
struct{
float position;//0 is for start, 1 for end
int playing;
int samplerate;
bool eof;
}info;
bool is_freeze(){
return freeze_mode;
};
void set_window_type(FFTWindow window);
void set_volume(REALTYPE vol);
void set_process_parameters(ProcessParameters *ppar,BinauralBeatsParameters *bbpar);
BinauralBeats *binaural_beats;
private:
void run();
InputS *ai;
ProcessedStretch *stretchl,*stretchr;
short int *inbuf_i;
int inbufsize;
Mutex taskmutex,bufmutex;
ModeType mode;
enum TaskMode{
TASK_NONE, TASK_START, TASK_STOP,TASK_SEEK,TASK_RAP,TASK_PARAMETERS
};
struct {
TaskMode mode;
REALTYPE startpos;
REALTYPE rap;
int fftsize;
std::string filename;
FILE_TYPE intype;
bool bypass;
ProcessParameters *ppar;
BinauralBeatsParameters *bbpar;
}newtask,task;
struct{
REALTYPE *l,*r;
}inbuf;
struct{
int n;//how many buffers
float **datal,**datar;//array of buffers
int size;//size of one buffer
int computek,outk;//current buffer
int outpos;//the sample position in the current buffer (for out)
int nfresh;//how many buffers are fresh added and need to be played
//nfresh==0 for empty buffers, nfresh==n-1 for full buffers
float *in_position;//the position(for input samples inside the input file) of each buffers
}outbuf;
bool first_in_buf;
void newtaskcheck();
void computesamples();
bool freeze_mode,bypass_mode,paused;
REALTYPE volume;
std::string current_filename;
FFTWindow window_type;
};
#endif