C#で音声変換する
最近 C#を使って wav や mp3,aac の変換を行う機会があった.
思ったよりもいろいろ試してみることになったので,メモとして残しておく.
NAudio
C#でオーディオを扱うにあたって,いろんなことができるのが NAudio である. mp3 や aac に簡単に変換できるようなメソッドが備わっているので,最初はこれを使う予定だった.
https://www.nuget.org/packages/NAudio/
ところが,変換機能を使えるかどうかは OS に入っているコーデックに依存するため,Windows のバージョンによっては動かないものもあることがわかった.
https://markheath.net/post/naudio-mediafoundationencoder
自分が使用している開発環境(Windows7)では使えなかったため断念.ちなみに,常用している Windows10 のマシンでは動いた.
NAudio.Lame
他のライブラリを探してみたところ,NAudio.Lame というものを発見.
https://www.nuget.org/packages/NAudio.Lame/
外部 dll を入れる必要があるが,wav と mp3 の相互変換が可能になる. ただし,aac には対応していない.
Expression Encoder
さらに他のライブラリを探していると,Expression Encoder という,Microsoft 謹製のライブラリを発見.正確にはエンコードソフトの sdk なのかな?
https://www.nuget.org/packages/Microsoft.Expression.Encoder/
しかし,変換機能は有料版じゃないと使えないとのこと. 読みづらいドキュメント読んで頑張ったのに,なんということだ…
Media Tool Kit
ffmpeg のラッパーを見つけた.インストールにやたら時間がかかるというところを見ると,ffmpeg を内包してるっぽい. コードも簡単に書けるし,とりあえずこれを使ってみることにした.
https://www.nuget.org/packages/MediaToolkit/
パッケージマネージャからインストールしたら,以下のように記述して使える. ファイル名の拡張子を変えてやることで変換先の形式をかえられるようだ.