WriteModulationBuffer
WriteModulationBuffer は, 指定したバンク・オフセットへ AM 波形 (&[u8]) を書き込む低レベルコマンド.
WriteModulationBuffer { bank, offset, data };WriteModulationBuffer(bank=bank, offset=offset, data=data)new WriteModulationBuffer(bank: bank, offset: offset, data: data);| フィールド | 型 | 説明 |
|---|---|---|
bank |
ModulationBank |
書き込み先バンク |
offset |
usize |
バンク内の書き込み開始オフセット |
data |
&[u8] |
AM 波形サンプル列 |
WriteModulationBuffer は 1 フレームに収まる分しか書けない.
上限は WriteModulationBuffer::MAX_LEN で, 超えると送信時にエラーになる.
Example
Section titled “Example”WriteModulationBuffer → ConfigModulation → ActivateModulationBank で AM 波形を再生する例 (高レベルの Modulation と等価).
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));