Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHPのFFIを使って簡単なメロディを演奏する
Search
yasuaki640
March 08, 2024
0
390
PHPのFFIを使って簡単なメロディを演奏する
リンクが聞かないので後ほどpdfを共有します。
yasuaki640
March 08, 2024
Tweet
Share
More Decks by yasuaki640
See All by yasuaki640
PHPのOpcodeを 読んでみよう
yasuaki640
0
760
TypeScriptで簡易DBを作ってみた
yasuaki640
0
190
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Git: the NoSQL Database
bkeepers
PRO
427
64k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Testing 201, or: Great Expectations
jmmastey
38
7.1k
BBQ
matthewcrist
85
9.3k
Making Projects Easy
brettharned
115
5.9k
Producing Creativity
orderedlist
PRO
341
39k
Visualization
eitanlees
145
15k
Transcript
PHPのFFIを使って 簡単なメロディを演奏 する ディップ株式会社 バイトルエンジニアリング部 渡邉泰曉 @yasuaki640 1
この発表の狙い - FFIの概要を掴む - (個人的)FFIの使い所を知ってもらう 2
実装の動機 - 簡単なコードはAIが書く - でも我々はコード書きたい! - なら、我々はAIが書けないプログラムを書けばいいは ず! - PHPのソフトシンセ(音を出すプログラム)ならAIもわから
ないはず! - でもどうやって? -> FFIならできそう! 3
FFIとは 純粋な PHP で、 - 共有ライブラリ (.DLL あるいは .so) の読み込み
- C の関数をコール - C のデータ構造にアクセス などができる拡張 - https://www.php.net/manual/ja/intro.ffi.php 4
FFIとは 5 PHPコード C言語の 共有ライブラリ $ffi->cFunc($phpVal); return cVal;
FFIの応用例 1 - 計算量の多い処理を高速化 - フィボナッチ数列計算の例 : 6 フィボナッチ数列の計算時間 https://qiita.com/i4M1k0SU/items/e8e1a8344831becf95a8
実行形式 実行時間 (s) PHP8.0 with JIT 9.50 FFI利用時 1.96
FFIの応用例 2 - ハードウェアからの情報をPHPで受け取る - ex. FFIを通じてNFCリーダーからの情報を受け取る 7 https://zenn.dev/memory/articles/80e2cd6c063889
結論 - FFIを使えば、 PHPでソフトシンセ(音を出すプログラム)を実装できそう! 8
実装したソフトシンセの構造 9 PHPコード Cの 共有ライブラリ オーディオ デバイス メロディのデータ (CSV)
メロディのデータ (CSV) 10 scale, duration C, 100 C#, 150 E,
50 音階 (ドレミ) 音階を鳴らす時間 (ms)
PHPの実装 - CSVファイルを読み込む - 組み込み関数でシュッと実装 11
PHPの実装 - 音階(ドレミ)のデータを周波数(Hz)に変換 12 C, 100 C, 100 261.626(Hz), 100
PHPの実装 - Cの構造体と関数をFFIオブジェクトにバインド 13
PHPの実装 - FFIオブジェクトから、Cの構造体の配列を生成、C側の 音を出す関数をコール 14
Cの共有ライブラリの実装 - 音波形の生成 - 今回はsin波を生成 15
Cの共有ライブラリの実装 - オーディオデバイスの操作 - SDL2というハードウェア操作のライブラリを使用 16
デモ 17
18
実装した感想 1 - PHPの便利さを再確認 - ありふれた処理(CSV読み込みなど)はPHPをフル活用 - PHPで厳しい部分は大人しくCで実装する 19
実装した感想 2 - FFIについて情報が少ない - ChatGPT、Copilotもあまり当てにならない - 裏を返せば、AIに任せることなくコードを書ける! 20
まとめ - FFIはPHPアプリケーションの可能性を広げる - FFIでなにか実装してみませんか? 21
採用やってます - 下記QRコードからカジュアル面談!! 22
ご清聴ありがとうございました 23
Appendix 24
参考資料 - PHP: はじめに - Manual - PHP で NFC
リーダーを実装する - PHP8.0のJITコンパイラはFFIにどこまで追いつけるか? #PHP - Qiita - PHP7.4のFFIについて / About PHP-FFI - Speaker Deck - SDL Wiki 25
リンク - 実装したソフトシンセのリポジトリ - https://github.com/yasuaki640/phiano 26