- m_data = new signed short int [m_nSamples];
-
- double data_offset = -wdq_channel.m_min_scaled_data;
- double data_scale = 0.;
- if (wdq_channel.m_max_scaled_data != wdq_channel.m_min_scaled_data)
- data_scale = 65535. / (wdq_channel.m_max_scaled_data -
- wdq_channel.m_min_scaled_data);
-
- if (g_debug)
- printf ("data_scale: %f, data_offset: %f\n", data_scale, data_offset);
-
+
+ double data_offset = 0, data_scale = 0;
+ if (g_ignore_zero) {
+ data_offset = -wdq_channel.m_min_scaled_data;
+ if (wdq_channel.m_max_scaled_data != wdq_channel.m_min_scaled_data)
+ data_scale = 65535. / (wdq_channel.m_max_scaled_data -
+ wdq_channel.m_min_scaled_data);
+ } else {
+ double max_value = fabs(wdq_channel.m_max_scaled_data);
+ if (fabs (wdq_channel.m_min_scaled_data) > max_value)
+ max_value = fabs (wdq_channel.m_min_scaled_data);
+ if (max_value != 0.)
+ data_scale = 32767. / max_value;
+ }
+
+ if (g_debug) {
+ std::ostringstream os;
+ os << " Wav data_scale: " << data_scale << ", data_offset: " << data_offset;
+ info_msg (os.str().c_str());
+ }
+
+ m_nHeaderBytes = 44;
+ m_nDataBytes = m_nSamples * m_nBytesPerSample * m_nChannels;
+ m_nFileBytes = m_nHeaderBytes + m_nDataBytes;
+
+ unsigned int nHeaderShortInts = m_nHeaderBytes / sizeof(signed short int);
+
+ m_data = new signed short int [m_nSamples + nHeaderShortInts];