枯れ木も山の賑わい
shionaka
ということでまた枯れ木を植えていこうかと思います。○○やってみたシリーズってなんでこんなに罪深いというか、自分に言い訳しないといけない気持ちになるのかしら…。
通勤時間にエックスをぼーっと眺めていると、GoogleのGemini 1.5 Proがお安いらしい、みたいなポストを見かけたので、そんなにお安いなら試してみようかしら?っということで、週末を待って試してみることにしました。まずは情報収集だ。どのくらいお安いのかな。公式ページに行ってみよう……
デベロッパー向け Google AI | Gemini API で構築 | Google AI for Developers | Google for Developers
![](https://bkbkjo.work/impression/wp-content/uploads/2024/06/image-1024x606.png)
ということで2024/06/09現在、Gemini 1.5 proは無料で提供されているらしい(マジでどういうこと!?)。どういうこと??ってなったのでいろいろググったのだが、マジで無料だった。APIの使用制限があるらしいし、そのうちちゃんと課金形態に変わるっぽいが、すくなくとも今日時点ではほしいままにすることができるらしい、GoogleアカウントもってGoogle AI Studioにログインさえすれば。思わず倒置法を繰り出してしまうほどの驚き…ワオだぜワオ。
料金形態のリンク:Gemini API の料金 | Google AI for Developers | Google for Developers を見ると、1分間に2要求がMAXかつトークンが32K上限になっており、さーすがに無料枠という感じだ。でも、要求をなげるときに間にちっちゃいアプリを挟んで時間管理してキューイングする仕組みを作っておけば、要求から応答までの時間はかかるけど、無駄なく使い倒せる…のかな?(バッチの仕組み?)
![](https://bkbkjo.work/impression/wp-content/uploads/2024/06/image-4.png)
Gemini 1.5 ProのAPIを試す
Google AI Studioは現在のチャット欄をそのままPython用コードに変換してくれる機能があったので、せっかくなのでAPIキーを発行してPythonでAPIを動かしてみることにした。往復とかさせる気はないので1分2要求の制限にも引っかからない。気楽に試せるのは素晴らしいなあ。
コードの取得
画面右上にチャットのやり取りを各言語にしてくれるボタンがあるのでクリック。JavaScript / Python / Kotlin / Swift から選択できる。今回はPythonを選んでコードをコピペする。うれしいことに、コードにはかなり親切めにコメントが書いてある。pip installの指示もある。やさしい。
![](https://bkbkjo.work/impression/wp-content/uploads/2024/06/image-1.png)
![](https://bkbkjo.work/impression/wp-content/uploads/2024/06/image-2.png)
テキトーにVisual Studio Codeを立ち上げて、新規フォルダを作って、新規テキストを適当な名前で作成する。Sample.pyとかでいいか。そんでコピーしたコードを貼り付ける。いまpipenvの練習中だったから、pip installはpipenvでやることにした。コマンドラインから以下を実行する。
pipenv shell
pipenv install google-generativeaipipenv
コードの中で環境変数GEMINI_API_KEYを参照する場所があるので、コードと同じ階層に.envという名前で空ファイルを作成する。中は一行だけキーの定義をする。
GEMINI_API_KEY=XXXXXXXXXXXXXXXX
実際にはペケペケではなくGeminiのAPIキーを入れなければならないので、APIキーを発行する。Google AI Studioの左メニューにキー発行があるのでクリック。画面右側がキー発行画面になるのでここからキーを作成する。キーを作ったら.envのGEMINI_API_KEYに値を設定する。
![](https://bkbkjo.work/impression/wp-content/uploads/2024/06/image-5.png)
APIキーの発行をするときに画面遷移が挟まるので、画面のプロンプトを保存していないとデータ消えちゃうよという警告が出る。消えても別に問題ないけど一応保存しておく。保存したプロンプトはGドライブ>マイドライブ>Google AI Studioフォルダに保存されていた。この形式ならInport / Exportが簡単そうだね。このへんはGoogleアカウントと連携している強みなのかな。
コードを見るとファイル添付してGeminiに渡すときのフローはこんな感じだ。
- 自PCにあるローカルのファイルパスを渡す
- このときファイル形式(MIME タイプ)も渡す。たとえば渡すファイルはPythonプログラムなら”text/x-python”だとか
- ファイルパスの場所にあるファイルをどこか(?)にUpする
- ファイルがUpされるのを待つ
- UpされたファイルのURLを取得する
- GeminiにURLとプロンプトを渡す
なるほどなるほど。MIMEタイプはいまは固定でコードに埋まってるけど、本来は拡張子に紐づいて自動で決まるのかな。あとファイルはどこにUpされてるんだ…Gドライブか? ドキュメント読んでみよう。
File API を使用すると、プロジェクトごとに最大 20 GB のファイルを保存できます。各ファイルのサイズが 2 GB を超えないようにしてください。ファイルは 48 時間保存され、その期間内に生成するために API キーでアクセスでき、API からダウンロードすることはできません。Files API は、Gemini API が利用可能なすべてのリージョンで無料でご利用いただけます。
メディア ファイルを使用したプロンプト | Google AI for Developers | Google for Developers
※リンク先のMIMEタイプ確認するときは英語推奨
なるほど~。48時間だけどこかにUpされるのか。上限は1ファイルあたり2GB、合計20GBってめっちゃ太っ腹だな。PDFとかソースコードとかなら全然余裕っぽい。zipで1ファイルにコード詰め込みまくるのは許されるのか…? あ、さすがにサポートされてないみたい。じゃあハイパーでっかいぐちゃぐちゃコードをGeminiに読んでほしいときは、複数コードを1ファイルにまとめたウンコ―ド💩つくって投げつけるしかない…??💩彡彡
とにかく今回はテキトーなPythonを渡すだけなので、コピペしてきたコードのうち、upload_to_gemini関数を読んでいる場所を変更し、第一引数のファイル名をフルパスにする。あとエスケープ文字除けのrも先頭に入れておく。
files = [
upload_to_gemini(r"C:\なんたらかんたら\main.py", mime_type="text/x-python"),
]
準備ができたのでさっそく実行する。実行して数十秒くらいは「Waiting for file processing…」の表記が出てファイルのアップロード待ちになる。そのあと応答がドカッと返ってきた。中身はちゃんとしてるかな。与えた指示はプログラムの解説をマークダウン形式で書くことだが…
![](https://bkbkjo.work/impression/wp-content/uploads/2024/06/image-6.png)
返ってきたマークダウンはこちら↓
import tkinter as tk
from tkinter import filedialog
(なぜか応答の先頭に添付したコードが全文そのまま返ってきたのでここは省略)
使い方
このPythonコードは、シンプルな音楽プレイヤーと、音声分離、MIDI変換機能を提供します。以下は、このコードの使い方です。
前提条件
-
Python 3 がインストールされていること
-
以下のPythonパッケージがインストールされていること
- pyaudio
- pydub
- librosa
- matplotlib
- spleeter
- basic-pitch
これらのパッケージは、以下のコマンドでインストールできます。
pip install pyaudio pydub librosa matplotlib spleeter basic-pitch
注記:
pyaudio
のインストールには、環境によっては追加の手順が必要になる場合があります。詳しくは、PyAudioのドキュメントを参照してください。 -
spleeter
とbasic-pitch
はコマンドラインツールなので、パスが通っていることを確認してください。
実行方法
- コードを
music_player.py
などのファイル名で保存します。 - ターミナルまたはコマンドプロンプトを開き、保存したファイルがあるディレクトリに移動します。
- 以下のコマンドを実行します。
python music_player.py
操作方法
- ファイルの選択: “Select File” ボタンをクリックして、再生したい音声ファイル(.wav または .mp3)を選択します。
- 再生: “Play” ボタンをクリックすると、選択したファイルの再生が始まります。
- 停止: “Stop” ボタンをクリックすると、再生が停止します。
- シークバー: シークバーをドラッグすることで、再生位置を変更できます。
- 波形表示: 選択した音声ファイルの波形がウィンドウ下部に表示されます。再生中は、再生位置を示す赤い縦線が移動します。
- 音声分離:
- “Separate Audio” ボタンをクリックすると、選択した音声ファイルを分離します。
- 分離オプションは、“Stem Separation Options” のドロップダウンメニューから選択できます。
- 分離されたファイルは、元の音声ファイルと同じフォルダに出力されます。
- MIDI変換:
- “Audio -> MIDI” ボタンをクリックすると、選択した音声ファイルをMIDIファイルに変換します。
- 変換されたMIDIファイルは、元の音声ファイルと同じフォルダに出力されます。
- 出力フォルダを開く:
- “Open Output Folder” ボタンをクリックすると、元の音声ファイルと同じフォルダが開きます。
注意点
spleeter
とbasic-pitch
の実行には時間がかかる場合があります。処理中はプログラムがフリーズしたように見えることがありますが、処理が完了するまでお待ちください。spleeter
とbasic-pitch
の出力ファイル名は、元の音声ファイル名に基づいて自動的に決定されます。- このコードは、シンプルな音楽プレイヤーと音声分離機能を提供するためのサンプルコードです。必要に応じて、機能を追加したり、コードを修正したりして、自由に使用してください。
ライセンス
このプロジェクトは、MITライセンスの下でライセンスされています。詳細については、LICENSEファイルを参照してください。
ライセンスの部分は完全なハルシネーションですが、それ以外はおおむねあっていました。こやつやりおる。
おわりに
今回はGemini 1.5 Proを使いましたが、Flashのほうが無料枠がガッツリあるのでこっちで遊ぶのも楽しそう。OpenAIのGPTだけじゃなくいろんなAIと遊んでいきたいな~っと思いました。
![](https://bkbkjo.work/impression/wp-content/uploads/2024/06/image-7.png)