# HG changeset patch # User Chris Cannam # Date 1536247600 -3600 # Node ID 6440ba1ffc86d6a03e2d89a34902ad22db4269ed # Parent fbda05431ce018b085e0a00e71edd4a4ece5192a Sample range diff -r fbda05431ce0 -r 6440ba1ffc86 widgets/CSVAudioFormatDialog.cpp --- a/widgets/CSVAudioFormatDialog.cpp Thu Sep 06 13:58:09 2018 +0100 +++ b/widgets/CSVAudioFormatDialog.cpp Thu Sep 06 16:26:40 2018 +0100 @@ -38,6 +38,7 @@ int maxDisplayCols) : QDialog(parent), m_format(format), + m_sampleRange(RangeSigned1), m_maxDisplayCols(maxDisplayCols), m_fuzzyColumn(-1) { @@ -116,8 +117,7 @@ layout->setColumnStretch(3, 10); layout->setRowStretch(row++, 10); - m_sampleRateLabel = new QLabel(tr("Audio sample rate (Hz):")); - layout->addWidget(m_sampleRateLabel, row, 0); + layout->addWidget(new QLabel(tr("Audio sample rate (Hz):")), row, 0); int sampleRates[] = { 8000, 11025, 12000, 22050, 24000, 32000, @@ -139,6 +139,61 @@ connect(m_sampleRateCombo, SIGNAL(editTextChanged(QString)), this, SLOT(sampleRateChanged(QString))); + m_sampleRange = RangeSigned1; + bool knownSigned = false; + bool knownNonIntegral = false; + + for (int i = 0; i < columns; ++i) { + if (!(format.getColumnQualities()[i] & CSVFormat::ColumnIntegral)) { + knownNonIntegral = true; + if (m_sampleRange == RangeUnsigned255 || + m_sampleRange == RangeSigned32767) { + m_sampleRange = RangeOther; + } + } + if (format.getColumnQualities()[i] & CSVFormat::ColumnLarge) { + if (m_sampleRange == RangeSigned1 || + m_sampleRange == RangeUnsigned255) { + if (knownNonIntegral) { + m_sampleRange = RangeOther; + } else { + m_sampleRange = RangeSigned32767; + } + } + } + if (format.getColumnQualities()[i] & CSVFormat::ColumnSigned) { + knownSigned = true; + if (m_sampleRange == RangeUnsigned255) { + m_sampleRange = RangeSigned32767; + } + } + if (!(format.getColumnQualities()[i] & CSVFormat::ColumnSmall)) { + if (m_sampleRange == RangeSigned1) { + if (knownNonIntegral) { + m_sampleRange = RangeOther; + } else if (knownSigned) { + m_sampleRange = RangeSigned32767; + } else { + m_sampleRange = RangeUnsigned255; + } + } + } + } + + layout->addWidget(new QLabel(tr("Sample values are:")), row, 0); + + m_sampleRangeCombo = new QComboBox; + // NB must be in the same order as the CSVSampleRange enum + m_sampleRangeCombo->addItem(tr("Floating-point in range -1 to 1")); + m_sampleRangeCombo->addItem(tr("8-bit in range 0 to 255")); + m_sampleRangeCombo->addItem(tr("16-bit in range -32768 to 32767")); + m_sampleRangeCombo->addItem(tr("Unknown range: normalise on load")); + m_sampleRangeCombo->setCurrentIndex(int(m_sampleRange)); + + layout->addWidget(m_sampleRangeCombo, row++, 1); + connect(m_sampleRangeCombo, SIGNAL(activated(int)), + this, SLOT(sampleRangeChanged(int))); + QDialogButtonBox *bb = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); layout->addWidget(bb, row++, 0, 1, 4); @@ -160,6 +215,12 @@ return m_format; } +CSVAudioFormatDialog::CSVSampleRange +CSVAudioFormatDialog::getSampleRange() const +{ + return m_sampleRange; +} + void CSVAudioFormatDialog::sampleRateChanged(QString rateString) { @@ -169,6 +230,12 @@ } void +CSVAudioFormatDialog::sampleRangeChanged(int range) +{ + m_sampleRange = (CSVSampleRange) range; +} + +void CSVAudioFormatDialog::columnPurposeChanged(int) { updateFormatFromDialog(); diff -r fbda05431ce0 -r 6440ba1ffc86 widgets/CSVAudioFormatDialog.h --- a/widgets/CSVAudioFormatDialog.h Thu Sep 06 13:58:09 2018 +0100 +++ b/widgets/CSVAudioFormatDialog.h Thu Sep 06 16:26:40 2018 +0100 @@ -34,20 +34,30 @@ int maxDisplayCols = 5); ~CSVAudioFormatDialog(); + enum CSVSampleRange { + RangeSigned1 = 0, // -1 .. 1 + RangeUnsigned255, // 0 .. 255 + RangeSigned32767, // -32768 .. 32767 + RangeOther // Other/unknown: Normalise on load + }; + CSVFormat getFormat() const; + CSVSampleRange getSampleRange() const; protected slots: void sampleRateChanged(QString); + void sampleRangeChanged(int); void columnPurposeChanged(int purpose); void updateFormatFromDialog(); protected: CSVFormat m_format; + CSVSampleRange m_sampleRange; int m_maxDisplayCols; - QLabel *m_sampleRateLabel; QComboBox *m_sampleRateCombo; + QComboBox *m_sampleRangeCombo; QList m_columnPurposeCombos; int m_fuzzyColumn;