これは開発版のドキュメントである. 内容は次のリリースまでに変更される可能性がある. 最新のリリース版は 0.6.x を参照.
ConfigPattern
ConfigPattern は, Pattern バンクの再生パラメータを設定する低レベルコマンド.
ConfigPattern { bank, config, size, loop_behavior,};ConfigPattern( bank=bank, config=config, size=size, loop_behavior=loop_behavior,)new ConfigPattern( bank: bank, config: config, size: size, loopBehavior: loopBehavior);| フィールド | 型 | 説明 |
|---|---|---|
bank |
PatternBank |
対象バンク |
config |
SamplingConfig |
再生サンプリング周波数 |
size |
usize |
バンク内のサンプル数. 静的 Pattern は 1 |
loop_behavior |
LoopBehavior |
再生ループ回数 (Infinite / Finite) |
loop_behavior は, ChangePatternBank で現在と異なるバンクへ切り替えたときのみ作用する.
size = 1 (静的 Pattern) は loop_behavior = Infinite のときのみ有効.
有限ループを使う場合は size を 2 以上にする.
Example
Section titled “Example”ConfigPattern は WritePatternBuffer でバッファを書き込んだ後, ChangePatternBank で再生を切り替える一連の流れの中で使う.
use core::num::NonZeroU16;
use autd3_rs::commands::{ChangePatternBank, ConfigPattern, WritePatternBuffer};use autd3_rs::geometry::{Autd3, Geometry, offset};use autd3_rs::units::{m, mm, s};use autd3_rs::value::{LoopBehavior, PatternBank, SamplingConfig, 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 mut emissions = geometry.pattern_buffer();focus( &geometry, geometry.center() + offset(0.0 * mm, 0.0 * mm, 150.0 * mm), wavelength(340.0 * m / s), &FocusOption::default(), &mut emissions,);
let bank = PatternBank::B0;
let mut builder = client.datagram_builder();builder.push(WritePatternBuffer { bank, index: 0, emissions: &emissions,});builder.push(ConfigPattern { bank, config: SamplingConfig::new(NonZeroU16::MAX), size: 1, 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?;import asyncio
import numpy as np
from autd3 import Client, ClientConfigfrom autd3.commands import ChangePatternBank, ConfigPattern, WritePatternBufferfrom autd3.geometry import Autd3, Geometryfrom autd3.units import m, sfrom autd3.value import LoopBehavior, PatternBank, SamplingConfig, TransitionModefrom autd3_link_nop import Nopfrom autd3_pattern import FocusOption, focus, wavelength
async def main() -> None: geometry = Geometry([Autd3([0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0])]) client = await Client.open(geometry, Nop(), ClientConfig())
emissions = geometry.pattern_buffer() focus( geometry, geometry.center() + np.array([0.0, 0.0, 150.0]), wavelength(340 * m / s), FocusOption(), emissions, )
bank = PatternBank.B0
builder = client.datagram_builder() builder.push( WritePatternBuffer( bank=bank, index=0, emissions=emissions, ) ) builder.push( ConfigPattern( bank=bank, config=SamplingConfig(0xFFFF), size=1, loop_behavior=LoopBehavior.Infinite, ) ) builder.push( ChangePatternBank( bank=bank, transition_mode=TransitionMode.Immediate, ) ) frames = builder.build() for frame in frames: await client.send_checked(frame)
await client.close()
asyncio.run(main())using System.Numerics;using System.Threading.Tasks;using AUTD3;using AUTD3.Link;using Nop = AUTD3.Link.Nop;using static AUTD3.Units;
var geometry = new Geometry(new[] { new Autd3(Vector3.Zero) });var client = await Client.OpenAsync(geometry, new Nop(), new ClientConfig());
var emissions = geometry.PatternBuffer();Pattern.Focus( geometry, geometry.Center + new Vector3(0.0f, 0.0f, 150.0f), Pattern.Wavelength(340.0f * m / s), new FocusOption(), emissions);
var bank = PatternBank.B0;
var builder = client.DatagramBuilder();builder.Push(new WritePatternBuffer( bank: bank, index: 0, emissions: emissions));builder.Push(new ConfigPattern( bank: bank, config: new SamplingConfig(ushort.MaxValue), size: 1, loopBehavior: LoopBehavior.Infinite));builder.Push(new ChangePatternBank( bank: bank, transitionMode: TransitionMode.Immediate));var frames = builder.Build();foreach (var frame in frames){ await client.SendCheckedAsync(frame);}
await client.CloseAsync();