CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

Rust言語でD#を鳴らすプログラム

2023-03-07 21:33:35 | Rust
ではD#を鳴らすプログラムは?

D#の音を生成するには、C#と同様に周波数を計算する式を少し変更する必要があります。例えば、D#の周波数は、C#の周波数に対して、1.0595を再び乗算したものになります。

以下は、D#の音を生成するために、C#の周波数を基に計算したプログラム例です。

extern crate hound; use std::f32::consts::PI; use std::i16; fn main() { // 生成する音のパラメータを設定 let sample_rate = 44100; let duration_ms = 1000; let c_sharp_frequency = 277.18; // C#4 // D#の周波数を計算する let d_sharp_frequency = c_sharp_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 c_sharp_sample = (t * c_sharp_frequency * 2.0 * PI).sin(); let d_sharp_sample = (t * d_sharp_frequency * 2.0 * PI).sin(); let sample = (c_sharp_sample + d_sharp_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(); }

このプログラムは、C#4とD#4の音を合成して、output.wavファイルに保存します。合成した音の周波数比率を調整することで、他のシャープの音を生成することもできます。


最新の画像もっと見る