B♭の音を生成するには、Aの音から半音上げた周波数を計算する必要があります。具体的には、Aの周波数に1.0595を乗算することで、B♭の周波数を計算できます。
以下は、B♭の音を生成するために、Aの周波数を基に計算したプログラム例です。
extern crate hound; use std::f32::consts::PI; use std::i16; fn main() { // 生成する音のパラメータを設定 let sample_rate = 44100; let duration_ms = 1000; let a_frequency = 440.0; // A4 // B♭の周波数を計算する let b_flat_frequency = a_frequency * 1.0595; // 音声データを格納するベクターを作成 let num_samples = (sample_rate as f32 / 1000.0 * duration_ms as f32) as usize; let mut samples: Vec<i16> = Vec::with_capacity(num_samples); // 音声データを生成 for i in 0..num_samples { let t = i as f32 / sample_rate as f32; let a_sample = (t * a_frequency * 2.0 * PI).sin(); let b_flat_sample = (t * b_flat_frequency * 2.0 * PI).sin(); let sample = (a_sample + b_flat_sample) / 2.0; samples.push((sample * i16::MAX as f32) as i16); } // 音声ファイルに書き出す let spec = hound::WavSpec { channels: 1, sample_rate: sample_rate, bits_per_sample: 16, sample_format: hound::SampleFormat::Int, }; let mut writer = hound::WavWriter::create("output.wav", spec).unwrap(); for sample in samples { writer.write_sample(sample).unwrap(); } writer.finalize().unwrap(); }