コンテンツにスキップ

WritePatternCompressed

WritePatternCompressed は, WritePatternBuffer の圧縮版. 位相情報のみを送ることで 1 フレームに複数 Pattern を書き込む低レベルコマンド. 強度は最大 (255) で固定される.

WritePatternCompressed {
bank,
index,
format,
patterns,
};
フィールド 説明
bank PatternBank 書き込み先バンク
index usize バンク内の書き込み開始インデックス
format PatternCompression 圧縮形式 (下記参照)
patterns [Option<&[Vec<Emission>]>; 4] 書き込む Pattern 列
バリアント 1 フレームあたりの Pattern 数 説明
PhaseFull 2 位相を全分解能 (8 bit) で送る
PhaseHalf 4 位相を半分解能 (4 bit) で送る

PhaseHalf で 4 枚の Pattern を 1 コマンドに圧縮して書き込み, ConfigPattern + ChangePatternBank で STM として再生する例.

use autd3_rs::commands::{
ChangePatternBank, ConfigPattern, PatternCompression, StmConfig, WritePatternCompressed,
};
use autd3_rs::geometry::{Autd3, Geometry, offset};
use autd3_rs::units::{Hz, m, mm, s};
use autd3_rs::value::{LoopBehavior, PatternBank, TransitionMode};
use autd3_rs::{Client, ClientConfig};
use autd3_rs_link_nop::Nop;
use autd3_rs_pattern::{FocusOption, focus, wavelength};
let geometry = Geometry::new(vec![Autd3::default()]);
let client = Client::open(&geometry, Nop, ClientConfig::default()).await?;
let wavelength = wavelength(340.0 * m / s);
let patterns = [-30.0f32, -10.0, 10.0, 30.0]
.iter()
.map(|&x| {
let mut buffer = geometry.pattern_buffer();
focus(
&geometry,
geometry.center() + offset(x * mm, 0.0 * mm, 150.0 * mm),
wavelength,
&FocusOption::default(),
&mut buffer,
);
buffer
})
.collect::<Vec<_>>();
let bank = PatternBank::B0;
let mut builder = client.datagram_builder();
builder.push(WritePatternCompressed {
bank,
index: 0,
format: PatternCompression::PhaseHalf,
patterns: [
Some(&patterns[0][..]),
Some(&patterns[1][..]),
Some(&patterns[2][..]),
Some(&patterns[3][..]),
],
});
builder.push(ConfigPattern {
bank,
config: StmConfig::new(1.0 * Hz).into_sampling_config(patterns.len()),
size: patterns.len(),
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?;