コンテンツにスキップ
これは開発版のドキュメントである. 内容は次のリリースまでに変更される可能性がある. 最新のリリース版は 0.14.x を参照.

Modulation

Modulation は, AM 波形データ (&[u8]) をデバイスへ送るコマンド.

Modulation::new(config, &data);
Modulation::with_bank(bank, config, &data);
Modulation {
bank,
config,
data: &data,
loop_behavior,
transition_mode,
};

Modulation::new は書き込み先バンクを ModulationBank::B0, ループを Infinite, 遷移を Immediate とする. 別バンクへ書く場合は Modulation::with_bank(bank, config, data) を使う. ループ回数や遷移タイミングも変えたい場合は, フィールドを直接指定して構築する.

フィールド 型 デフォルト 説明
bank ModulationBank ModulationBank::B0 書き込み先・再生対象のバンク
config SamplingConfig — 再生サンプリング周波数
data &[u8] — AM 波形サンプル列 (2 サンプル以上)
loop_behavior LoopBehavior LoopBehavior::Infinite 再生ループ回数
transition_mode TransitionMode TransitionMode::Immediate バンク切替時の遷移挙動

config は SamplingConfig で指定する. data は modulation_buffer() で確保したバッファへ書き込む. loop_behavior / transition_mode の挙動は ActivateModulationBank を参照.

modulation の計算には幾つかのヘルパ関数が用意されている.

Modulation は WriteModulationBuffer + ConfigModulation + ActivateModulationBank の 3 つと等価である. 以下は Modulation { bank, config, data, loop_behavior, transition_mode } と等価な組み合わせである

for (i, chunk) in data.chunks(WriteModulationBuffer::MAX_LEN).enumerate() {
WriteModulationBuffer {
bank,
offset: i * WriteModulationBuffer::MAX_LEN,
data: chunk,
};
}
ConfigModulation {
bank,
config,
size: data.len(),
loop_behavior,
};
ActivateModulationBank {
bank,
transition_mode,
};
use autd3_rs::commands::{Clear, Modulation, Synchronize};
use autd3_rs::geometry::{Autd3, Geometry};
use autd3_rs::units::Hz;
use autd3_rs::value::SamplingConfig;
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 config = SamplingConfig::FREQ_4K;
let mut data = modulation_buffer();
sine(150 * Hz, &SineOption::default(), config, &mut data)?;
client.send(Modulation::new(config, &data)).await?;