ConfigModulation
ConfigModulation is a low-level command that configures the playback parameters of the Modulation bank.
The settings are only written; send ActivateModulationBank to activate them.
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);| Field | Type | Description |
|---|---|---|
bank |
ModulationBank |
Target bank |
config |
SamplingConfig |
Playback sampling frequency |
size |
usize |
Number of samples |
loop_behavior |
LoopBehavior |
Playback loop count (Infinite / Finite) |
The minimum size is 2.
Example
Section titled “Example”use autd3_rs::commands::{ ActivateModulationBank, Clear, ConfigModulation, Synchronize, WriteModulationBuffer,};use autd3_rs::geometry::{Autd3, Geometry};use autd3_rs::units::Hz;use autd3_rs::value::{LoopBehavior, ModulationBank, SamplingConfig, TransitionMode};use autd3_rs::Client;use autd3_rs::udp::TransportOption;use autd3_rs_modulation::{SineOption, modulation_buffer, sine};
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 mut data = modulation_buffer();sine(150 * Hz, &SineOption::default(), SamplingConfig::FREQ_4K, &mut data)?;
let bank = ModulationBank::B0;
client.send(WriteModulationBuffer { bank, offset: 0, data: &data,}).await?;client.send(ConfigModulation { bank, config: SamplingConfig::FREQ_4K, size: data.len(), loop_behavior: LoopBehavior::Infinite,}).await?;client.send(ActivateModulationBank { bank, transition_mode: TransitionMode::Immediate,}).await?;import asyncio
from autd3 import Client, TransportOptionfrom autd3.commands import ActivateModulationBank, Clear, ConfigModulation, Synchronize, WriteModulationBufferfrom autd3.geometry import Autd3, Geometryfrom autd3.units import Hzfrom autd3.value import LoopBehavior, ModulationBank, SamplingConfig, TransitionModefrom autd3_modulation import SineOption, modulation_buffer, sine
async def main() -> None: geometry = Geometry([Autd3()]) with await Client.open(geometry, TransportOption()) as client: await client.send(Clear()) await client.send(Synchronize())
data = modulation_buffer() sine(150 * Hz, SineOption(), SamplingConfig.FREQ_4K, data)
bank = ModulationBank.B0
await client.send( WriteModulationBuffer( bank=bank, offset=0, data=data, ) ) await client.send( ConfigModulation( bank=bank, config=SamplingConfig.FREQ_4K, size=len(data), loop_behavior=LoopBehavior.Infinite, ) ) await client.send( ActivateModulationBank( bank=bank, transition_mode=TransitionMode.Immediate, ) )
asyncio.run(main())using System.Threading.Tasks;using AUTD3;using static AUTD3.Units;
var geometry = new Geometry(new[] { new Autd3() });using var client = await Client.OpenAsync(geometry, new TransportOption());await client.SendAsync(new Clear());await client.SendAsync(new Synchronize());
var data = Modulation.ModulationBuffer();Modulation.Sine(150 * Hz, new SineOption(), SamplingConfig.Freq4k, data);
var bank = ModulationBank.B0;
await client.SendAsync(new WriteModulationBuffer( bank: bank, offset: 0, data: data));await client.SendAsync(new ConfigModulation( bank: bank, config: SamplingConfig.Freq4k, size: (uint)data.Length, loopBehavior: LoopBehavior.Infinite));await client.SendAsync(new ActivateModulationBank( bank: bank, transitionMode: TransitionMode.Immediate));