From 9ccb27ac548ef8ff8f23cec5574d6d9fb8494779 Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Wed, 11 Feb 2004 17:06:52 +0000 Subject: [PATCH] r8648: latest updates --- wdq2wav.cpp | 52 ++++++++++++++++++++++++++++++++++++++-------------- wdq2wav.h | 2 +- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/wdq2wav.cpp b/wdq2wav.cpp index 3e5d749..fcc782c 100644 --- a/wdq2wav.cpp +++ b/wdq2wav.cpp @@ -79,8 +79,15 @@ info_msg_sans_newline (const char* msg) const char* fileBasename (const char* filename) { - const char* p = strrchr (filename, '/'); - return (p ? p + 1 : filename); + const char* pslash = strrchr (filename, '/'); + const char* pbackslash = strrchr (filename, '\\'); + const char* p = filename; + if (pbackslash && (! pslash || pbackslash >= pslash)) + p = pbackslash+1; + else if (pslash && (! pbackslash || pslash >= pbackslash)) + p = pslash+1; + + return p; } char * @@ -115,7 +122,7 @@ usage (const char* progname) std::cout << " -m Do not demean the data (don't subtract the mean value from each sample)\n"; std::cout << " -v Verbose mode\n"; std::cout << " -d Debug mode\n"; - std::cout << " -r Print program version\n"; + std::cout << " -r Print program version and exit\n"; std::cout << " -h Print this help message\n"; } @@ -132,6 +139,7 @@ main (int argc, char *argv[]) switch (c) { case 'r': std::cout << "Version " << g_szIdStr << std::endl; + exit(0); break; case 'q': g_quiet = true; @@ -160,6 +168,10 @@ main (int argc, char *argv[]) return (1); } } + + if (g_verbose || g_debug) + std::cout << "Version " << g_szIdStr << std::endl; + argc -= optind; argv += optind; if (argc > 3) { @@ -227,8 +239,15 @@ wdq2wav (const char* wdq_fname, const int channel, const char *wav_fname, bool p } if (! g_quiet || g_verbose || g_debug) { std::ostringstream os1; - os1 << "File " << wdq_fname; + os1 << "File: " << wdq_fname; info_msg (os1.str().c_str()); + std::ostringstream os; + os << "Legacy Format: "; + if (wdq.m_bLegacy_format) + os << "Yes"; + else + os << "No"; + info_msg(os.str().c_str()); std::ostringstream os2; time_t time = wdq.m_time_acq_start; struct tm* tm = gmtime (&time); @@ -368,13 +387,16 @@ WindaqFile::ReadHeader () lseek (0, 0, SEEK_SET); if (! read_int2 (m_fd, tmp2)) return false; - m_format = (tmp2 & 0xFF00) >> 8; - printf ("format=%d\n",m_format); - printf ("tmp2=%4x\n", tmp2); - m_nChannels = tmp2 & 0x1f; + m_sr_denom = (tmp2 & 0x7fff) >> 5; m_sr_numer = (tmp2 & 0x8000) << 1; - + short unsigned int byte1 = (tmp2 & 0xFF00) >> 8; + short unsigned int byte2 = tmp2 & 0xFF; + if (byte1 == 0 || byte1 == 1) { + m_bLegacy_format = false; + } else { + m_bLegacy_format = true; + } if (! read_int2 (m_fd, tmp2)) return false; @@ -389,7 +411,10 @@ WindaqFile::ReadHeader () return false; m_nMaxChannels = (m_nHeader_bytes - 112) / 36; - printf ("m_nMaxChannels = %d\n", m_nMaxChannels); + if (m_nMaxChannels >= 144) + m_nChannels = byte2 & 0xFF; + else + m_nChannels = byte2 & 0x1F; if (! read_int4 (m_fd, m_nData_bytes)) return false; @@ -399,12 +424,11 @@ WindaqFile::ReadHeader () lseek (m_fd, 28, SEEK_SET); if (! read_float8 (m_fd, m_time_between_channel_samples)) return false; - printf ("time_between_channel_samples=%lf\n", m_time_between_channel_samples); - if (m_format == 0 || m_format == 1) - m_sample_rate = (double) m_nChannels / m_time_between_channel_samples; + if (m_bLegacy_format) + m_sample_rate = (double) m_sr_numer / (double) (m_sr_denom * m_nChannels); else - m_sample_rate = (double) m_sr_numer / (double) (m_sr_denom * m_nChannels); + m_sample_rate = (double) m_nChannels / m_time_between_channel_samples; lseek (m_fd, 36, SEEK_SET); if (! read_int4 (m_fd, m_time_acq_start)) diff --git a/wdq2wav.h b/wdq2wav.h index 688ddc6..a5076c0 100644 --- a/wdq2wav.h +++ b/wdq2wav.h @@ -72,7 +72,7 @@ public: bool m_valid; std::string m_error; int m_fd; - int m_format; + bool m_bLegacy_format; int m_nMaxChannels; int m_nChannels; unsigned long int m_nSamples; -- 2.34.1