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

WritePatternPhase

WritePatternPhase は, 強度が全振動子・全 Pattern で共通の場合に使える WritePatternBuffer の軽量版.

WritePatternPhase {
bank,
start_index,
depth,
intensity,
patterns,
};
フィールド 型 説明
bank PatternBank 書き込み先バンク
start_index usize バンク内の書き込み開始インデックス
depth PhaseDepth 位相のビット幅 (下記参照)
intensity Intensity 全振動子・全 Pattern に共通の強度
patterns &[Vec<Vec<Phase>>] 書き込む位相の列 (1 個以上 depth.max_count() 個以下)
バリアント 1 フレームあたりの Pattern 数 (max_count()) 説明
Bits8 5 位相を全分解能 (8 bit) で送る (デフォルト)
Bits4 11 位相を上位 4 bit に量子化して送る

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

use autd3_rs::commands::{
ActivatePatternBank, Clear, ConfigPattern, PhaseDepth, Synchronize, WritePatternPhase,
};
use autd3_rs::geometry::{Autd3, Geometry, offset};
use autd3_rs::units::{Hz, m, mm, s};
use autd3_rs::value::{Intensity, LoopBehavior, PatternBank, SamplingConfig, TransitionMode};
use autd3_rs::Client;
use autd3_rs::udp::TransportOption;
use autd3_rs_pattern::{focus, wavelength};
let geometry = Geometry::new(vec![Autd3::default()]);
let option = TransportOption::default();
let mut client = Client::open(&geometry, &option).await?;
client.send(Clear).await?;
client.send(Synchronize).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.phase_buffer();
focus(
&geometry,
geometry.center() + offset(x * mm, 0.0 * mm, 150.0 * mm),
wavelength,
&mut buffer,
);
buffer
})
.collect::<Vec<_>>();
let bank = PatternBank::B0;
client.send(WritePatternPhase {
bank,
start_index: 0,
depth: PhaseDepth::Bits4,
intensity: Intensity::MAX,
patterns: &patterns,
}).await?;
client.send(ConfigPattern {
bank,
config: SamplingConfig::from_freq(1.0 * Hz * patterns.len() as f32)?,
size: patterns.len(),
loop_behavior: LoopBehavior::Infinite,
}).await?;
client.send(ActivatePatternBank {
bank,
transition_mode: TransitionMode::Immediate,
}).await?;