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 波形サンプル列 |
Example
Section titled “Example”WriteModulationBuffer → ConfigModulation → ChangeModulationBank で AM 波形を再生する例 (高レベルの Modulation と等価).
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();