# HG changeset patch # User Chris Cannam # Date 1536335729 -3600 # Node ID ffec849858a78226b7dee67654554f276cbabf2d # Parent b7042aaecebe0e546baf2262566fe4545f547100 Add sample-range support to CSVFormat diff -r b7042aaecebe -r ffec849858a7 data/fileio/CSVFormat.cpp --- a/data/fileio/CSVFormat.cpp Fri Sep 07 16:13:48 2018 +0100 +++ b/data/fileio/CSVFormat.cpp Fri Sep 07 16:55:29 2018 +0100 @@ -84,6 +84,7 @@ } guessPurposes(); + guessAudioSampleRange(); } void @@ -351,6 +352,55 @@ SVDEBUG << "Estimated units: " << m_timeUnits << endl; } +void +CSVFormat::guessAudioSampleRange() +{ + AudioSampleRange range = SampleRangeSigned1; + + range = SampleRangeSigned1; + bool knownSigned = false; + bool knownNonIntegral = false; + + for (int i = 0; i < m_columnCount; ++i) { + if (!(m_columnQualities[i] & ColumnIntegral)) { + knownNonIntegral = true; + if (range == SampleRangeUnsigned255 || + range == SampleRangeSigned32767) { + range = SampleRangeOther; + } + } + if (m_columnQualities[i] & ColumnLarge) { + if (range == SampleRangeSigned1 || + range == SampleRangeUnsigned255) { + if (knownNonIntegral) { + range = SampleRangeOther; + } else { + range = SampleRangeSigned32767; + } + } + } + if (m_columnQualities[i] & ColumnSigned) { + knownSigned = true; + if (range == SampleRangeUnsigned255) { + range = SampleRangeSigned32767; + } + } + if (!(m_columnQualities[i] & ColumnSmall)) { + if (range == SampleRangeSigned1) { + if (knownNonIntegral) { + range = SampleRangeOther; + } else if (knownSigned) { + range = SampleRangeSigned32767; + } else { + range = SampleRangeUnsigned255; + } + } + } + } + + m_audioSampleRange = range; +} + CSVFormat::ColumnPurpose CSVFormat::getColumnPurpose(int i) { diff -r b7042aaecebe -r ffec849858a7 data/fileio/CSVFormat.h --- a/data/fileio/CSVFormat.h Fri Sep 07 16:13:48 2018 +0100 +++ b/data/fileio/CSVFormat.h Fri Sep 07 16:55:29 2018 +0100 @@ -66,6 +66,13 @@ }; typedef unsigned int ColumnQualities; + enum AudioSampleRange { + SampleRangeSigned1 = 0, // -1 .. 1 + SampleRangeUnsigned255, // 0 .. 255 + SampleRangeSigned32767, // -32768 .. 32767 + SampleRangeOther // Other/unknown: Normalise on load + }; + CSVFormat() : // arbitrary defaults m_modelType(TwoDimensionalModel), m_timingType(ExplicitTiming), @@ -149,6 +156,8 @@ QList m_columnQualities; QList m_columnPurposes; + AudioSampleRange m_audioSampleRange; + QList m_prevValues; bool m_allowQuoting; @@ -159,9 +168,7 @@ void guessSeparator(QString line); void guessQualities(QString line, int lineno); void guessPurposes(); - - void guessFormatFor_Old(QString path); - + void guessAudioSampleRange(); }; #endif