コンテンツにスキップ

ConfigFociStm

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

ConfigFociStm {
bank,
config,
size,
num_foci,
sound_speed,
loop_behavior,
};
フィールド 説明
bank PatternBank 対象バンク
config SamplingConfig 再生サンプリング周波数
size usize STM サンプル数
num_foci u8 1 サンプルあたりの焦点数 (ControlPoints<N> の N)
sound_speed Velocity 焦点計算に使う音速
loop_behavior LoopBehavior 再生ループ回数 (Infinite / Finite)

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

size の下限は 2. 単一焦点を静的に出したい場合は STM ではなく Pattern を使う.

ConfigFociStmWriteFociBuffer で焦点列を書き込んだ後, ChangePatternBank で再生を切り替える流れの中で使う.

use autd3_rs::commands::{ChangePatternBank, ConfigFociStm, StmConfig, WriteFociBuffer, circle};
use autd3_rs::geometry::{Autd3, Geometry, Vector3, offset};
use autd3_rs::units::{Hz, m, mm, s};
use autd3_rs::value::{Intensity, LoopBehavior, PatternBank, TransitionMode};
use autd3_rs::{Client, ClientConfig};
use autd3_rs_link_nop::Nop;
let geometry = Geometry::new(vec![Autd3::default()]);
let client = Client::open(&geometry, Nop, ClientConfig::default()).await?;
let center = geometry.center() + offset(0.0 * mm, 0.0 * mm, 150.0 * mm);
let mut points = Vec::new();
circle(
center,
30.0 * mm,
200,
Vector3::z_axis(),
Intensity::MAX,
&mut points,
);
let bank = PatternBank::B0;
let mut builder = client.datagram_builder();
builder.push(WriteFociBuffer {
bank,
index_offset: 0,
points: &points,
});
builder.push(ConfigFociStm {
bank,
config: StmConfig::new(1.0 * Hz).into_sampling_config(points.len()),
size: points.len(),
num_foci: 1,
sound_speed: 340.0 * m / s,
loop_behavior: LoopBehavior::Infinite,
});
builder.push(ChangePatternBank {
bank,
transition_mode: TransitionMode::Immediate,
});
let frames = builder.build()?;
for frame in &frames {
client.send_checked(frame).await?;
}
client.close().await?;