ConfigModulation
ConfigModulation は, Modulation バンクの再生パラメータを設定する低レベルコマンド.
ConfigModulation { bank, config, size, loop_behavior,};ConfigModulation( bank=bank, config=config, size=size, loop_behavior=loop_behavior,)new ConfigModulation( bank: bank, config: config, size: size, loopBehavior: loopBehavior);| フィールド | 型 | 説明 |
|---|---|---|
bank |
ModulationBank |
対象バンク |
config |
SamplingConfig |
再生サンプリング周波数 |
size |
usize |
サンプル数 |
loop_behavior |
LoopBehavior |
再生ループ回数 (Infinite / Finite) |
size の下限は 2.
定数変調が要るときは同じ値を 2 サンプル並べる.
loop_behavior と遷移の反映タイミングは ChangeModulationBank を参照.
Example
Section titled “Example”ConfigModulation は WriteModulationBuffer で波形を書き込んだ後, ChangeModulationBank で再生を切り替える流れの中で使う.
use autd3_rs::commands::{ChangeModulationBank, ConfigModulation, WriteModulationBuffer};use autd3_rs::geometry::{Autd3, Geometry};use autd3_rs::units::Hz;use autd3_rs::value::{LoopBehavior, ModulationBank, SamplingConfig, TransitionMode};use autd3_rs::{Client, ClientConfig};use autd3_rs_link_nop::Nop;use autd3_rs_modulation::{SineOption, modulation_buffer, sine};
let geometry = Geometry::new(vec![Autd3::default()]);let client = Client::open(&geometry, Nop, ClientConfig::default()).await?;
let mut data = modulation_buffer();sine(150 * Hz, &SineOption::default(), &mut data)?;
let bank = ModulationBank::B0;
let mut builder = client.datagram_builder();builder.push(WriteModulationBuffer { bank, offset: 0, data: &data,});builder.push(ConfigModulation { bank, config: SamplingConfig::FREQ_4K, size: data.len(), loop_behavior: LoopBehavior::Infinite,});builder.push(ChangeModulationBank { bank, transition_mode: TransitionMode::Immediate,});let frames = builder.build()?;for frame in &frames { client.send_checked(frame).await?;}
client.close().await?;import asyncio
from autd3 import Client, ClientConfigfrom autd3.commands import ChangeModulationBank, ConfigModulation, WriteModulationBufferfrom autd3.geometry import Autd3, Geometryfrom autd3.units import Hzfrom autd3.value import LoopBehavior, ModulationBank, SamplingConfig, TransitionModefrom autd3_link_nop import Nopfrom autd3_modulation import SineOption, modulation_buffer, sine
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())
data = modulation_buffer() sine(150.0 * Hz, SineOption(), data)
bank = ModulationBank.B0
builder = client.datagram_builder() builder.push( WriteModulationBuffer( bank=bank, offset=0, data=data, ) ) builder.push( ConfigModulation( bank=bank, config=SamplingConfig.FREQ_4K, size=len(data), loop_behavior=LoopBehavior.Infinite, ) ) builder.push( ChangeModulationBank( 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 data = Modulation.ModulationBuffer();Modulation.Sine(150 * Hz, new SineOption(), data);
var bank = ModulationBank.B0;
var builder = client.DatagramBuilder();builder.Push(new WriteModulationBuffer( bank: bank, offset: 0, data: data));builder.Push(new ConfigModulation( bank: bank, config: SamplingConfig.Freq4k, size: (uint)data.Length, loopBehavior: LoopBehavior.Infinite));builder.Push(new ChangeModulationBank( bank: bank, transitionMode: TransitionMode.Immediate));var frames = builder.Build();foreach (var frame in frames){ await client.SendCheckedAsync(frame);}
await client.CloseAsync();