トップページ > 記事閲覧
mp3の読み込みを非対応化
名前:was-blue.0793 日時: 2017/01/05 23:50

こんにちは。2度目の質問失礼いたします。 音源データをユーザー側から読み込み再生するというプログラムを作成しているのですが、 mp3特許の都合上、mp3の読み込みをできなくしたいです。 読み込みをできなくするとは、例えばPlaySoundFileでmp3を指定しても再生されなくなり、 LoadSoundMemでmp3を指定しても「-1」が返ってくるといったことです。 DXライブラリがどのようにしてmp3を読み込めるようにしているかはわかりませんが(DirectShow?)、 mp3が読み込めてしまうと後々問題になりそうな気がしたので質問させていただきました。
メンテ

Page: 1 |

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が読み込まれなくなりました。 また何か質問があれば投稿させていただきます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存