**
** Copyright (c) 2003 Kevin Rosenberg
**
-** $Id: wdq2wav.h,v 1.10 2003/02/12 07:24:32 kevin Exp $
+** $Id$
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
#include <sstream>
#include <ctime>
#include <fcntl.h>
+#include <math.h>
#include <sys/types.h>
#include <sys/stat.h>
#ifdef WIN32
~WindaqFile ();
bool ReadHeader();
- std::string m_strFile;
bool m_valid;
std::string m_error;
int m_fd;
+ bool m_bLegacy_format;
+ bool m_bHires;
+ int m_nMaxChannels;
int m_nChannels;
- unsigned int m_nSamples;
+ unsigned long int m_nSamples;
double m_sample_rate;
+ std::string m_strFile;
unsigned int m_sr_denom, m_sr_numer;
unsigned short int m_nHeader_bytes, m_channel_offset, m_nBytes_channel_header;
unsigned int m_nData_bytes;
unsigned int m_time_acq_start;
unsigned int m_time_acq_stop;
+ double m_time_between_channel_samples;
+
+ bool any_packed_channels();
+ bool is_channel_packed(int iChannel);
};
-class WindaqChannel
+class WindaqChannel
{
public:
- bool m_valid;
- unsigned int m_channel;
- std::string m_units;
+ WindaqFile& r_wdq;
+ signed short int *m_data;
double m_slope;
double m_intercept;
- signed short int *m_data;
- WindaqFile& r_wdq;
+ unsigned int m_channel;
+ bool m_valid;
+ std::string m_units;
signed short int m_min_raw_data;
signed short int m_max_raw_data;
double m_max_scaled_data;
};
-class WavFile
+class WavFile
{
public:
- std::string m_strFile;
- int m_fd;
bool m_valid;
+ signed short int* m_data;
unsigned long int m_nSamples;
+ std::string m_strFile;
+ int m_fd;
double m_rate;
unsigned int m_nChannels;
unsigned int m_nBitsPerSample;
unsigned int m_nBytesPerSample;
- signed short int* m_data;
unsigned long int m_nHeaderBytes;
- unsigned long int m_nDataBytes;
- unsigned long int m_nFileBytes;
+ long int m_nDataBytes;
+ long int m_nFileBytes;
WavFile (WindaqChannel& wdq_channel, const char* fname);
~WavFile ();
bool WriteFile ();
bool Play();
-
+
private:
bool fill_header();
};
+
+template<class T>
+inline T nearest (double x)
+{
+ return (x > 0 ?
+ static_cast<T>(x+0.5) : static_cast<T>(x-0.5));
+}