1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-31 16:09:28 +02:00
2010-01-24 09:19:39 +00:00

175 lines
3.8 KiB
C++

#ifndef SUBBAND_H
#define SUBBAND_H
#include "real.h"
#include "buffer.h"
#include "audio.h"
#include "sms.h"
#include <stdio.h>
#include "config.h"
#ifdef MULTITHREADED
#include "pthread.h"
#endif
namespace _sbsms_ {
class subband {
public:
subband(subband *parent, unsigned short M, int channels, int quality, int latency, bool bPreAnalysis, TrackAllocator *ta, PeakAllocator *pa);
~subband();
long write(audio *buf, long n, real a, real ratio);
void process();
long read(audio *buf, real *ratio0, real *ratio1);
long n_readable();
bool isframe_readable();
void writingComplete();
long readFromFile(FILE *fp, real a, real ratio);
long synth();
long getFramesWrittenToFile();
long writeToFile(FILE *fp);
void init();
void reset();
void seek(long framePos);
long getSamplesQueued();
long getFramesQueued();
long getFramesAtFront();
long getFramesAtBack();
long getLastInputFrameSize();
long getFramePos();
void write_(audio *buf, long n, real a, real ratio);
void writeFramePositionsToFile(FILE *fp);
long addInit(bool);
void addTrackPoints();
long markInit(bool, int c);
void markDuplicates(int c);
long assignInit(bool,int c);
long assignTrackPoints(int c);
void startNewTracks(int c);
void advanceTrackPoints(int c);
long synthInit(bool);
void synthTracks();
long readInit(bool);
long writeTracksToFile(FILE *fp);
void readTrackPointsFromFile(FILE *fp);
long writeTrackPointsToFile(FILE *fp);
void stepAddFrame();
void stepMarkFrame(int c);
void stepAssignFrame(int c);
void stepSynthFrame();
void stepReadFrame();
void readSubSamples();
void setA(real a);
void setAMod(real a);
void setAForH(real a);
void setH(real ratio);
void setFrameSize(int inputSize, real a, real ratio);
void setRatio(real ratio);
void setFramesInFile(long frames);
long zeroPad();
long zeroPad_();
long preAnalyze(audio *buf, long n, real a, real ratio);
void preAnalyzeComplete();
FILE *fp;
long getFramesAssigned();
long getFramesMarked();
bool isWriteReady();
bool isAddReady();
bool isMarkReady();
bool isAssignReady();
bool isSynthReady();
#ifdef MULTITHREADED
pthread_mutex_t dataMutex;
pthread_mutex_t bufferMutex;
#endif
long nLatency;
long nLatencyOriginal;
protected:
long read(audio *buf, long n);
void calculateA(long kstart, long kend);
real calculateOnset(grain *g1, grain *g2);
TrackAllocator *ta;
PeakAllocator *pa;
RingBuffer<real> aPreAnalysis;
RingBuffer<real> aMod;
RingBuffer<real> aSynth;
RingBuffer<real> aForH;
RingBuffer<int> inputFrameSize;
RingBuffer<int> outputFrameSize;
RingBuffer<real> frameRatio;
RingBuffer<int> frameBytes;
RingBuffer<real> onset;
grain *gPrev;
real getOnset(long k);
int lastInputFrameSize;
int lastOutputFrameSize;
real samplesQueued;
real lastFrameA;
real lastFrameRatio;
real totalSizef;
bool bPreAnalyze;
int quality;
int channels;
int N;
int h;
unsigned short M;
int s;
int res;
int nGrainsPerFrame;
int resTotal;
long nDropped;
long nToDrop;
long nTrackPointsToAdd;
long nTrackPointsToMark[2];
long nTrackPointsToAssign[2];
long nTrackPointsToAdvance[2];
long nTrackPointsToSynth;
long nTrackPointsMarked[2];
long nTrackPointsAssigned[2];
long nTrackPointsStarted[2];
long nTrackPointsAdvanced[2];
long nTrackPointsSynthed;
long nTrackPointsRead;
long nFramesSkipped;
long nFramesWritten;
long nFramesAdded;
long nFramesMarked[2];
long nFramesAssigned[2];
long nFramesRead;
long nFramesSynthed;
long nFramesInFile;
long nTrackPointsWritten;
bool bWritingComplete;
subband *parent;
subband *sub;
GrainBuf *in0,*in1,*in2;
SampleBuf *usSubOut;
SampleBufBase *outMixer;
sms *smser;
SampleBuf *subIn;
GrainBuf *subOut;
GrainBuf *in;
GrainBuf *inPre;
grain *x1[2];
grain *x2[2];
};
}
#endif