CyberChaos(さいばかおす)

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

Rust言語でドのシャープの音を鳴らすプログラム

2023-03-07 21:26:52 | Rust
ちなみにシャープの音を鳴らすプログラムはどう書けばいいの?

シャープの音を生成するには、周波数を計算する式を少し変更する必要があります。例えば、C#の周波数は、Cの周波数に対して、1.0595を乗算したものになります。

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

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

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

BingのAIチャットの回答は・・・

Houndライブラリを使用して、Rust言語でC#の音を鳴らすプログラムの例は次のとおりです。

extern crate hound;

use std::f32::consts::PI;
use std::i16;

fn main() {
    let sample_rate = 44100;
    let frequency = 440.0;
    let amplitude = i16::MAX as f32;
    let duration = 1.0;

    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("sine.wav", spec).unwrap();
    for t in (0..(sample_rate as f32 * duration) as usize).map(|x| x as f32 / sample_rate as f32) {
        let sample = (t * frequency * 2.0 * PI).sin();
        let amplitude_sample = (sample * amplitude) as i16;
        writer.write_sample(amplitude_sample).unwrap();
    }
}

このプログラムは、指定された周波数(この場合は440Hz)と振幅でサイン波を生成し、それをWAVファイルに書き込みます。このWAVファイルを再生することで、C#の音が鳴ります。



最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。