WAVをMP3にするだけ。前に作ったツールをお手本に、AIにもう一本作らせた

デスクトップアプリを作らせてみた

ナレーション用のWAVを、MP3に変換したい。それだけのために、本格的な音声編集ソフトを起動するのは少し大げさです。

前回のShareX編では、ShareXのイメージエディタをWindows 11の右クリックメニューから直接開くツールを作りました。日常の小さな不満を、AIに自分専用の道具を作ってもらうことで解消する。そのやり方が使えたので、今回は別の不満に応用します。

しかも、今度はお手本があります。前に作った ShareXImageEditorContext を見せて、「これと同じ系統で作る」と頼めるようになりました。

音声を編集したいわけではなく、形式を変えたいだけ

私はナレーション作成用のソフトを持っていて、動画などに使う音声を生成しています。このソフトからの音声出力はWAV形式なので、用途によってはMP3へ変換したくなります。

この作業のためにAdobe Auditionを起動するほどでもありません。音を切り貼りしたり、細かく加工したりしたいわけではないからです。

WAVを選んで、必要ならビットレートなどを変えて、MP3にする。それがすぐできれば十分です。

だったら、これも自分専用の小さなツールにすればいい。

今回作ったのは、AudioConverter というWindows用の小さな変換ソフトです。

完成したAudioConverterにWAVを2件読み込んだ画面。変換設定と結果欄を一画面に配置

完成したAudioConverterに、テスト用WAVを2件読み込んだ画面です。ファイル一覧、変換設定、結果欄が一画面に収まっています。この記事のスクリーンショットは、すべて使い勝手の調整を終えた最終成果物のものです。

「前のShareXのやつと同じ感じ」を、実物で伝える

今回の依頼では、最初に ShareXImageEditorContext 全体を確認するよう指示しました。実際の指示文には、こう書いています。

既存プロジェクトは「同じ作者が使う同系列の個人用Windows小物アプリ」
として、操作感・開発方法・配布方法を揃えるための参考実装とする。

「同じ感じで」は便利な言い方ですが、それだけで全部を済ませたわけではありません。変換画面に欲しい設定、複数ファイルの扱い、自分の別PCにも持っていけることなどは、今回の要件として伝えています。

そのうえで、前作のどこを参考にするかも指定しました。実装で引き継いだ主な部分は、次のとおりです。

前作を参考にした部分 今回の実装
Windows用ソフトの技術構成 .NET 8とWindows Formsを使用
モダン右クリックメニューへの登録 C++の IExplorerCommand とMSIXの登録方式を踏襲
成果物の整理 dist、distribution、バージョン付きの release フォルダーとZIP
別PCへの導入 署名済みMSIX、公開証明書、Install.cmd / Uninstall.cmd
手順と配布情報 READMEと、ハッシュなどを記録した package-info.json

一方、ShareX本体を探す処理や、画像ごとにShareXを起動する処理は使っていません。今回は、複数のWAVを一つの設定画面にまとめて渡します。設定画面そのものも今回新しく作った部分です。

以前の成果物を参考にすると、「自分用のWindows小物は、こういう形にしてほしい」を、文章だけで説明し直さずに済みます。ソースや導入スクリプトが、そのまま次の依頼の具体例になりました。

FFmpegは、入っているか分からないところから確認した

変換処理にはFFmpegを使います。音声や動画をコマンドで変換できるツールです。公式ドキュメントでは、入力ファイルと出力先、変換オプションを指定する使い方が説明されています。

ただ、私は名前を知っている程度で、能動的にインストールした記憶もありませんでした。使い慣れたコマンドをGUI化した、という出発点ではありません。

まずPCに存在するかを確認し、使える状態にするところからAIに任せました。

ここは制作記録を見返すと、少し面白い結果になっています。最初に ffmpeg コマンドを呼んでも見つからなかったのですが、調べるとWinGetのパッケージ保存先に導入済みの実体がありました。記録上はGyan.devの9.0.1 full buildです。

つまり、実装を始めた時点では「入っていなかった」のではなく、入っていたものの、その作業環境のPATHからは呼べなかったという状態でした。いつ誰が導入したかまでは、この制作履歴からは分かりません。

AIはその実体を使って検証し、プロジェクト内の vendor/ffmpeg に実行ファイルとライセンス関連ファイルを揃えました。制作時の1.0.1では ffmpeg/ffmpeg.exe としてAudioConverterに同梱し、外部プロセスとして呼び出す形にしました。

別のPCで使うときに、改めてFFmpegを探してインストールしたり、PATHを設定したりしなくてよい形にしたわけです。その後、公開用の2.0.0ではFFmpegを同梱しない方式へ変更しました。現在の導入方法は後半で紹介します。

WAVを選んで、設定して、「MP3に変換」

AudioConverterは、エクスプローラーでWAVを選び、Windows 11のモダンコンテキストメニューから「MP3に変換」を選ぶと開きます。複数選択した場合も、一つの画面にまとめて入ります。

テスト用WAVを2件選択し、Windows 11のモダンコンテキストメニューからMP3に変換を選ぶ画面

WAVを2件選んで右クリックしたところです。「MP3に変換」を選ぶと、冒頭のように対象ファイルが入った画面が開きます。直接起動して「ファイル追加」から選ぶことも、ドラッグ&ドロップで追加することもできます。

基本操作は、一覧を確認し、必要な設定だけ変えて「MP3に変換」を押すだけです。初期値は192 kbps、チャンネルとサンプリングレートは「元のまま」、出力先は元ファイルと同じフォルダーです。

変更できる設定は、この範囲にしました。

設定 選択肢
ビットレート 64 / 96 / 128 / 192 / 256 / 320 kbps
チャンネル 元のまま / Mono / Stereo
サンプリングレート 元のまま / 44.1 kHz / 48 kHz
出力先 元ファイルと同じフォルダー / 指定フォルダー
音量ノーマライズ ON / OFF。初期値はOFF
変換後の元WAV削除 ON / OFF。初期値はOFF

最後に使った設定は、次回起動時に復元します。「元のまま」は、AudioConverterからチャンネル数やサンプリングレートを明示指定しないという意味です。MP3への変換なので、元音声をそのまま可逆保存する機能ではありません。

元WAV削除をONにした場合は、ごみ箱へ移動せず削除します。ただし、MP3の生成と読み取り検証、出力の確定まで成功した場合に限る実装です。

同名のMP3が既にある場合は、上書き・スキップ・キャンセルを選べます。「以降すべて同じ処理」にチェックを入れると、その回のまとめて変換する処理に選択を適用します。

同名MP3がある場合の確認画面。上書き、スキップ、キャンセルと、以降すべて同じ処理を選べる

既存のMP3をどう扱うかも、画面から選べるようにしています。

完成版AudioConverterでテスト音声2件のMP3変換が成功し、結果欄にそれぞれの出力先が表示された画面

テスト音声2件の変換完了画面です。成功したWAVは対象一覧から外れ、下の結果欄にMP3の出力先が表示されます。失敗やスキップしたものは、再実行できるよう一覧に残します。

変換ボタンの裏側まで、AIに作ってもらう

こちらが決めたのは、「大きな音声編集ソフトを開かずに変換したい」という目的と、必要な設定、ファイルを失わない条件です。

開発作業をAIに任せるためのツール「Codex」には前作の調査から始めてもらい、環境確認、プロジェクト作成、GUIと変換処理の実装、ビルド、動作確認、導入用パッケージの作成までを進めてもらいました。

変換処理の中心は、FFmpegの libmp3lame に選んだビットレートを渡すことです。たとえば192 kbpsなら -c:a libmp3lame -b:a 192k、モノラルを選べば -ac 1 が加わります。音量ノーマライズには dynaudnorm を使っています。

こうした引数を毎回自分で組み立てる代わりに、画面の選択をAudioConverterがコマンドへ変換します。

画面から操作できることに加え、ファイルの扱いも実装しました。変換はいったん一時ファイルに行い、FFmpegの正常終了、空でないこと、MP3全体をデコードできることを確認してから出力を確定します。変換に失敗したり中止したりした場合に、元WAVや既存MP3を残すためです。

制作時の検証記録では、実際のFFmpegを使った31項目のチェックが通っています。各ビットレートやチャンネル設定に加え、破損WAV、同名ファイル、中止時の扱いなども確認しています。

さらに、インストール先に同梱したFFmpegでテストWAVを2件変換し、エクスプローラーの右クリックから対象ファイル入りの画面を開くところまで確認しました。初回の証明書登録に必要なWindowsの管理者承認は私が行い、私からも「本PCで期待する動作を確認」と返しています。

動いた。でも、結果欄をもっと広くしたい

動いた時点で、終わりにはしませんでした。

ここからは、掲載している完成画面になるまでの経緯です。制作時の会話記録を振り返ります。

使ってみると、画面下部のログ欄が相対的に狭い。ウィンドウを広げても大きくなるのは変換対象の一覧で、結果を見る場所を思うように広げられませんでした。

そこで、次の3点を追加で頼みました。

  • 枠付きの「mp3」という、簡単な専用アイコンを付ける。
  • 画面位置とサイズを覚えて、次回も同じ状態で開く。
  • WAV一覧の下にドラッグできる境界を付け、結果欄の広さを調整できるようにする。

修正版では、一覧と下の領域の境界を上下に動かせるようになりました。ウィンドウを縦に広げた分はログ欄に割り当て、分割位置も保存します。画面位置・サイズに加えて、最大化状態も復元する実装になりました。

これが1.0.1の変更です。制作記録には、境界のドラッグ、画面を閉じて開き直したときの復元、更新版パッケージの検証まで残っています。

変換できることと、自分が気持ちよく使えることには、まだ少し差がありました。その差は、実際に触ってから注文しています。

別PCへ持っていく形から、公開用パッケージへ

制作時の1.0.1では、自分の別PCへ簡単に導入できるよう、.NETとFFmpegを同梱した約155 MBのZIPを作りました。この同梱版の最終成果物はGit管理外のローカル保管先に移し、公開用にはFFmpegを含めない2.0.0を用意しました。

公開用の AudioConverter-2.0.0-x64.zip は約66.8 MBです。.NETは引き続き同梱し、FFmpegは利用者が別途用意する方式にしています。旧版から更新する場合も、FFmpegの準備が必要です。

導入先はWindows 11のIntel/AMD x64です。ZIPをすべて展開して Install.cmd を実行し、初回だけ自己署名の公開証明書登録を承認します。削除には Uninstall.cmd、またはWindowsの「インストールされているアプリ」を使います。

変換前に、FFmpeg公式のダウンロード案内からWindows版の入手先を確認し、libmp3lame と dynaudnorm を含むビルドを用意してください。ffmpeg.exe のある bin フォルダーをユーザー環境変数PATHへ追加し、Windowsからサインアウトして再ログインします。端末で ffmpeg -version を実行できれば準備完了です。詳しい導入・削除手順はZIP内の README.txt に記載しています。

2.0.0では、外部FFmpegを使った33項目の検証と、配布パッケージの内容・署名・展開後の起動を確認しました。別の物理PCへの導入はまだ未検証です。

ソース一式と最新バイナリー

ソースと公開用のWindows版ZIPはGitHubに置いています。開発途中のZIPはローカルで管理し、リモートへ反映する時点で選定・検証したものだけを配布します。

前に作ったものが、次を作るための資産になった

ShareX編は、既存ソフトへ画像を渡す橋渡しでした。今回は、FFmpegに処理を任せながら、GUIで設定を変更できる実用ソフトになりました。

解決した問題は、相変わらず小さいです。ナレーションソフトから出したWAVを、MP3にしたかっただけ。同じことができるソフトはほかにもあります。

でも、欲しかったのは、自分が使う機能だけがあって、迷わず変換できるものです。「その程度のためにソフトを作るのもなあ」と我慢していたところへ、自分専用ツールを作る選択肢が入りました。

そして今回は、前にAIと作った成果物を、次の開発のお手本として使えました。右クリックメニューへの登録や別PCへの持ち運び方を、毎回白紙から説明する必要が減っています。

小さな不満をAIへ頼み、できた道具を使い、その道具を次の制作にも使う。

一本作って終わりではなく、こうして自分用の道具と、その作り方が少しずつ積み上がっていきます。

次は、実際の電波を受信するWindows用のSDRソフトへ

次回は、ここから方向を大きく変えます。題材はSDR(Software Defined Radio)、ソフトウェアで信号処理を行う無線の仕組みです。

使う予定なのは、こちらのRTL-SDR関連ライブラリです。Windows用ソフトから、実際のRTL-SDRデバイスを制御することに挑戦します。

既存ライブラリを使って、AIに実デバイスを制御するWindows用ソフトを作らせたら、無事に電波を受信できるところまで持っていけるのか?

ファイルを扱う小さな便利ツールから、実ハードウェアを相手にする、より本格的なWindows用ソフトへ進みます。

次の記事:まずは電波が見えるところまで。Codexと育てるAF-SDR【第1回】

デスクトップアプリ制作の一覧へ

afさんのAIラボのトップへ

コメント

タイトルとURLをコピーしました