ショパンの幻想即興曲の最初から20小節目までのプログラムを書いてください
(中途半端でとまってしまった。)
以下は、Rustのmidirとhoundライブラリを使用して、ショパンの幻想即興曲の最初から20小節目までの楽譜を再現する例です。midiデータから各音符の周波数を計算し、それを使用して波形を生成しています。また、楽譜を簡単に指定できるように、
notes
配列に音符の高さ、長さ、タイミングを指定しています。extern crate hound;
extern crate midir;
use std::f32::consts::PI;
use std::i16;
use std::time::Duration;
fn main() {
// midiから取得した各音符の周波数を格納する配列
let mut frequencies = vec![0.0; 128];
// midiから各音符の周波数を計算する
for note in 0..128 {
frequencies[note] = 440.0 * 2.0_f32.powf((note as f32 - 69.0) / 12.0);
}
// 幻想即興曲の楽譜を定義する
let notes = vec![
//小節1
(60, 0.5, 0.0), (63, 0.5, 0.5), (67, 0.5, 1.0), (72, 1.0, 1.5),
//小節2
(60, 0.5, 2.5), (63, 0.5, 3.0), (67, 0.5, 3.5), (72, 1.0, 4.0),
//小節3
(64, 0.25, 5.0), (68, 0.25, 5.25), (71, 0.25, 5.5), (76, 0.5, 5.75), (76, 0.25, 6.25),
(79, 0.25, 6.5), (83, 0.5, 6.75), (83, 0.25, 7.25),
//小節4
(84, 0.25, 7.5), (79, 0.5, 7.75), (79, 0.25, 8.25), (76, 0.25, 8.5),
(71, 0.5, 8.75), (71, 0.25, 9.25), (67, 0.25, 9.5), (63, 0.5, 9.75),
//小節5
(60, 0.25, 10.5), (63, 0.5, 10.75), (60, 0.25, 11.25), (55, 0.25, 11.5),
(52, 0.5, 11.75), (52, 0.25, 12.25), (48, 0.25, 12.5), (44, 0.5, 12.75),