Add Debian source format file
[wdq2wav.git] / wdq2wav.h
index 0c351640e34a31d016a596c585b30be42db4f072..fceee293df2b9819095020e7dad1be57d33971c5 100644 (file)
--- a/wdq2wav.h
+++ b/wdq2wav.h
@@ -1,9 +1,66 @@
+/*****************************************************************************
+** FILE IDENTIFICATION
+**
+**   Name:          wdq2wav.h
+**   Purpose:       Header file for wdq2wav.cpp
+**   Programmer:    Kevin Rosenberg <kevin@rosenberg.net>
+**   Date Started:  Jan 2003
+**
+**  Copyright (c) 2003 Kevin Rosenberg
+**
+**  $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
+**  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 for more details.
+**
+**  You should have received a copy of the GNU General Public License
+**  along with this program; if not, write to the Free Software
+**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+******************************************************************************/
+
 #include <stdio.h>
+#include <iostream>
+#include <cstdio>
+#include <cstring>
 #include <string>
+#include <sstream>
+#include <ctime>
+#include <fcntl.h>
+#include <math.h>
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <fcntl.h>
+#ifdef _WIN32
+#include <io.h>
+#include <getopt.h>
+#else
 #include <unistd.h>
+#endif
+
+#ifdef __linux__
+#include <endian.h>
+#if __BYTE_ORDER == __BIG_ENDIAN
+#define WORDS_BIG_ENDIAN 1
+#endif
+#endif
+
+extern const char* g_szIdStr;
+extern bool g_quiet;
+extern bool g_verbose;
+extern bool g_debug;
+
+#define MAX_INPUT_STR 256
+
+void error_msg (const char *msg);
+void info_msg (const char *msg);
+void info_msg_sans_newline (const char *msg);
+
+bool wdq2wav (const char* wdq_fname, const int channel, const char *wav_fname, bool play);
 
 class WindaqFile
 {
@@ -12,55 +69,82 @@ public:
   ~WindaqFile ();
   bool ReadHeader();
 
-  std::string m_strFile;
   bool m_valid;
+  std::string m_error;
   int m_fd;
-  unsigned int m_nChannels;
-  unsigned int m_nSamples;
+  bool m_bLegacy_format;
+  bool m_bHires;
+  int m_nMaxChannels;
+  int m_nChannels;
+  unsigned long int m_nSamples;
   double m_sample_rate;
+  std::string m_strFile;
   unsigned int m_sr_denom, m_sr_numer;
-  unsigned int m_nHeader_bytes, m_channel_offset, m_nBytes_channel_header;
+  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;
   double m_min_scaled_data;
+  double m_raw_mean;
 
   WindaqChannel (WindaqFile& wdq, const int channel);
   ~WindaqChannel ();
+  double raw2measured(signed short int raw) const { return (raw * m_slope) + m_intercept; }
 
  private:
   bool read_channel_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;
+  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));
+}