Mercurial > hg > svapp
comparison audioio/AudioCallbackPlaySource.cpp @ 33:3e0794460c4e
* Ensure consistent ordering of layer text labels
* Fix erroneous SR mismatch warning when adding a wave-file model when
no other wave-file model is present (only models that don't assert any
particular playback samplerate)
author | Chris Cannam |
---|---|
date | Thu, 27 Apr 2006 11:49:34 +0000 |
parents | f38b8abd3540 |
children | f6b15e0b6fde |
comparison
equal
deleted
inserted
replaced
32:42989c2e621b | 33:3e0794460c4e |
---|---|
105 m_lastModelEndFrame = model->getEndFrame(); | 105 m_lastModelEndFrame = model->getEndFrame(); |
106 } | 106 } |
107 | 107 |
108 bool buffersChanged = false, srChanged = false; | 108 bool buffersChanged = false, srChanged = false; |
109 | 109 |
110 if (m_sourceSampleRate == 0) { | |
111 | |
112 m_sourceSampleRate = model->getSampleRate(); | |
113 srChanged = true; | |
114 | |
115 } else if (model->getSampleRate() != m_sourceSampleRate) { | |
116 std::cerr << "AudioCallbackPlaySource::addModel: ERROR: " | |
117 << "New model sample rate does not match" << std::endl | |
118 << "existing model(s) (new " << model->getSampleRate() | |
119 << " vs " << m_sourceSampleRate | |
120 << "), playback will be wrong" | |
121 << std::endl; | |
122 if (dynamic_cast<DenseTimeValueModel *>(model)) { | |
123 emit sampleRateMismatch(model->getSampleRate(), m_sourceSampleRate, | |
124 false); | |
125 } | |
126 } | |
127 | |
128 size_t modelChannels = 1; | 110 size_t modelChannels = 1; |
129 DenseTimeValueModel *dtvm = dynamic_cast<DenseTimeValueModel *>(model); | 111 DenseTimeValueModel *dtvm = dynamic_cast<DenseTimeValueModel *>(model); |
130 if (dtvm) modelChannels = dtvm->getChannelCount(); | 112 if (dtvm) modelChannels = dtvm->getChannelCount(); |
131 if (modelChannels > m_sourceChannelCount) { | 113 if (modelChannels > m_sourceChannelCount) { |
132 m_sourceChannelCount = modelChannels; | 114 m_sourceChannelCount = modelChannels; |
133 } | 115 } |
134 | 116 |
135 std::cerr << "Adding model with " << modelChannels << " channels " << std::endl; | 117 std::cerr << "Adding model with " << modelChannels << " channels " << std::endl; |
118 | |
119 if (m_sourceSampleRate == 0) { | |
120 | |
121 m_sourceSampleRate = model->getSampleRate(); | |
122 srChanged = true; | |
123 | |
124 } else if (model->getSampleRate() != m_sourceSampleRate) { | |
125 | |
126 // If this is a dense time-value model and we have no other, we | |
127 // can just switch to this model's sample rate | |
128 | |
129 if (dtvm) { | |
130 | |
131 bool conflicting = false; | |
132 | |
133 for (std::set<Model *>::const_iterator i = m_models.begin(); | |
134 i != m_models.end(); ++i) { | |
135 if (*i != dtvm && dynamic_cast<DenseTimeValueModel *>(*i)) { | |
136 std::cerr << "AudioCallbackPlaySource::addModel: Conflicting dense time-value model " << *i << " found" << std::endl; | |
137 conflicting = true; | |
138 break; | |
139 } | |
140 } | |
141 | |
142 if (conflicting) { | |
143 | |
144 std::cerr << "AudioCallbackPlaySource::addModel: ERROR: " | |
145 << "New model sample rate does not match" << std::endl | |
146 << "existing model(s) (new " << model->getSampleRate() | |
147 << " vs " << m_sourceSampleRate | |
148 << "), playback will be wrong" | |
149 << std::endl; | |
150 | |
151 emit sampleRateMismatch(model->getSampleRate(), m_sourceSampleRate, | |
152 false); | |
153 } else { | |
154 m_sourceSampleRate = model->getSampleRate(); | |
155 srChanged = true; | |
156 } | |
157 } | |
158 } | |
136 | 159 |
137 if (!m_writeBuffers || (m_writeBuffers->size() < getTargetChannelCount())) { | 160 if (!m_writeBuffers || (m_writeBuffers->size() < getTargetChannelCount())) { |
138 clearRingBuffers(true, getTargetChannelCount()); | 161 clearRingBuffers(true, getTargetChannelCount()); |
139 buffersChanged = true; | 162 buffersChanged = true; |
140 } else { | 163 } else { |