Vista以降のWindowsには、ビットパーフェクトオーディオ出力としてWASAPIというAPIが用意されています。 このWASAPIを経由した再生ソフトを作成しました。 様々な圧縮フォーマットに対応しています。
FPlayerは、WindowsからWASAPI経由で音声を再生するアプリケーションです。
いくつかの圧縮データフォーマット(MP3,AACなど)の展開と⊿Σの再生をできるようにしました。
ライセンスの問題でDSFフォーマットには対応していません。
ffmpegライブラリが古いので、最新の圧縮フォーマットに対応していません。
MP3など一部の圧縮フォーマットを読み込むと、演奏時間の表示が本来の時間を示しません。 ffmpegのバグのような気もしますが、原因はきちんと追いかけていません。
古いXMOSで11.2MHzの⊿Σを再生しようとすると、DACがハングアップします。 Webmasterが使っているAmaneroや新しいXMOSでは問題ありません。
再生中にストップボタンが効かないことがありました。
ごく短いファイルを再生すると、ファイル名表示が崩れたり再生終了しなかったりしました。 今では大塚愛の『愛 am BEST』を再生しても大丈夫です。
突然アプリが落ちるという報告があります。 二つの原因を見つけて潰しました。
Realtek High Definition Audioについてはわかりました。 IAudioClient::IsFormatSupported() IAudioClient::Initialize()の二つは、再生フォーマットを指定するパラメーターにWAVEFORMATEXを指定するようマイクロソフトのドキュメントに書かれています。 このWAVEFORMATEXをWAVEFORMATEXTENSIBLEに変更し、Format.nBlockAlign = 8; Format.wBitsPerSample = 32; Samples.wValidBitsPerSample = 24;とすると、Realtek High Definition Audioに24bitデータを送れます。
PCM2706とRAL2496HA1についても解決しました。 IAudioClient::Initialize()に渡す二つのREFERENCE_TIME型は、出力デバイスによって適切な値の範囲が違います。 でも不適切な値を渡してもエラーを検出せずに、再生に失敗します。 手持ちの全デバイスに対して適切となる共通の値を見つけ出すのに苦労しました。 「SACD30nにもUSB経由で再生できた」という報告が来ました。
WASAPIが使えるようになった頃マイクロソフトが公開したサンプルコードでは、今はきちんと動作しません。 マイクロソフトのWASAPIライブラリは素人がメンテしているようですね。
以前TEACのDAC専用再生アプリのサイトに「正しく再生できないプレヤーアプリがある」と嫌味を書かれていました。 AmaneroやXMOSには常にちゃんと出力できていたので、webmasterの試験には問題ありません。 TEACのDACで正しく再生してほしかったら、試験用にDACを貸しなさいよ。
2023年現在WASAPIのコードを書くとしたら、 とある言語の開発記録II を参考にすると良いです。
HelpメニューからAboutを選択した時、バージョン表記のダイアログが出なかったのをデバッグしました。 それ以外は9月6日に公開したバージョンと同じです。 バージョン日付も9月5日をキープします。
フォルダーをドロップしたら、そのフォルダー直下の音声ファイルを再生するようになりました。
サンプリング周波数表示にkやMの文字を使うようになりました。
再生中のファイル名がデータグリッドの表示範囲外にある場合、表示範囲内までスクロールするようになりました。
長いパスのファイルが再生できない問題に対応しました。
11.2MHzの⊿Σファイルも、DoPで再生できるようにしました。
突然落ちる問題、短いファイルの再生で表示が崩れる問題、再生中にストップボタンが応答しない問題に対処しました。
PCM2706やRAL2496HA1などで再生できなかった問題に対応しました。
16bitデータのDACを使おうとすると、実行中断する問題をデバッグしました
DLLの依存性を再度見直しました。
いろいろ変更しました。 UX的には機能がいろいろ変わっていますが、ソースコード的にはWASAPIのバージョンアップ対応が大きいです。
再生ボタンを押してから再生まで待たされるのをやめました
公開β
FPlayerのメイン画面を示します。
項目 | 説明 |
---|---|
(1) | メニューバーです。 メニューで選択できる項目は、キーボードショートカットからも起動できます。 |
(2) | 再生関係のボタンです。 CDプレーヤーの感覚で操作してください。 |
(3) | 再生時間の表示です 再生中の曲の先頭から何秒の位置を再生しているかを示します。 |
(4) | デバイスの選択です。 出力したいデバイス名を選択してください。 新たにデバイスを接続した場合は、(2)のストップボタンを押すと選択できるようになります。 |
(5) | バッファの使用率表示です。 バッファのトータルサイズは『設定』メニューから変更できます。 |
(6) | 曲名表示です。 現在再生中の曲のファイル名を表示します。 この部分にファイルをドラッグ&ドロップすると、再生ファイルの登録と再生が1動作でできます。 |
(7) | 再生準備曲リストです。 WindowsのExplorerからここにファイルをドラッグ&ドロップしてください。 マウスの左クリックで曲を選択できます。 (2)の再生ボタンを押すと、選択した曲から再生が始まります。 曲を選択した状態でマウスを右クリックすると、並べ替えに利用するメニューが出てきます。 ヘッダの『ファイル名』の欄をクリックすると、ファイルが名前の順番にならびます。 |
ZIPファイルを展開して出てくる4つのファイルがプログラムです。 マイクロソフトが作った再配布可能ランタイムライブラリも含みます。 EXEを実行してください。
FPlayerのライセンスは、コピー自由、使用は無料とします。
FPlayerはLGPL2.1ライセンスのffmpegライブラリを使用しています。 ffmpegライブラリだけは、別ライセンスになっています。 FPlayer本体とffmpegとはダイナミックリンクしているので、LGPLライセンスによって逆アセンブルなどのリバースエンジニアリングが許可されます。
FPlayerを人へ渡す場合には、必ずここで公開しているZIPファイルを渡してください。
FPlayerは各種圧縮フォーマットを展開するために、ffmpegをダイナミックリンクライブラリとして利用しています。 Visual C++から利用するために、ソースコードを若干修整しました。 ffmpegライブラリはLGPLライセンスなので、ソースコードを修正したらLGPLライセンスで公開する義務が発生します。 そこで、ソースコードもこの場所で公開します。
今回は、圧縮音声にそれほどこだわりがなかったので、とりあえず動作すればよいというスタンスで移植しました。 そのため、移植作業はいい加減です。 以下のような問題があります。
(char*)型のファイル名でオープンできないファイル名が存在したのは2012年に使っていたVisualStudio2008の制限です。 2020年現在、文字コードがUTF16とUTF8になったので解決しているはずです。
対応OS | 形式 | ファイル | サイズ | バージョン | 日付 |
---|---|---|---|---|---|
Windows 10以降 | 実行ファイルを圧縮したもの | FPlayer.zip | 481,697 Byte | 2024年9月5日バージョン | 2024年11月17日 |
Visual C++ | ffmpegソースコード | subffmpeg_distribute.zip | 953,769 Byte | 2012年8月14日 |