mirror of
https://github.com/cookiengineer/audacity
synced 2025-08-01 16:39:30 +02:00
144 lines
3.7 KiB
C++
144 lines
3.7 KiB
C++
#ifndef SMS_H
|
|
#define SMS_H
|
|
|
|
#include "track.h"
|
|
#include "grain.h"
|
|
#include "buffer.h"
|
|
#include "peak.h"
|
|
#include "sbsms.h"
|
|
#include "config.h"
|
|
#ifdef MULTITHREADED
|
|
#include "pthread.h"
|
|
#endif
|
|
|
|
#include <list>
|
|
using namespace std;
|
|
|
|
namespace _sbsms_ {
|
|
|
|
class renderer;
|
|
class sms : public SampleBufBase {
|
|
friend class renderer;
|
|
public:
|
|
sms(int N, unsigned short M, unsigned short M_MAX, int res, int latency, real p, real q, real pad, int Nlo, int channels, TrackAllocator *ta, PeakAllocator *pa);
|
|
void reset();
|
|
void readTrackPointsFromFile(FILE *fp);
|
|
int writeTrackPointsToFile(FILE *fp);
|
|
void setH(unsigned short h);
|
|
long addTrackPoints(grain *g0, grain *g1, grain *g2);
|
|
long assignTrackPoints(long offset, sms *hi, sms *lo, int c);
|
|
long startNewTracks(long offset, int c);
|
|
void markDuplicates(long offset, sms *hi, sms *lo, int c);
|
|
bool connectTrackPoints(trackpoint *tp0, trackpoint *tp1, sms *hi, sms *lo, real dtlo, int c);
|
|
bool adoptTrack(track *precursor, sms *lender, trackpoint *tp, real m, real dt, int c);
|
|
void synthTracks(real a, real f0, real f1);
|
|
void advanceTrackPoints(int c);
|
|
long nTrackPoints();
|
|
long read(audio *out, long n);
|
|
long n_readable();
|
|
void advance(long n);
|
|
void zeroPad(long n);
|
|
void addTrack(int c, track *t);
|
|
~sms();
|
|
|
|
|
|
bool bPhaseLock;
|
|
int res;
|
|
int N;
|
|
unsigned short M;
|
|
real m;
|
|
int Nover2;
|
|
RingBuffer<unsigned short> hSynth;
|
|
real h2cum;
|
|
long samplePos;
|
|
TrackPointListBuffer* trackPointListBuffer[2];
|
|
|
|
|
|
#ifdef MULTITHREADED
|
|
pthread_mutex_t dataMutex;
|
|
pthread_mutex_t tplbMutex[2];
|
|
pthread_mutex_t bufferMutex;
|
|
pthread_mutex_t trackMutex[2];
|
|
#endif
|
|
|
|
protected:
|
|
unsigned short encodeReal(real x, real min, real max);
|
|
float decodeReal(unsigned short x, real min, real max);
|
|
unsigned short encodeRealLog(real x);
|
|
float decodeRealLog(unsigned short x);
|
|
bool terminal;
|
|
void markDuplicatesLo(long offset, sms *lo, long offsetlo, int c);
|
|
long assignTrackPoints_(long offset, sms *hi, sms *lo, real dtlo, long offsetlo, int c);
|
|
void deleteTrackPoint(trackpoint *tp);
|
|
void adjustPeaks(list<peak*> &peaks,
|
|
real *mag0,
|
|
real *mag1,
|
|
real *mag2,
|
|
real *dec,
|
|
int peakWidth);
|
|
long assignTrackPoints(long offset, sms *hi, sms *lo, real dtlo, long offsetlo, int c);
|
|
bool contTrack(track *t, trackpoint *tp, int c);
|
|
void extractTrackPoints(grain *g, real *mag0, real *mag1, real *mag2, long currtime, TrackPointListBuffer *tplb, unsigned short h1, int c);
|
|
bool nearestTrackPoint(tplist *tpl, trackpoint *tp0, real m0, real m1, real dt, tplist::iterator *minpos, real *minFx, real maxMerit2, real maxDF2);
|
|
int prune(trackpoint *tp);
|
|
real merit(trackpoint *tp0, trackpoint *tp1, real m0, real m1, real dt, real dMCoeff, real *df, real maxDF2);
|
|
void calcmags(real *mag, grain *g, real q);
|
|
peak *makePeak(real *mag, real *mag2, int k);
|
|
|
|
TrackAllocator *ta;
|
|
PeakAllocator *pa;
|
|
char *pData;
|
|
int datasize;
|
|
int channels;
|
|
real p,q;
|
|
int peakWidth;
|
|
int maxPrunes;
|
|
real peakThresh;
|
|
real startThresh;
|
|
real maxMerit2;
|
|
real maxDF2;
|
|
real dMCoeff;
|
|
real maxMerit2Match;
|
|
real maxDF2Match;
|
|
real dMCoeffMatch;
|
|
int minNpts;
|
|
real maxdBIncr;
|
|
real maxdBIncrStitch;
|
|
real maxFMatch;
|
|
real minFMatch;
|
|
int kStart;
|
|
int kEnd;
|
|
real mNorm;
|
|
real minPeakTopRatio;
|
|
real localFavorRatio;
|
|
real maxDecRatio;
|
|
|
|
list<track*> **trax;
|
|
long currtime;
|
|
long assigntime[2];
|
|
long marktime[2];
|
|
long synthtime;
|
|
|
|
SampleBuf *sines2, *outMixer;
|
|
grain* x0[2];
|
|
grain* x1[2];
|
|
grain* x2[2];
|
|
|
|
void c2evenodd(grain *g, grain *, grain *);
|
|
|
|
real* dec;
|
|
real* dec2;
|
|
real* mag0[2];
|
|
real* mag1[2];
|
|
real* mag2[2];
|
|
real *peak1;
|
|
bool bPeakSet;
|
|
real sqrtmagmax;
|
|
real magmax;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|