Mercurial > hg > svcore
comparison transform/RealTimePluginTransform.cpp @ 64:4d59dc469b0f
* Ensure plugin parameters for a transform are saved in the .sv file and
restored in case the plugin has to be run again
* Make plugin dialog offer options for mixdown/single-channel use if the
file has more than one channels but the plugin only accepts one
* Fix incorrect samplerate playback for second file loaded if its samplerate
differed from first
* Add Zoom to Fit and Select Visible Range menu options, split out Import
Audio into main model and secondary model options
* Add stubs for cut, copy and paste operations (not implemented yet)
author | Chris Cannam |
---|---|
date | Thu, 30 Mar 2006 13:18:11 +0000 |
parents | ba405e5e69d3 |
children | 7afcfe666910 |
comparison
equal
deleted
inserted
replaced
63:ba405e5e69d3 | 64:4d59dc469b0f |
---|---|
25 | 25 |
26 #include <iostream> | 26 #include <iostream> |
27 | 27 |
28 RealTimePluginTransform::RealTimePluginTransform(Model *inputModel, | 28 RealTimePluginTransform::RealTimePluginTransform(Model *inputModel, |
29 QString pluginId, | 29 QString pluginId, |
30 int channel, | |
30 QString configurationXml, | 31 QString configurationXml, |
31 QString units, | 32 QString units, |
32 int output) : | 33 int output) : |
33 Transform(inputModel), | 34 Transform(inputModel), |
34 m_plugin(0), | 35 m_plugin(0), |
36 m_channel(channel), | |
35 m_outputNo(output) | 37 m_outputNo(output) |
36 { | 38 { |
37 std::cerr << "RealTimePluginTransform::RealTimePluginTransform: plugin " << pluginId.toStdString() << ", output " << output << std::endl; | 39 std::cerr << "RealTimePluginTransform::RealTimePluginTransform: plugin " << pluginId.toStdString() << ", output " << output << std::endl; |
38 | 40 |
39 RealTimePluginFactory *factory = | 41 RealTimePluginFactory *factory = |
103 | 105 |
104 if (m_outputNo >= m_plugin->getControlOutputCount()) return; | 106 if (m_outputNo >= m_plugin->getControlOutputCount()) return; |
105 | 107 |
106 size_t sampleRate = input->getSampleRate(); | 108 size_t sampleRate = input->getSampleRate(); |
107 int channelCount = input->getChannelCount(); | 109 int channelCount = input->getChannelCount(); |
110 if (m_channel != -1) channelCount = 1; | |
111 | |
108 size_t blockSize = m_plugin->getBufferSize(); | 112 size_t blockSize = m_plugin->getBufferSize(); |
109 | 113 |
110 float **buffers = m_plugin->getAudioInputBuffers(); | 114 float **buffers = m_plugin->getAudioInputBuffers(); |
111 | 115 |
112 size_t startFrame = m_input->getStartFrame(); | 116 size_t startFrame = m_input->getStartFrame(); |
125 | 129 |
126 size_t got = 0; | 130 size_t got = 0; |
127 | 131 |
128 if (channelCount == 1) { | 132 if (channelCount == 1) { |
129 got = input->getValues | 133 got = input->getValues |
130 (-1, blockFrame, blockFrame + blockSize, buffers[0]); | 134 (m_channel, blockFrame, blockFrame + blockSize, buffers[0]); |
131 while (got < blockSize) { | 135 while (got < blockSize) { |
132 buffers[0][got++] = 0.0; | 136 buffers[0][got++] = 0.0; |
133 } | 137 } |
134 } else { | 138 } else { |
135 for (size_t ch = 0; ch < channelCount; ++ch) { | 139 for (size_t ch = 0; ch < channelCount; ++ch) { |