コンテンツにスキップ
これは開発版のドキュメントである. 内容は次のリリースまでに変更される可能性がある. 最新のリリース版は 0.9.x を参照.

Pattern

Pattern は, 各振動子の位相と振幅をデバイスへ送るコマンド. 位相と振幅は別々のバッファで渡す.

Pattern::new(&phases, intensities);
Pattern::with_bank(bank, &phases, intensities);
Pattern {
bank,
phases: &phases,
intensities: intensities.into(),
transition_mode,
};

Pattern::new は書き込み先バンクを PatternBank::B0 とする. 別バンクへ書く場合は Pattern::with_bank(bank, phases, intensities) を使う.

フィールド 型 デフォルト 説明
bank PatternBank PatternBank::B0 書き込み先・再生対象のバンク
phases &[Vec<Phase>] — デバイスごとの位相
intensities PatternIntensity — 振幅 (Intensity の一様値, または &[Vec<Intensity>] のデバイスごとのバッファ)
transition_mode TransitionMode TransitionMode::Immediate バンク切替時の遷移挙動

patternの計算には幾つかのヘルパ関数が用意されている.

Pattern は WritePatternBuffer + ConfigPattern + ChangePatternBank の 3 つと等価であり, これらは 1 フレームに融合して送られる. 以下は Pattern { bank, phases, intensities } と等価な組み合わせである.

transition_mode に TransitionMode::Later を指定した場合は融合せず, WritePatternBuffer + ConfigPattern の 2 フレームに分解して送る (ChangePatternBank を送らない). 詳細は ChangePatternBank の TransitionMode を参照.

WritePatternBuffer::new(bank, 0, phases, intensities);
ConfigPattern {
bank,
config: SamplingConfig::new(NonZeroU16::MAX),
size: 1,
loop_behavior: LoopBehavior::Infinite,
};
ChangePatternBank {
bank,
transition_mode,
};
use autd3_rs::commands::Pattern;
use autd3_rs::geometry::{Autd3, Geometry, offset};
use autd3_rs::units::{m, mm, s};
use autd3_rs::value::Intensity;
use autd3_rs::{Client, ClientConfig};
use autd3_rs_link_nop::Nop;
use autd3_rs_pattern::{focus, wavelength};
let geometry = Geometry::new(vec![Autd3::default()]);
let client = Client::open(&geometry, Nop, ClientConfig::default()).await?;
let mut phases = geometry.phase_buffer();
focus(
&geometry,
geometry.center() + offset(0.0 * mm, 0.0 * mm, 150.0 * mm),
wavelength(340.0 * m / s),
&mut phases,
);
let mut builder = client.datagram_builder();
builder.push(Pattern::new(&phases, Intensity::MAX));
let frames = builder.build()?;
for frame in &frames {
client.send_checked(frame).await?;
}
client.close().await?;