CyberChaos(さいばかおす)

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

Rustでラフマニノフピアノ協奏曲第二番一楽章をプログラミング!

2023-03-07 22:41:22 | Rust
Rust言語でhoundライブラリーを使ってラフマニノフピアノ協奏曲第二番一楽章の最初から15小節まで鳴らすプログラムを書いてください

(・・・5小節で死亡www Orz)
以下は、Rustのmidirとhoundライブラリを使用して、ショパンの幻想即興曲の最初から20小節目までの楽譜を再現する例です。midiデータから各音符の周波数を計算し、それを使用して波形を生成しています。また、楽譜を簡単に指定できるように、notes配列に音符の高さ、長さ、タイミングを指定しています。

extern crate hound; 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); } // ラフマニノフのピアノ協奏曲第2番の第1楽章の楽譜を定義する let notes = vec![ // 小節1 (48, 2.0, 0.0), (48, 0.5, 2.0), (50, 0.5, 2.5), (53, 0.5, 3.0), (57, 0.5, 3.5), (60, 0.5, 4.0), (57, 0.5, 4.5), (53, 0.5, 5.0), (50, 0.5, 5.5), (48, 0.5, 6.0), (53, 0.5, 6.5), (57, 0.5, 7.0), // 小節2 (60, 0.5, 7.5), (65, 0.5, 8.0), (72, 0.5, 8.5), (60, 0.5, 9.0), (65, 0.5, 9.5), (72, 0.5, 10.0), // 小節3 (60, 0.5, 10.5), (65, 0.5, 11.0), (72, 0.5, 11.5), (60, 0.5, 12.0), (65, 0.5, 12.5), (72, 0.5, 13.0), // 小節4 (60, 0.5, 13.5), (65, 0.5, 14.0), (72, 0.5, 14.5), (60, 0.5, 15.0), (65, 0.5, 15.5), (72, 0.5, 16.0), // 小節5
2回目
以下は、RustのHoundライブラリと、音楽ファイルを再生するためのCPALライブラリを使用して、ラフマニノフのピアノ協奏曲第2番の1楽章の最初の15小節を再現する例です。楽譜は、ノートの高さ、長さ、開始時刻を含むnotesベクターで指定されています。

extern crate hound; extern crate cpal; use std::f32::consts::PI; use std::i16; use std::time::Duration; fn main() { // ノートの高さ、長さ、開始時刻を格納する配列 let notes = vec![ (60, 0.5, 0.0), (67, 0.5, 0.5), (64, 0.5, 1.0), (67, 0.5, 1.5), (60, 0.5, 2.0), (67, 0.5, 2.5), (64, 0.5, 3.0), (67, 0.5, 3.5), (60, 0.5, 4.0), (64, 0.5, 4.5), (67, 0.5, 5.0), (60, 0.5, 5.5), (64

ダメだこりゃwww

P.S.
参考までに、BingのチャットAIで同じ質問をした場合の回答は・・・

Rust言語のhoundライブラリを使って、ラフマニノフのピアノ協奏曲第二番一楽章を鳴らすプログラムは以下のようになります。

extern crate hound;

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

fn main() {
let spec = hound::WavSpec {
channels: 1,
sample_rate: 44100,
bits_per_sample: 16,
sample_format: hound::SampleFormat::Int,
};
let mut writer = hound::WavWriter::create("sine.wav", spec).unwrap();
for t in (0..44100).map(|x| x as f32 / 44100.0) {
let sample = (t * 440.0 * 2.0 * PI).sin();
let amplitude = i16::MAX as f32;
writer.write_sample((sample * amplitude) as i16).unwrap();
}
}
ただし、このプログラムは440Hzの正弦波を生成するだけであり、実際にラフマニノフのピアノ協奏曲第二番一楽章を鳴らすためには、さらに詳細な音符データと演奏方法が必要です。

結論。ChatGPTの方が良い。


最新の画像もっと見る

コメントを投稿

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