Direct系でのmp3ファイルの再生について
Direct系でのmp3ファイルの再生について
mp3を扱いたい場合、DirectSoundで扱う場合とDirectShowで扱う場合どちらが良いのでしょう?
DirectShowを使わない場合(ACMライブラリ辺りを使って変換してやるという方法位しか分からないのですが)、自作での変換のプログラムに権利関係の問題が絡んでくるとか聞きました。就活用の作品的なプログラムなのですが、そこら辺ってどうなるんでしょうか?
もしくはエンコードのみをDirectShowでコンバートしてそのデータをDirectSoundに流すという方式の方が良いのでしょうか?
DirectShowを使わない場合(ACMライブラリ辺りを使って変換してやるという方法位しか分からないのですが)、自作での変換のプログラムに権利関係の問題が絡んでくるとか聞きました。就活用の作品的なプログラムなのですが、そこら辺ってどうなるんでしょうか?
もしくはエンコードのみをDirectShowでコンバートしてそのデータをDirectSoundに流すという方式の方が良いのでしょうか?
Re: Direct系でのmp3ファイルの再生について
わたしの個人的な認識では、DirectSoundは即時性が要求される場合(ゲームの効果音など)、DirectShowはそうでもない場合(音楽プレイヤーなど)に使うという感じです。
MP3かどうかではなく使用目的で決めます。
ゲームなどMP3のデータを含むアプリケーションソフトを制作する場合、既存のライセンス済みライブラリを使用する場合でも、ライセンスを要求されます。
フリーソフトの場合は5000セットまではライセンス料が免除されます。
非営利目的の場合なので、フリーの体験版などは含まれないと思われます(未確認)。
就活が営利目的とみなされるかどうかは分からないのでライセンサーと相談するのが良いと思います。
MP3かどうかではなく使用目的で決めます。
ゲームなどMP3のデータを含むアプリケーションソフトを制作する場合、既存のライセンス済みライブラリを使用する場合でも、ライセンスを要求されます。
フリーソフトの場合は5000セットまではライセンス料が免除されます。
非営利目的の場合なので、フリーの体験版などは含まれないと思われます(未確認)。
就活が営利目的とみなされるかどうかは分からないのでライセンサーと相談するのが良いと思います。
Re: Direct系でのmp3ファイルの再生について
ISleさんお早い回答有難うございます!ISLe さんが書きました:わたしの個人的な認識では、DirectSoundは即時性が要求される場合(ゲームの効果音など)、DirectShowはそうでもない場合(音楽プレイヤーなど)に使うという感じです。
MP3かどうかではなく使用目的で決めます。
ゲームなどMP3のデータを含むアプリケーションソフトを制作する場合、既存のライセンス済みライブラリを使用する場合でも、ライセンスを要求されます。
フリーソフトの場合は5000セットまではライセンス料が免除されます。
非営利目的の場合なので、フリーの体験版などは含まれないと思われます(未確認)。
就活が営利目的とみなされるかどうかは分からないのでライセンサーと相談するのが良いと思います。
なるほど、やはりそうでしたか。
DirectShowは何とか動画を再生できた(つまりいろんなところの知識がおぼろげ)レベルなのでよく分かりませんが即時ではないのですね。(ストリーミング再生だったからでしたっけ。原因としては逐次メモリ読み込みを行うのでファイルアクセスやメモリアクセスが多いから、ですかね)
MP3のデータを含んでいるだけでライセンスを要求されるのですね。
ちなみに5000セットと言うのはファイルの個数ですか?
MP3をエンコードしてwavに直して使うのはプログラマとしてどうなのかなと思ったので、MP3をそのまま使える用にプログラムを書こうと思ったのですがライセンスの問題があるならMP3をエンコードしてwavに直したほうが良さそうに思えてきました。また、圧縮が必要(ファイルサイズが物凄く大きい)ならOggを使ったほうが良さそうですね。
SDKあるみたいですし、版権フリーですし。
Re: Direct系でのmp3ファイルの再生について
DirectShowはオンメモリでも再生できますけど。
おっしゃるとおりストリーミング再生もできるのでゲームでもBGM用途とかでは使われます。
"MP3 ライセンス"で検索すれば日本語で解説されたサイトが見付かりますよ。
そこには5000コピーと書いてありますが。
おっしゃるとおりストリーミング再生もできるのでゲームでもBGM用途とかでは使われます。
製品(?)、パッケージ(?)、どういう表現をしたら良いかわかりませんが、ゲームならゲームとして遊べるように配布するひとまとまりを5000個までということです。赤鬼 さんが書きました:ちなみに5000セットと言うのはファイルの個数ですか?
"MP3 ライセンス"で検索すれば日本語で解説されたサイトが見付かりますよ。
そこには5000コピーと書いてありますが。
Re: Direct系でのmp3ファイルの再生について
そうなんですか。有難うございます。ISLe さんが書きました:DirectShowはオンメモリでも再生できますけど。
やり方さっぱり分かりませんがDirectShowは覚えなくてはならないことが山ほどありそうなのでまた後ほど質問させて頂くかもしれません。
なるほど。作品5000コピー分というわけですね!ISLe さんが書きました: 製品(?)、パッケージ(?)、どういう表現をしたら良いかわかりませんが、ゲームならゲームとして遊べるように配布するひとまとまりを5000個までということです。
"MP3 ライセンス"で検索すれば日本語で解説されたサイトが見付かりますよ。
そこには5000コピーと書いてありますが。
有難うございます。
調べてみたところ5000コピーまではフリーで大丈夫だとか。
それ以上だとライセンス料を支払う必要が出るみたいですね。
危ない橋を渡りたくないのでMP3では無くOGGあたりを使う事にします。
でも、OGGをDirectShowで使うには別途のコーデック必要なんでしたっけ。
もしくは、DirectSoundでストリーミングさせるか。
OGGの読み込み
↓
コンバート
↓
通知イベント作成設定
↓
サウンドバッファ初期化
↓
イベント通知が来たら ⇔ 一部ロックして書き込み //此処を何度も繰り返し。
↓
再生終了ORループ(読み込み完了していたら書き込まない)
ああ、なんて素晴らしそうな図だろう。物凄く苦労しそうな気がする(笑)
スレッド分割してありますから、一括でも良いかなとか思っちゃいますね。loding画面作ってお茶を濁すとか・・・駄目ですかね。
やっぱり、ストリーミングを作るのが無難ですね。
(ちなみに、圧縮音源を使うのはBGM等の用途の為です)
皆さんはBGMとか如何してるんでしょうか?
自分でストリーミングを作っているのでしょうか?
それともMP3とかをDirectShowで、でしょうか?
Re: Direct系でのmp3ファイルの再生について
libogg,libvorbisを使うのはダメなんですか?
DirectShowフィルタ使えばコーデックを変更しても再生処理のコードを変更しなくても済みますが。
DirectShowフィルタ使えばコーデックを変更しても再生処理のコードを変更しなくても済みますが。
この手の処理は、SDKのサンプルコードからコピペして自分の使いやすいようにインターフェース組む作業を一回やれば終いですよ。赤鬼 さんが書きました:ああ、なんて素晴らしそうな図だろう。物凄く苦労しそうな気がする(笑)
Re: Direct系でのmp3ファイルの再生について
libogg,libvorbisでPCMへの変換なら分かるんですが、DirectShowは拙いのでさっぱりです。ISLe さんが書きました:libogg,libvorbisを使うのはダメなんですか?
DirectShowフィルタ使えばコーデックを変更しても再生処理のコードを変更しなくても済みますが。
取り敢えず、色々弄ってみます。
サンプルコードなんですがサウンドのだけすっぽり抜けてて、多分インストールの際のミスか、操作を過って別のフォルダに移ってるかだと思います(汗)。ISLe さんが書きました: この手の処理は、SDKのサンプルコードからコピペして自分の使いやすいようにインターフェース組む作業を一回やれば終いですよ。
なので、サイトを参考にして、一から作ってます。
Re: Direct系でのmp3ファイルの再生について
DirectShowはDirectX SDKにあったものがWindows SDKに移りましたからSDKのバージョンによってはサンプルが見付からないかもしれないですね。赤鬼 さんが書きました:サンプルコードなんですがサウンドのだけすっぽり抜けてて、多分インストールの際のミスか、操作を過って別のフォルダに移ってるかだと思います(汗)。
なので、サイトを参考にして、一から作ってます。
最新のWindows SDK 8.0に至ってはDirectX SDKが統合されましたし、ドキュメントもサンプルも同梱されなくなりました。
MSDNライブラリのサイトを見ろということなんですが、日本語サイトは追い付いてないので英語サイト見るしかないですし。
Re: Direct系でのmp3ファイルの再生について
何年か前からマイクロソフトは「DirectSoundよりもXAudio使ってね」という方向でいろいろ案内してるので、
新しいDirectXSDKにDirectSoundのサンプルは入ってません。
音声再生はXAudio2としてサンプルに入っています。
DirectSoundでお話が進んでる中に横槍を入れるようですが、
個人的にはXAudio2の方が使いやすくてオススメです。
エコー等のエフェクトや3Dサウンド等、特に不足なく使えますし。
新しいDirectXSDKにDirectSoundのサンプルは入ってません。
音声再生はXAudio2としてサンプルに入っています。
DirectSoundでお話が進んでる中に横槍を入れるようですが、
個人的にはXAudio2の方が使いやすくてオススメです。
エコー等のエフェクトや3Dサウンド等、特に不足なく使えますし。
Re: Direct系でのmp3ファイルの再生について
なる程そうでしたか。ISLe さんが書きました: DirectShowはDirectX SDKにあったものがWindows SDKに移りましたからSDKのバージョンによってはサンプルが見付からないかもしれないですね。
最新のWindows SDK 8.0に至ってはDirectX SDKが統合されましたし、ドキュメントもサンプルも同梱されなくなりました。
MSDNライブラリのサイトを見ろということなんですが、日本語サイトは追い付いてないので英語サイト見るしかないですし。
でも、英語の場合探し方が分からないんですよね。
streaming bufferで検索すると何故かストリームデータフォーマットが出てくるしorz
なんか別の言い方あるんですかね。
おお、そうだったんですか。梨樹 さんが書きました:何年か前からマイクロソフトは「DirectSoundよりもXAudio使ってね」という方向でいろいろ案内してるので、
新しいDirectXSDKにDirectSoundのサンプルは入ってません。
音声再生はXAudio2としてサンプルに入っています。
DirectSoundでお話が進んでる中に横槍を入れるようですが、
個人的にはXAudio2の方が使いやすくてオススメです。
エコー等のエフェクトや3Dサウンド等、特に不足なく使えますし。
Xaudioですが基本的な使いかたはdirectsoundと似てますね、というより、殆ど同じな気がします。
ただ物凄く作成のプロセスが略かれて簡単そうですね。
サウンドバッファにぶち込んで再生と同じようにソースボイスに波形データぶち込んで再生で良いですから。
wave波形データの抽出は別でやりますしね。(自分はmmio使ってますが)
また、comのお作法であるQueryInterfaceが無くなってるような。
それと、ちょっと調べて弄ってみたのですが強調レベルとか設定しなくて良いんですか。
初触りに付きそこら辺不明です。書いてませんし(単に読み落としただけ?)。
vista以降3DエフェクトがDirectSoundでかけられないとか、聞いたのでXaudioの方が良さそうですね。
Re: Direct系でのmp3ファイルの再生について
特に必要ありません。赤鬼 さんが書きました:また、comのお作法であるQueryInterfaceが無くなってるような。
それと、ちょっと調べて弄ってみたのですが強調レベルとか設定しなくて良いんですか。
初触りに付きそこら辺不明です。書いてませんし(単に読み落としただけ?)。
初期化だけなら
CoInitializeEx()
↓
XAudio2Create()
↓
IXAudio2::CreateMasteringVoice()
でOKです。
あとはWAVEFORMATEXと音声データを用意して
IXAudio2::CreateSourceVoice()
↓
IXAudio2SourceVoice::SubmitSourceBuffer()
↓
IXAudio2SourceVoice::Start()
で音が鳴ります。
簡単!
Re: Direct系でのmp3ファイルの再生について
一通り目を通しました。(音鳴らしたり、全体ループ位はしました。それと両方供のMSDNまちがってましたね。xaudio2.lib無くてXAPOBase.libでした、ファイルが無いのかと思って検索掛けても見つからず、しぶしぶ検索したらインターネットで違うわかり、結局2時間無駄にしましたよ。)
で、違うところと言うと、一時停止しか存在しない。(停止で最初に戻らない。)
これはフラッシュして、再セットで出来るとおもいますが。
問題はDirectSoundにあったイベントやSetCurrentPositionとかが無いと思うのですが、シークそのもの操作が出来無いのでしょうか?たぶんcall_backがイベントの代わりだと思うのですがシーク関係は存在するのでしょうか。
もしくは、再生位置を指定したい場合、先頭アドレスをずらしてセットするということでしょうか。
つまり、XAUDIO2_BUFFER構造体に入れる先頭配列を指定分位置をずらし、バッファのサイズを変更しsubmitするというわけですか?
で、違うところと言うと、一時停止しか存在しない。(停止で最初に戻らない。)
これはフラッシュして、再セットで出来るとおもいますが。
問題はDirectSoundにあったイベントやSetCurrentPositionとかが無いと思うのですが、シークそのもの操作が出来無いのでしょうか?たぶんcall_backがイベントの代わりだと思うのですがシーク関係は存在するのでしょうか。
もしくは、再生位置を指定したい場合、先頭アドレスをずらしてセットするということでしょうか。
つまり、XAUDIO2_BUFFER構造体に入れる先頭配列を指定分位置をずらし、バッファのサイズを変更しsubmitするというわけですか?
Re: Direct系でのmp3ファイルの再生について
再生グラフからシーク用のインターフェースを取得してそちらから操作できます。赤鬼 さんが書きました:問題はDirectSoundにあったイベントやSetCurrentPositionとかが無いと思うのですが、シークそのもの操作が出来無いのでしょうか?たぶんcall_backがイベントの代わりだと思うのですがシーク関係は存在するのでしょうか。
『DirectShow シーク』で検索すれば豊富な解説記事やサンプルコードが見付かると思います。
(追記)
すみません。DirectShowのことだと勘違いしました。
XAudioの話をするなら新しくスレを立てたほうが良い気がします。
Re: Direct系でのmp3ファイルの再生について
分かりました!ISLe さんが書きました:XAudioの話をするなら新しくスレを立てたほうが良い気がします。
では、取敢えずこっちは解決ということで。