PHPのFFIを使って簡単なメロディを演奏する
by
yasuaki640
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
PHPのFFIを使って 簡単なメロディを演奏 する ディップ株式会社 バイトルエンジニアリング部 渡邉泰曉 @yasuaki640 1
Slide 2
Slide 2 text
この発表の狙い - FFIの概要を掴む - (個人的)FFIの使い所を知ってもらう 2
Slide 3
Slide 3 text
実装の動機 - 簡単なコードはAIが書く - でも我々はコード書きたい! - なら、我々はAIが書けないプログラムを書けばいいは ず! - PHPのソフトシンセ(音を出すプログラム)ならAIもわから ないはず! - でもどうやって? -> FFIならできそう! 3
Slide 4
Slide 4 text
FFIとは 純粋な PHP で、 - 共有ライブラリ (.DLL あるいは .so) の読み込み - C の関数をコール - C のデータ構造にアクセス などができる拡張 - https://www.php.net/manual/ja/intro.ffi.php 4
Slide 5
Slide 5 text
FFIとは 5 PHPコード C言語の 共有ライブラリ $ffi->cFunc($phpVal); return cVal;
Slide 6
Slide 6 text
FFIの応用例 1 - 計算量の多い処理を高速化 - フィボナッチ数列計算の例 : 6 フィボナッチ数列の計算時間 https://qiita.com/i4M1k0SU/items/e8e1a8344831becf95a8 実行形式 実行時間 (s) PHP8.0 with JIT 9.50 FFI利用時 1.96
Slide 7
Slide 7 text
FFIの応用例 2 - ハードウェアからの情報をPHPで受け取る - ex. FFIを通じてNFCリーダーからの情報を受け取る 7 https://zenn.dev/memory/articles/80e2cd6c063889
Slide 8
Slide 8 text
結論 - FFIを使えば、 PHPでソフトシンセ(音を出すプログラム)を実装できそう! 8
Slide 9
Slide 9 text
実装したソフトシンセの構造 9 PHPコード Cの 共有ライブラリ オーディオ デバイス メロディのデータ (CSV)
Slide 10
Slide 10 text
メロディのデータ (CSV) 10 scale, duration C, 100 C#, 150 E, 50 音階 (ドレミ) 音階を鳴らす時間 (ms)
Slide 11
Slide 11 text
PHPの実装 - CSVファイルを読み込む - 組み込み関数でシュッと実装 11
Slide 12
Slide 12 text
PHPの実装 - 音階(ドレミ)のデータを周波数(Hz)に変換 12 C, 100 C, 100 261.626(Hz), 100
Slide 13
Slide 13 text
PHPの実装 - Cの構造体と関数をFFIオブジェクトにバインド 13
Slide 14
Slide 14 text
PHPの実装 - FFIオブジェクトから、Cの構造体の配列を生成、C側の 音を出す関数をコール 14
Slide 15
Slide 15 text
Cの共有ライブラリの実装 - 音波形の生成 - 今回はsin波を生成 15
Slide 16
Slide 16 text
Cの共有ライブラリの実装 - オーディオデバイスの操作 - SDL2というハードウェア操作のライブラリを使用 16
Slide 17
Slide 17 text
デモ 17
Slide 18
Slide 18 text
18
Slide 19
Slide 19 text
実装した感想 1 - PHPの便利さを再確認 - ありふれた処理(CSV読み込みなど)はPHPをフル活用 - PHPで厳しい部分は大人しくCで実装する 19
Slide 20
Slide 20 text
実装した感想 2 - FFIについて情報が少ない - ChatGPT、Copilotもあまり当てにならない - 裏を返せば、AIに任せることなくコードを書ける! 20
Slide 21
Slide 21 text
まとめ - FFIはPHPアプリケーションの可能性を広げる - FFIでなにか実装してみませんか? 21
Slide 22
Slide 22 text
採用やってます - 下記QRコードからカジュアル面談!! 22
Slide 23
Slide 23 text
ご清聴ありがとうございました 23
Slide 24
Slide 24 text
Appendix 24
Slide 25
Slide 25 text
参考資料 - PHP: はじめに - Manual - PHP で NFC リーダーを実装する - PHP8.0のJITコンパイラはFFIにどこまで追いつけるか? #PHP - Qiita - PHP7.4のFFIについて / About PHP-FFI - Speaker Deck - SDL Wiki 25
Slide 26
Slide 26 text
リンク - 実装したソフトシンセのリポジトリ - https://github.com/yasuaki640/phiano 26