コンテンツにスキップ

ConfigModulation

ConfigModulation は, Modulation バンクの再生パラメータを設定する低レベルコマンド.

ConfigModulation {
bank,
config,
size,
loop_behavior,
};
フィールド 説明
bank ModulationBank 対象バンク
config SamplingConfig 再生サンプリング周波数
size usize サンプル数
loop_behavior LoopBehavior 再生ループ回数 (Infinite / Finite)

size の下限は 2. 定数変調が要るときは同じ値を 2 サンプル並べる.

loop_behavior と遷移の反映タイミングは ChangeModulationBank を参照.

ConfigModulationWriteModulationBuffer で波形を書き込んだ後, ChangeModulationBank で再生を切り替える流れの中で使う.

use autd3_rs::commands::{ChangeModulationBank, ConfigModulation, WriteModulationBuffer};
use autd3_rs::geometry::{Autd3, Geometry};
use autd3_rs::units::Hz;
use autd3_rs::value::{LoopBehavior, ModulationBank, SamplingConfig, TransitionMode};
use autd3_rs::{Client, ClientConfig};
use autd3_rs_link_nop::Nop;
use autd3_rs_modulation::{SineOption, modulation_buffer, sine};
let geometry = Geometry::new(vec![Autd3::default()]);
let client = Client::open(&geometry, Nop, ClientConfig::default()).await?;
let mut data = modulation_buffer();
sine(150 * Hz, &SineOption::default(), &mut data)?;
let bank = ModulationBank::B0;
let mut builder = client.datagram_builder();
builder.push(WriteModulationBuffer {
bank,
offset: 0,
data: &data,
});
builder.push(ConfigModulation {
bank,
config: SamplingConfig::FREQ_4K,
size: data.len(),
loop_behavior: LoopBehavior::Infinite,
});
builder.push(ChangeModulationBank {
bank,
transition_mode: TransitionMode::Immediate,
});
let frames = builder.build()?;
for frame in &frames {
client.send_checked(frame).await?;
}
client.close().await?;