mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-07 03:50:11 +02:00
Fix speaker arrangement bitsets
The sizes were wrong, and Blue Cat Audio's VST3 plugins seem to use the upper bits to store the channel configuration, which thus got read out incorrectly.
This commit is contained in:
+13
-10
@@ -915,9 +915,10 @@ bool Vst3Logger::log_request(
|
|||||||
if (!first) {
|
if (!first) {
|
||||||
message << ", ";
|
message << ", ";
|
||||||
}
|
}
|
||||||
message << "SpeakerArrangement: 0b"
|
message
|
||||||
<< std::bitset<sizeof(Steinberg::Vst::SpeakerArrangement)>(
|
<< "SpeakerArrangement: 0b"
|
||||||
arrangement);
|
<< std::bitset<sizeof(Steinberg::Vst::SpeakerArrangement) * 8>(
|
||||||
|
arrangement);
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -927,9 +928,10 @@ bool Vst3Logger::log_request(
|
|||||||
if (!first) {
|
if (!first) {
|
||||||
message << ", ";
|
message << ", ";
|
||||||
}
|
}
|
||||||
message << "SpeakerArrangement: 0b"
|
message
|
||||||
<< std::bitset<sizeof(Steinberg::Vst::SpeakerArrangement)>(
|
<< "SpeakerArrangement: 0b"
|
||||||
arrangement);
|
<< std::bitset<sizeof(Steinberg::Vst::SpeakerArrangement) * 8>(
|
||||||
|
arrangement);
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1778,10 +1780,11 @@ void Vst3Logger::log_response(
|
|||||||
log_response_base(is_host_vst, [&](auto& message) {
|
log_response_base(is_host_vst, [&](auto& message) {
|
||||||
message << response.result.string();
|
message << response.result.string();
|
||||||
if (response.result == Steinberg::kResultOk) {
|
if (response.result == Steinberg::kResultOk) {
|
||||||
message << ", <SpeakerArrangement: 0b"
|
message
|
||||||
<< std::bitset<sizeof(Steinberg::Vst::SpeakerArrangement)>(
|
<< ", <SpeakerArrangement: 0b"
|
||||||
response.arr)
|
<< std::bitset<sizeof(Steinberg::Vst::SpeakerArrangement) * 8>(
|
||||||
<< ">";
|
response.arr)
|
||||||
|
<< ">";
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,8 @@
|
|||||||
* `IComponent` pointer into an `IPluginBase` smart pointer. This way we can
|
* `IComponent` pointer into an `IPluginBase` smart pointer. This way we can
|
||||||
* keep the rest of yabridge's design in tact.
|
* keep the rest of yabridge's design in tact.
|
||||||
*/
|
*/
|
||||||
|
using std::endl;
|
||||||
|
|
||||||
Steinberg::FUnknownPtr<Steinberg::IPluginBase> hack_init_plugin_base(
|
Steinberg::FUnknownPtr<Steinberg::IPluginBase> hack_init_plugin_base(
|
||||||
Steinberg::IPtr<Steinberg::FUnknown> object,
|
Steinberg::IPtr<Steinberg::FUnknown> object,
|
||||||
Steinberg::IPtr<Steinberg::Vst::IComponent> component);
|
Steinberg::IPtr<Steinberg::Vst::IComponent> component);
|
||||||
@@ -1174,12 +1176,20 @@ AudioShmBuffer::Config Vst3Bridge::setup_shared_audio_buffers(
|
|||||||
audio_processor->getBusArrangement(direction, bus,
|
audio_processor->getBusArrangement(direction, bus,
|
||||||
speaker_arrangement);
|
speaker_arrangement);
|
||||||
|
|
||||||
|
std::cout << speaker_arrangement << std::endl;
|
||||||
|
std::cout
|
||||||
|
<< std::bitset<sizeof(Steinberg::Vst::SpeakerArrangement) * 8>(
|
||||||
|
speaker_arrangement)
|
||||||
|
<< endl;
|
||||||
|
|
||||||
const size_t num_channels =
|
const size_t num_channels =
|
||||||
std::bitset<sizeof(Steinberg::Vst::SpeakerArrangement)>(
|
std::bitset<sizeof(Steinberg::Vst::SpeakerArrangement) * 8>(
|
||||||
speaker_arrangement)
|
speaker_arrangement)
|
||||||
.count();
|
.count();
|
||||||
bus_offsets[bus].resize(num_channels);
|
bus_offsets[bus].resize(num_channels);
|
||||||
|
|
||||||
|
std::cout << num_channels << " channels" << std::endl;
|
||||||
|
|
||||||
for (size_t channel = 0; channel < num_channels; channel++) {
|
for (size_t channel = 0; channel < num_channels; channel++) {
|
||||||
bus_offsets[bus][channel] = current_offset;
|
bus_offsets[bus][channel] = current_offset;
|
||||||
current_offset += setup.maxSamplesPerBlock;
|
current_offset += setup.maxSamplesPerBlock;
|
||||||
|
|||||||
Reference in New Issue
Block a user