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
560
PHPのFFIを使って簡単なメロディを演奏する
リンクが聞かないので後ほどpdfを共有します。
yasuaki640
March 08, 2024
Tweet
Share
More Decks by yasuaki640
See All by yasuaki640
PHPのOpcodeを 読んでみよう
yasuaki640
0
1.1k
TypeScriptで簡易DBを作ってみた
yasuaki640
0
250
Featured
See All Featured
A better future with KSS
kneath
238
17k
Git: the NoSQL Database
bkeepers
PRO
431
65k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
530
We Have a Design System, Now What?
morganepeng
53
7.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
283
13k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
47
9.6k
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