comparison data/fileio/WavFileReader.cpp @ 823:f0558e69a074

Rename Resampling- to DecodingWavFileReader, and use it whenever we have an audio file that is not quickly seekable using libsndfile. Avoids very slow performance when analysing ogg files.
author Chris Cannam
date Wed, 17 Jul 2013 15:40:01 +0100
parents 459235dccff6
children e802e550a1f2
comparison
equal deleted inserted replaced
821:06c64a1c6785 823:f0558e69a074
22 22
23 WavFileReader::WavFileReader(FileSource source, bool fileUpdating) : 23 WavFileReader::WavFileReader(FileSource source, bool fileUpdating) :
24 m_file(0), 24 m_file(0),
25 m_source(source), 25 m_source(source),
26 m_path(source.getLocalFilename()), 26 m_path(source.getLocalFilename()),
27 m_seekable(false),
27 m_buffer(0), 28 m_buffer(0),
28 m_bufsiz(0), 29 m_bufsiz(0),
29 m_lastStart(0), 30 m_lastStart(0),
30 m_lastCount(0), 31 m_lastCount(0),
31 m_updating(fileUpdating) 32 m_updating(fileUpdating)
52 } 53 }
53 return; 54 return;
54 } 55 }
55 56
56 if (m_fileInfo.channels > 0) { 57 if (m_fileInfo.channels > 0) {
58
57 m_frameCount = m_fileInfo.frames; 59 m_frameCount = m_fileInfo.frames;
58 m_channelCount = m_fileInfo.channels; 60 m_channelCount = m_fileInfo.channels;
59 m_sampleRate = m_fileInfo.samplerate; 61 m_sampleRate = m_fileInfo.samplerate;
60 } 62
61 63 m_seekable = (m_fileInfo.seekable != 0);
62 // std::cerr << "WavFileReader: Frame count " << m_frameCount << ", channel count " << m_channelCount << ", sample rate " << m_sampleRate << std::endl; 64
65 // Our m_seekable reports whether a file is rapidly seekable,
66 // so things like Ogg don't qualify. We cautiously report
67 // every file type of "at least" the historical period of Ogg
68 // or FLAC as non-seekable.
69 int type = m_fileInfo.format & SF_FORMAT_TYPEMASK;
70 // std::cerr << "WavFileReader: format type is " << type << " (flac, ogg are " << SF_FORMAT_FLAC << ", " << SF_FORMAT_OGG << ")" << std::endl;
71 if (type >= SF_FORMAT_FLAC || type >= SF_FORMAT_OGG) {
72 // std::cerr << "WavFileReader: Recording as non-seekable" << std::endl;
73 m_seekable = false;
74 }
75 }
76
77 // std::cerr << "WavFileReader: Frame count " << m_frameCount << ", channel count " << m_channelCount << ", sample rate " << m_sampleRate << ", seekable " << m_seekable << std::endl;
63 78
64 } 79 }
65 80
66 WavFileReader::~WavFileReader() 81 WavFileReader::~WavFileReader()
67 { 82 {