CyberChaos(さいばかおす)

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

Rust言語のhoundライブラリー を使って和音を鳴らすプログラムを書いて

2023-03-07 21:21:18 | Rust
ChatGPTへの質問
「Rust言語のhoundライブラリー を使って和音を鳴らすプログラムを書いて」

ChatGPTからの回答
「以下は、Rust言語とhoundライブラリを使用して、指定された周波数の音を生成する基本的なプログラムです。このプログラムを使用して、複数の周波数を合成して和音を鳴らすことができます。
extern crate hound; use std::f32::consts::PI; use std::i16; fn main() { // 生成する音のパラメータを設定 let sample_rate = 44100; let duration_ms = 1000; let frequency_hz = 440.0; // 音声データを格納するベクターを作成 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 sample = (t * frequency_hz * 2.0 * PI).sin(); 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、E、Gの音を合成するプログラムです。
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 let e_frequency = 329.63; // E4 let g_frequency = 392.00; // G4 // 音声データを格納するベクターを作成 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 e_sample = (t * e_frequency * 2.0 * PI).sin(); let g_sample = (t * g_frequency * 2.0 * PI).sin(); let sample」
ホントけぇ?

P.S.
BingチャットAIの回答は・・・

申し訳ありませんが、Houndライブラリーを使用して和音を作成する方法についての具体的な情報は見つかりませんでした。ただし、Houndライブラリーを使用してWAVファイルを作成し、そのファイルを再生することで、和音を鳴らすことができるかもしれません。

全然ダメじゃんwww
どこのバカだ?ChatGPTより優れてるなんて書いた奴は?


PythonをRustに変換するトランスパイラは?

2023-03-05 11:27:53 | Rust

PythonをRustに変換するトランスパイラは?

ChatGPTに訊いてみた。回答は…

PythonをRustに変換するトランスパイラとしては、現在公式にサポートされているものはありません。しかしながら、いくつかのオープンソースプロジェクトがあります。

以下はいくつかのPythonからRustへの変換ツールの例です。

PyO3 (https://github.com/PyO3/pyo3)

PyO3は、PythonとRustを統合するためのフレームワークです。このライブラリを使用すると、RustでPythonのモジュールを記述することができます。また、PythonのコードをRustで再実装することもできます。

RustPython (https://github.com/RustPython/RustPython)

RustPythonは、Pythonの標準ライブラリをRustで実装したものであり、PythonのコードをRustに変換することができます。ただし、完全に互換性があるわけではないため、一部のPythonの機能はサポートされていない場合があります。

これらのツールは、PythonからRustへの変換に役立つかもしれませんが、完全な自動変換は不可能であるため、手動での変換が必要な場合があります。また、Rustの構文や型システムがPythonとは異なるため、変換が容易ではない場合があります。

…だとよ。


Rust のマルチプラットフォーム UI ライブラリ OrbTk の使い方

2023-03-04 15:57:27 | Rust
https://blog1.mammb.com/entry/2019/12/16/090000
Rust のマルチプラットフォーム UI ライブラリ OrbTk の使い方 - A Memorandum https://search.yahoo.co.jp/amp/s/blog1.mammb.com/entry/2019/12/16/090000%3Famp%3D1%26usqp%3Dmq331AQIKAGwASCAAgM%253D
Redox という Rust で書かれた UNIX ライク OS のサブプロジェクトとして開発されている Widget Toolkit
OrbTk の機能としては、
モダンな軽量API クロスプラットフォーム
モジュール化されたクレート
Entity-Component-System
ライブラリ DCES に基づく 柔軟なイベントシステム
包括的なウィジェットライブラリ
カスタムウィジェットのサポート
テーマのサポート
デバッグツールの統合

Rustのコンパイルを高速化するには

2023-02-26 01:28:53 | Rust
実行速度は速いが、実はコンパイル速度は速いとは言えない。(ノーマル仕様では)
コンパイル速度が遅いのならコンパイルしながら実行しているPythonと一緒なんじゃないかと思ったので、「Rust用高速コンパイラ」で検索したら出てきたのがこのサイト
君のRustは20倍遅い - 簡潔なQ

君のRustは20倍遅い - 簡潔なQ

Rustはデフォルトでは本来の力を発揮しない。試しに手頃なベンチマークを3個くらい試したらだいたい20~100倍程度遅かった。 「Rustで ○○ を高速にする方法」が知りたい人は...

簡潔なQ

例えば・・・
Cargoの場合 Cargoでは --release をつけると本来の力を発揮してコンパイルする。 $ cargo build --release $ cargo run --release

だそうだ。
つまり、今まではただ単に
$ cargo run
と入力していたのを
--release
を後ろに付け足すだけでコンパイルが速くなる。
たったのこれだけで、だ。

他にもいろいろあるらしい。




写真は橋本環奈に似ているとのウワサがある、あたろーちゃん。
橋本環奈よりあたろーちゃんの方がかわいいと思った。多芸多才だし。
何よりもこの子頭良さそう。




Rustで音楽 mml文法

2023-02-23 20:34:50 | Rust
【手を動かして考えればよくわかる 高効率言語 Rust 書きかた・作りかた】には書かれていなかったmmlの文法について調べてみた。
半音上げる#はc(ド)~b(シ)のすぐ後ろに#または+と付ければ良い。
半音下げる♭は-を付ければ良い。

音の長さはl(エルの小文字)プラス数字で指定。例えばl4で四分音符、l2で二分音符を表す。
じゃあ16分音符ならl16、32分音符ならl32となる。

テンポはtプラス数字、音量はvプラス数字で表せば良いらしい。

この本の385ページから422ページまでは音を鳴らしたり簡単な音楽を奏でる方法が書いてあった。
一番最初は、440Hzのラの音を3秒間だけ鳴らすというものであり、こちらはコピペで難なくクリアした。
コマンドプロンプトで
cargo new プロジェクト名
と入力してEnterキーを押すと、然るべきディレクトリにプロジェクト名のフォルダが自動で作られるので、
cd そのフォルダ名
と入力してEnterキーを押すと
そのディレクトリに移動できる。
そしてその中のmain.rsというファイルをメモ帳で開いて編集するわけだが、本の通りにプログラムを写経して書いて上書き保存し、cargo runと入力してEnterキーを押すとフォルダの中にwavファイルが出来上がっている。
このwavファイルをクリックすると音楽再生アプリが立ち上がって音が出る、という仕組みだ。

397ページにはカエルの歌とキラキラ星の二曲のサンプルコードが書かれている。

さあ、もうこれだけでほとんどの曲(単音でかつ3連符など複雑なリズムの無い曲)は作れるであろう。

ところで和音や複雑なリズムはどうやって表せば良いのだろうか?
もうちょっとmml文法について学ぶ必要があるかもしれない。

1998年辺りから携帯電話が普及し始め、俺は単音での着メロ作成にはまった。
もちろん、和音なんかできなかったので、旋律の音の長さを最も短くし、間に伴奏の音を長さを最短にして挟むという方法をとった。旋律と伴奏が被った所は旋律の音のみにした。

そうしたらかなりリアルなものに近づいた。

さて転職のポートフォリオのネタはこれで決まったな。ショパンの幻想即興曲をプログラミングしてソースコードを提出し、面接の時に再生して見せれば多少はインパクトが残せるかも。

独学の未経験ですが、自力で応用してここまで漕ぎ着けました、とアピールしてみてはどうか?



このコはJUNNA。
天才ドラマーだ。
今は二十歳くらいになってるかも。

P.S.
3連符とか複雑なリズム、複数の旋律、和音、音色を変えるなど詳しいmml文法が載っているサイトを発見した!!!


これで難しい曲も表現できるであろう。
例えばラフマニノフのピアノ協奏曲第二番の左手部分みたいに7連符とか9連符とか。


Rust用ゲームエンジンPistonで簡単なゲームを作ってみた

2023-02-23 17:03:36 | Rust
下のサイトで紹介されていた通りにコピペだけどプログラムコードを書いてみたら見事にRust消防の俺でもできました!
Rustでゲームを作る(入門編) ~Rust用ゲームエンジンPistonの基本的な使い方~ - Qiita

Rustでゲームを作る(入門編) ~Rust用ゲームエンジンPistonの基本的な使い方~ - Qiita

本記事は「Develop fun!」を体現する Works Human Intelligence Advent Calendar 2020の17日目の記事です。はじめに本記事では、Rust用ゲームエンジンであるPistonの...

Qiita

これがその証拠。
cargo runコマンドで実行してみたらちゃんと再現できた。
しかし、コンパイルが遅く感じた。
高速なコンパイラが欲しいと思った。




Rustでベンチマークテスト!

2023-02-23 14:47:16 | Rust
pythonで九九の表を作成した時に使ったプログラムをRustで書くとどうなるか?
同じように10の所を99に書き換えてみた。
fn main() {
for y in 1..99 {
for x in 1..99 {
print!("{:3},", x * y);
}
println!("");
}
}

pythonにソックリであることが分かり、驚くであろう。
しかし、さらに驚くことは実行速度の速さである。
pythonなら30秒くらいかかる所をRustはたったの0.533秒で終わった。まさに一瞬である。


Rustは君の傍にいるwww


IDEとは何か?Rust用のおすすめIDEはどれか?etc.

2023-02-23 11:03:15 | Rust
https://e-words.jp/w/IDE.htmlによると・・・
プログラムのソースコードを記述するためのコードエディタを中心に、ソフトウェアの操作画面の設計や要素の配置、挙動の指定などを支援するGUIデザイン機能、ライブラリや開発中のクラスなどの仕様や内部構造を表示する機能、コンパイラやリンカを呼び出して実行可能ファイルを構築するビルド機能、ステップ実行インスペクションエラー箇所のハイライト表示などテストやデバッグを支援する機能などを持っていることが多い。

要するにプログラムのソースコードを書くためのアプリということだ。最も単純なIDEはWindowsに元々入っているメモ帳で、これを使えばホームページを作れる。

ではRust用のIDEで良いものはないか探してみた。
Rust プログラミング - インフォグラフィック:2021年開発者エコシステムの現状

Rust プログラミング - インフォグラフィック:2021年開発者エコシステムの現状

「2021 年開発者エコシステムの現状」は言語、ツール、テクノロジー、および開発者のライフスタイルにおける最新のトレンドをまとめた、プログラミングコミュニティに関する...

JetBrains: Developer Tools for Professionals and Teams

Visual Studio codeはもうすでにインストールしてあるのだが、使いづらい。俺がいつも使っているpython用のIDLE Shell3.11.1の方がはるかに使いやすい。例えば、
x=1+1
print(x)
と入力してEnterキーを押せば即座に実行してくれて答えが表示される。



写真は高松ななちゃん。
お笑い芸人としてワザとブスなファッションで登場しているが、実はめちゃくちゃかわいコちゃんなのだ。
残念ながら犬HKをパワハラで退職してしまったが、フェリス女学院大学卒という高学歴のお嬢様の能力を活かして国賊犬HKを本人訴訟でブチのめして欲しかった。
派遣社員だった俺でもできた簡単なことなのに。

手を動かして考えればよくわかる 高効率言語 Rust 書きかた・作りかた

2023-02-18 20:05:34 | Rust

手を動かして考えればよくわかる 高効率言語 Rust 書きかた・作りかた https://amzn.asia/d/a7gv4hy
今日、買ってきた。
クジラ飛行机さん著作の神本!
【手を動かして考えればよくわかる 高効率言語 Rust 書きかた・作りかた】

pythonとRustを対比させながら豊富なサンプルを用いてやさしく解説。

オーム社のRustプログラミング入門を先に買って大失敗!
とんでもない糞本だ!
誰だあ?!オーム社のRustプログラミング入門がやさしくて分かりやすいなんてレビューした奴は?!
マジで許せん!



Rust+ECSでゲーム開発

2023-02-18 19:46:09 | Rust
Rust+ECSでゲーム開発 -ゲームエンジンAmethystのススメ- (技術の泉シリーズ(NextPublishing))




https://www.amazon.co.jp/Rust-ECS%E3%81%A7%E3%82%B2%E3%83%BC%E3%83%A0%E9%96%8B%E7%99%BA-%E3%82%B2%E3%83%BC%E3%83%A0%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3Amethyst%E3%81%AE%E3%82%B9%E3%82%B9%E3%83%A1-%E6%8A%80%E8%A1%93%E3%81%AE%E6%B3%89%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%EF%BC%88NextPublishing%EF%BC%89-%E4%BD%8F%E7%94%B0-ebook/dp/B09GDVKVLX?ref=d6k_applink_bb_dls&dplnkId=1280a275-3d1c-4313-939a-944f09330151

Rustでインベーダーゲームを作る

2023-02-18 19:37:53 | Rust

Rustでインベーダーゲームを作る動画
Bevyというゲームエンジンを利用して開発しているそうだ。
日本のサイトによるこの動画の概要があるので参照すべし。

他にもRust+ECSでゲームを作るというサイトを紹介しておく。
https://www.google.com/search?q=rust%2Becs%E3%81%A7%E3%82%B2%E3%83%BC%E3%83%A0%E9%96%8B%E7%99%BA&source=lmns&bih=664&biw=360&client=ms-android-sharp&prmd=sivn&hl=ja&sa=X&ved=2ahUKEwjKncrk7579AhVBAd4KHb1xBkgQ_AUoAHoECAAQBA