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) {