mirror of
https://github.com/cookiengineer/audacity
synced 2025-07-15 16:17:41 +02:00
68 lines
1.2 KiB
C++
68 lines
1.2 KiB
C++
// -*- mode: c++ -*-
|
|
#ifndef UTILS_H
|
|
#define UTILS_H
|
|
|
|
#include "real.h"
|
|
#include "config.h"
|
|
#include "sbsms.h"
|
|
|
|
namespace _sbsms_ {
|
|
|
|
#define ONEOVERTWOPI 0.15915494309189533576888376337251f
|
|
#define PI 3.1415926535897932384626433832795f
|
|
#define TWOPI 6.28318530717958647692528676655900576f
|
|
|
|
inline void c2even(audio *eo, audio *even, int N)
|
|
{
|
|
int Nover2 = N/2;
|
|
even[0][0] = eo[0][0];
|
|
even[0][1] = 0.0f;
|
|
for(int k=1;k<=Nover2;k++) {
|
|
int Nk = N-k;
|
|
even[k][0] = 0.5f*(eo[k][0] + eo[Nk][0]);
|
|
even[k][1] = 0.5f*(eo[k][1] - eo[Nk][1]);
|
|
}
|
|
}
|
|
|
|
inline void c2odd(audio *eo, audio *odd, int N)
|
|
{
|
|
int Nover2 = N/2;
|
|
odd[0][0] = eo[0][1];
|
|
odd[0][1] = 0.0f;
|
|
for(int k=1;k<=Nover2;k++) {
|
|
int Nk = N-k;
|
|
odd[k][0] = 0.5f*(eo[k][1] + eo[Nk][1]);
|
|
odd[k][1] = 0.5f*(eo[Nk][0] - eo[k][0]);
|
|
}
|
|
}
|
|
|
|
inline float canonPI(float ph)
|
|
{
|
|
ph -= TWOPI * lrintf(ph * ONEOVERTWOPI);
|
|
if(ph < -PI) ph += TWOPI;
|
|
else if(ph >= PI) ph -= TWOPI;
|
|
return ph;
|
|
}
|
|
|
|
inline float canon2PI(float ph)
|
|
{
|
|
ph -= TWOPI * lrintf(ph * ONEOVERTWOPI);
|
|
if(ph < 0.0f) ph += TWOPI;
|
|
if(ph >= TWOPI) ph -= TWOPI;
|
|
return ph;
|
|
}
|
|
|
|
inline float square(float x)
|
|
{
|
|
return x*x;
|
|
}
|
|
|
|
inline float norm2(t_fft x)
|
|
{
|
|
return square(x[0]) + square(x[1]);
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|