Re: mp3の読み込みを非対応化 ( No.1 ) |
- 名前:yumetodo 日時:2017/01/07 17:45
横から。
DxLibで特別扱いしているのはopusとoggだけで後はDirectSound/XAudioに投げつけているので、
mp3のDxLib側でどうこうするというよりかは、コーデック側の問題では。
Windows Vista 以降ではMSがもともとMP3用のコーデックを入れてくれていると記憶しているので、
HTML5 の audio 要素と video 要素でサポートされているメディアフォーマット - HTML | MDN
https ://developer.mozilla.org/ja/docs/Web/HTML/Supported_media_formats#Browser_compatibility
特に特許周りで問題にはならないと私は認識しています。
もちろんmp3などという邪悪なフォーマットは利用するべきではないと言うのは
本の虫: 日本国内におけるmp3の特許
https ://cpplover.blogspot.com/2012/07/mp3.html
でもわかるとおりです。
なお2018年以降はmp3の特許が切れる模様です。
---
それでもなおmp3の再生を拒むには、LoadSoundMemを呼ぶ前に拡張子を確認することができます。
---
さらに確実にmp3の再生を阻止するには、opusまたはoggのような自由なファイルフォーマット以外のファイルを弾くようにコードを書くことです。
というのは不自由なファイルフォーマットはなにもmp3だけではなく、aacやwmaなんかもそうなので。
これはライブラリユーザーが自分で書くのは辛いものがあるので、DxLib側で例えば自由なファイルフォーマットのみ読み込める
LoadSoundMemFreeFormatOnly
LoadBGMFreeFormatOnly
のような関数の追加をお願いするのが妥当ですが、はたして需要はあるのだろうか。
・・・はやいところopusをmp4コンテナに入れるための規格が出ないかなぁ・・・。aacとかいう邪悪なフォーマットとおさらばしたい。
|
Re: mp3の読み込みを非対応化 ( No.2 ) |
- 名前:was-blue.0793 日時:2017/01/07 19:04
>>yumetodoさん
Windowsにデフォルトでmp3のコーデックがあるという話は聞いたことがあったのですが、
Windowsの機能、もしくはDirectX(DirectShow、DirectSoundなど)の機能を使う場合においてもmp3が使えるのかどうかについては微妙なところだと思います。
(ソースコードを公開しない限り外部からはどのような方法でmp3を読み込んでいるかわからないため)
拡張子で判定する場合、中身がmp3で拡張子がmp3以外の音源データを読み込まないようにできないという欠点があります。
仮にLoadSoundMemFreeFormatOnlyのような関数があったとしても、バイナリレベルでは元のLoadSoundMemの関数定義自体は残っていそうなので
完全にmp3の読み込みができないとは言い切れなさそうです(この辺りを言い出してしまうときりがないかもしれないですが……)。
ライブラリそのものを改造したほうがいいのかもしれませんが、そこまでの実力と労力は私にはありません……。
|
Re: mp3の読み込みを非対応化 ( No.3 ) |
- 名前:管理人 日時:2017/01/08 06:31
以下の関数でサウンドデータの読み込み処理をキャンセルすることができます
// 使用しないサウンドデータ読み込み処理のマスクを設定する( DX_READSOUNDFUNCTION_PCM 等 )
int SetDisableReadSoundFunctionMask( int Mask ) ;
#define DX_READSOUNDFUNCTION_PCM (1 << 0) // PCM の読み込み処理
#define DX_READSOUNDFUNCTION_OGG (1 << 1) // Ogg Vorbis の読み込み処理
#define DX_READSOUNDFUNCTION_OPUS (1 << 2) // Opus の読み込み処理
#define DX_READSOUNDFUNCTION_ACM (1 << 3) // ACM を使用した読み込み処理
#define DX_READSOUNDFUNCTION_MP3 (1 << 4) // ACM を使用した MP3 の読み込み処理
#define DX_READSOUNDFUNCTION_DSMP3 (1 << 5) // DirectShow を使用した MP3 の読み込み処理
例えば Windows にインストールされているコーデックや DirectShow を使用した MP3 の
読み込み処理をキャンセルしたい場合は、LoadSoundMem を実行する前に
SetDisableReadSoundFunctionMask( DX_READSOUNDFUNCTION_ACM | DX_READSOUNDFUNCTION_MP3 | DX_READSOUNDFUNCTION_DSMP3 ) ;
を実行しておけば大丈夫です
よろしければお使いください m(_ _)m
|
Re: mp3の読み込みを非対応化 ( No.4 ) |
- 名前:yumetodo 日時:2017/01/10 00:49
うわ、DX_READSOUNDFUNCTION_xxxってこういうときに使うのか、読み飛ばしていた・・・。
|
Re: mp3の読み込みを非対応化 ( No.5 ) |
- 名前:was-blue.0793 日時:2017/01/18 22:54
>>管理人さん
方法のご提示ありがとうございます。
重ねて質問する形となり申し訳ございませんが質問させていただきます。
mp3を読み込みできるかできないか(サウンドハンドルを作成するかどうか)に関わらず、mp3かどうかの判定は内部で行っているのでしょうか?
その場合、ACMかDirectShowを用いて読み込めるかどうかを判定しているのでしょうか?
|
Re: mp3の読み込みを非対応化 ( No.6 ) |
- 名前:管理人 日時:2017/01/19 00:06
> mp3を読み込みできるかできないか(サウンドハンドルを作成するかどうか)に関わらず、mp3かどうかの判定は内部で行っているのでしょうか?
SetDisableReadSoundFunctionMask( DX_READSOUNDFUNCTION_ACM | DX_READSOUNDFUNCTION_MP3 | DX_READSOUNDFUNCTION_DSMP3 ) ;
↑が実行されている場合はそもそも mp3 かどうかの判定も行いません、その他の wav や ogg かどうかを
判定して、当然 wav や ogg ではないので読み込めずエラーになります
↑を実行していない通常の場合、ACM で mp3 を読み込む場合は自前でヘッダ解析をして mp3 かどうかを判断し、
DirectShow の場合は DirectShow に mp3 かどうかの判定を任せています
|
Re: mp3の読み込みを非対応化 ( No.7 ) |
- 名前:was-blue.0793(解決) 日時:2017/01/27 00:09
>>管理人さん
重ねての質問への回答ありがとうございます。
またmp3の読み込み非対応化についても期待通りmp3が読み込まれなくなりました。
また何か質問があれば投稿させていただきます。
|