mono vst + dont panic on wrong number of channels
This commit is contained in:
parent
fcf0ecac02
commit
5d61d4466a
1 changed files with 42 additions and 18 deletions
|
@ -129,18 +129,32 @@ impl Plugin for GameboyEmu {
|
|||
|
||||
const VERSION: &'static str = "0.1";
|
||||
|
||||
const AUDIO_IO_LAYOUTS: &'static [AudioIOLayout] = &[AudioIOLayout {
|
||||
main_input_channels: None,
|
||||
main_output_channels: NonZeroU32::new(2),
|
||||
const AUDIO_IO_LAYOUTS: &'static [AudioIOLayout] = &[
|
||||
AudioIOLayout {
|
||||
main_input_channels: None,
|
||||
main_output_channels: NonZeroU32::new(2),
|
||||
|
||||
aux_input_ports: &[],
|
||||
aux_output_ports: &[],
|
||||
aux_input_ports: &[],
|
||||
aux_output_ports: &[],
|
||||
|
||||
// Individual ports and the layout as a whole can be named here. By default these names
|
||||
// are generated as needed. This layout will be called 'Stereo', while the other one is
|
||||
// given the name 'Mono' based no the number of input and output channels.
|
||||
names: PortNames::const_default(),
|
||||
}];
|
||||
// Individual ports and the layout as a whole can be named here. By default these names
|
||||
// are generated as needed. This layout will be called 'Stereo', while the other one is
|
||||
// given the name 'Mono' based no the number of input and output channels.
|
||||
names: PortNames::const_default(),
|
||||
},
|
||||
AudioIOLayout {
|
||||
main_input_channels: None,
|
||||
main_output_channels: NonZeroU32::new(1),
|
||||
|
||||
aux_input_ports: &[],
|
||||
aux_output_ports: &[],
|
||||
|
||||
// Individual ports and the layout as a whole can be named here. By default these names
|
||||
// are generated as needed. This layout will be called 'Stereo', while the other one is
|
||||
// given the name 'Mono' based no the number of input and output channels.
|
||||
names: PortNames::const_default(),
|
||||
},
|
||||
];
|
||||
|
||||
const MIDI_INPUT: MidiConfig = MidiConfig::MidiCCs;
|
||||
const SAMPLE_ACCURATE_AUTOMATION: bool = true;
|
||||
|
@ -228,15 +242,25 @@ impl Plugin for GameboyEmu {
|
|||
}
|
||||
}
|
||||
if buffer.channels() != 2 {
|
||||
panic!()
|
||||
}
|
||||
for sample in buffer.iter_samples() {
|
||||
if vars.rx.is_empty() {
|
||||
vars.emulator_core.run_until_buffer_full();
|
||||
for mut sample in buffer.iter_samples() {
|
||||
if vars.rx.is_empty() {
|
||||
vars.emulator_core.run_until_buffer_full();
|
||||
}
|
||||
if let Some(a) = executor::block_on(vars.rx.pop()) {
|
||||
if let Some(g) = sample.get_mut(0) {
|
||||
*g = (a[0] + a[1]) / 2.;
|
||||
}
|
||||
}
|
||||
}
|
||||
if let Some(a) = executor::block_on(vars.rx.pop()) {
|
||||
for (source, dest) in a.iter().zip(sample) {
|
||||
*dest = *source;
|
||||
} else {
|
||||
for sample in buffer.iter_samples() {
|
||||
if vars.rx.is_empty() {
|
||||
vars.emulator_core.run_until_buffer_full();
|
||||
}
|
||||
if let Some(a) = executor::block_on(vars.rx.pop()) {
|
||||
for (source, dest) in a.iter().zip(sample) {
|
||||
*dest = *source;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue