Direct系でのmp3ファイルの再生について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
赤鬼
記事: 58
登録日時: 11年前

Direct系でのmp3ファイルの再生について

#1

投稿記事 by 赤鬼 » 11年前

mp3を扱いたい場合、DirectSoundで扱う場合とDirectShowで扱う場合どちらが良いのでしょう?
DirectShowを使わない場合(ACMライブラリ辺りを使って変換してやるという方法位しか分からないのですが)、自作での変換のプログラムに権利関係の問題が絡んでくるとか聞きました。就活用の作品的なプログラムなのですが、そこら辺ってどうなるんでしょうか?
もしくはエンコードのみをDirectShowでコンバートしてそのデータをDirectSoundに流すという方式の方が良いのでしょうか?

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: Direct系でのmp3ファイルの再生について

#2

投稿記事 by ISLe » 11年前

わたしの個人的な認識では、DirectSoundは即時性が要求される場合(ゲームの効果音など)、DirectShowはそうでもない場合(音楽プレイヤーなど)に使うという感じです。
MP3かどうかではなく使用目的で決めます。

ゲームなどMP3のデータを含むアプリケーションソフトを制作する場合、既存のライセンス済みライブラリを使用する場合でも、ライセンスを要求されます。
フリーソフトの場合は5000セットまではライセンス料が免除されます。
非営利目的の場合なので、フリーの体験版などは含まれないと思われます(未確認)。
就活が営利目的とみなされるかどうかは分からないのでライセンサーと相談するのが良いと思います。

赤鬼
記事: 58
登録日時: 11年前

Re: Direct系でのmp3ファイルの再生について

#3

投稿記事 by 赤鬼 » 11年前

ISLe さんが書きました:わたしの個人的な認識では、DirectSoundは即時性が要求される場合(ゲームの効果音など)、DirectShowはそうでもない場合(音楽プレイヤーなど)に使うという感じです。
MP3かどうかではなく使用目的で決めます。

ゲームなどMP3のデータを含むアプリケーションソフトを制作する場合、既存のライセンス済みライブラリを使用する場合でも、ライセンスを要求されます。
フリーソフトの場合は5000セットまではライセンス料が免除されます。
非営利目的の場合なので、フリーの体験版などは含まれないと思われます(未確認)。
就活が営利目的とみなされるかどうかは分からないのでライセンサーと相談するのが良いと思います。
ISleさんお早い回答有難うございます!
なるほど、やはりそうでしたか。
DirectShowは何とか動画を再生できた(つまりいろんなところの知識がおぼろげ)レベルなのでよく分かりませんが即時ではないのですね。(ストリーミング再生だったからでしたっけ。原因としては逐次メモリ読み込みを行うのでファイルアクセスやメモリアクセスが多いから、ですかね)

MP3のデータを含んでいるだけでライセンスを要求されるのですね。
ちなみに5000セットと言うのはファイルの個数ですか?
MP3をエンコードしてwavに直して使うのはプログラマとしてどうなのかなと思ったので、MP3をそのまま使える用にプログラムを書こうと思ったのですがライセンスの問題があるならMP3をエンコードしてwavに直したほうが良さそうに思えてきました。また、圧縮が必要(ファイルサイズが物凄く大きい)ならOggを使ったほうが良さそうですね。
SDKあるみたいですし、版権フリーですし。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: Direct系でのmp3ファイルの再生について

#4

投稿記事 by ISLe » 11年前

DirectShowはオンメモリでも再生できますけど。
おっしゃるとおりストリーミング再生もできるのでゲームでもBGM用途とかでは使われます。
赤鬼 さんが書きました:ちなみに5000セットと言うのはファイルの個数ですか?
製品(?)、パッケージ(?)、どういう表現をしたら良いかわかりませんが、ゲームならゲームとして遊べるように配布するひとまとまりを5000個までということです。

"MP3 ライセンス"で検索すれば日本語で解説されたサイトが見付かりますよ。
そこには5000コピーと書いてありますが。

赤鬼
記事: 58
登録日時: 11年前

Re: Direct系でのmp3ファイルの再生について

#5

投稿記事 by 赤鬼 » 11年前

ISLe さんが書きました:DirectShowはオンメモリでも再生できますけど。
そうなんですか。有難うございます。
やり方さっぱり分かりませんがDirectShowは覚えなくてはならないことが山ほどありそうなのでまた後ほど質問させて頂くかもしれません。
ISLe さんが書きました: 製品(?)、パッケージ(?)、どういう表現をしたら良いかわかりませんが、ゲームならゲームとして遊べるように配布するひとまとまりを5000個までということです。

"MP3 ライセンス"で検索すれば日本語で解説されたサイトが見付かりますよ。
そこには5000コピーと書いてありますが。
なるほど。作品5000コピー分というわけですね!
有難うございます。
調べてみたところ5000コピーまではフリーで大丈夫だとか。
それ以上だとライセンス料を支払う必要が出るみたいですね。

危ない橋を渡りたくないのでMP3では無くOGGあたりを使う事にします。
でも、OGGをDirectShowで使うには別途のコーデック必要なんでしたっけ。
もしくは、DirectSoundでストリーミングさせるか。
OGGの読み込み

コンバート

通知イベント作成設定

サウンドバッファ初期化

イベント通知が来たら ⇔ 一部ロックして書き込み //此処を何度も繰り返し。

再生終了ORループ(読み込み完了していたら書き込まない)

ああ、なんて素晴らしそうな図だろう。物凄く苦労しそうな気がする(笑)
スレッド分割してありますから、一括でも良いかなとか思っちゃいますね。loding画面作ってお茶を濁すとか・・・駄目ですかね。
やっぱり、ストリーミングを作るのが無難ですね。

(ちなみに、圧縮音源を使うのはBGM等の用途の為です)
皆さんはBGMとか如何してるんでしょうか?
自分でストリーミングを作っているのでしょうか?
それともMP3とかをDirectShowで、でしょうか?

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: Direct系でのmp3ファイルの再生について

#6

投稿記事 by ISLe » 11年前

libogg,libvorbisを使うのはダメなんですか?

DirectShowフィルタ使えばコーデックを変更しても再生処理のコードを変更しなくても済みますが。
赤鬼 さんが書きました:ああ、なんて素晴らしそうな図だろう。物凄く苦労しそうな気がする(笑)
この手の処理は、SDKのサンプルコードからコピペして自分の使いやすいようにインターフェース組む作業を一回やれば終いですよ。

赤鬼
記事: 58
登録日時: 11年前

Re: Direct系でのmp3ファイルの再生について

#7

投稿記事 by 赤鬼 » 11年前

ISLe さんが書きました:libogg,libvorbisを使うのはダメなんですか?
DirectShowフィルタ使えばコーデックを変更しても再生処理のコードを変更しなくても済みますが。
libogg,libvorbisでPCMへの変換なら分かるんですが、DirectShowは拙いのでさっぱりです。
取り敢えず、色々弄ってみます。
ISLe さんが書きました: この手の処理は、SDKのサンプルコードからコピペして自分の使いやすいようにインターフェース組む作業を一回やれば終いですよ。
サンプルコードなんですがサウンドのだけすっぽり抜けてて、多分インストールの際のミスか、操作を過って別のフォルダに移ってるかだと思います(汗)。
なので、サイトを参考にして、一から作ってます。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: Direct系でのmp3ファイルの再生について

#8

投稿記事 by ISLe » 11年前

赤鬼 さんが書きました:サンプルコードなんですがサウンドのだけすっぽり抜けてて、多分インストールの際のミスか、操作を過って別のフォルダに移ってるかだと思います(汗)。
なので、サイトを参考にして、一から作ってます。
DirectShowはDirectX SDKにあったものがWindows SDKに移りましたからSDKのバージョンによってはサンプルが見付からないかもしれないですね。

最新のWindows SDK 8.0に至ってはDirectX SDKが統合されましたし、ドキュメントもサンプルも同梱されなくなりました。
MSDNライブラリのサイトを見ろということなんですが、日本語サイトは追い付いてないので英語サイト見るしかないですし。

アバター
lriki
記事: 88
登録日時: 13年前

Re: Direct系でのmp3ファイルの再生について

#9

投稿記事 by lriki » 11年前

何年か前からマイクロソフトは「DirectSoundよりもXAudio使ってね」という方向でいろいろ案内してるので、
新しいDirectXSDKにDirectSoundのサンプルは入ってません。
音声再生はXAudio2としてサンプルに入っています。

DirectSoundでお話が進んでる中に横槍を入れるようですが、
個人的にはXAudio2の方が使いやすくてオススメです。
エコー等のエフェクトや3Dサウンド等、特に不足なく使えますし。

赤鬼
記事: 58
登録日時: 11年前

Re: Direct系でのmp3ファイルの再生について

#10

投稿記事 by 赤鬼 » 11年前

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の方が良さそうですね。

アバター
lriki
記事: 88
登録日時: 13年前

Re: Direct系でのmp3ファイルの再生について

#11

投稿記事 by lriki » 11年前

赤鬼 さんが書きました:また、comのお作法であるQueryInterfaceが無くなってるような。
それと、ちょっと調べて弄ってみたのですが強調レベルとか設定しなくて良いんですか。
初触りに付きそこら辺不明です。書いてませんし(単に読み落としただけ?)。
特に必要ありません。
初期化だけなら

CoInitializeEx()

XAudio2Create()

IXAudio2::CreateMasteringVoice()

でOKです。
あとはWAVEFORMATEXと音声データを用意して

IXAudio2::CreateSourceVoice()

IXAudio2SourceVoice::SubmitSourceBuffer()

IXAudio2SourceVoice::Start()

で音が鳴ります。
簡単!

赤鬼
記事: 58
登録日時: 11年前

Re: Direct系でのmp3ファイルの再生について

#12

投稿記事 by 赤鬼 » 11年前

一通り目を通しました。(音鳴らしたり、全体ループ位はしました。それと両方供のMSDNまちがってましたね。xaudio2.lib無くてXAPOBase.libでした、ファイルが無いのかと思って検索掛けても見つからず、しぶしぶ検索したらインターネットで違うわかり、結局2時間無駄にしましたよ。)

で、違うところと言うと、一時停止しか存在しない。(停止で最初に戻らない。)
これはフラッシュして、再セットで出来るとおもいますが。
問題はDirectSoundにあったイベントやSetCurrentPositionとかが無いと思うのですが、シークそのもの操作が出来無いのでしょうか?たぶんcall_backがイベントの代わりだと思うのですがシーク関係は存在するのでしょうか。
もしくは、再生位置を指定したい場合、先頭アドレスをずらしてセットするということでしょうか。
つまり、XAUDIO2_BUFFER構造体に入れる先頭配列を指定分位置をずらし、バッファのサイズを変更しsubmitするというわけですか?

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

Re: Direct系でのmp3ファイルの再生について

#13

投稿記事 by ISLe » 11年前

赤鬼 さんが書きました:問題はDirectSoundにあったイベントやSetCurrentPositionとかが無いと思うのですが、シークそのもの操作が出来無いのでしょうか?たぶんcall_backがイベントの代わりだと思うのですがシーク関係は存在するのでしょうか。
再生グラフからシーク用のインターフェースを取得してそちらから操作できます。
『DirectShow シーク』で検索すれば豊富な解説記事やサンプルコードが見付かると思います。

(追記)
すみません。DirectShowのことだと勘違いしました。
XAudioの話をするなら新しくスレを立てたほうが良い気がします。

赤鬼
記事: 58
登録日時: 11年前

Re: Direct系でのmp3ファイルの再生について

#14

投稿記事 by 赤鬼 » 11年前

ISLe さんが書きました:XAudioの話をするなら新しくスレを立てたほうが良い気がします。
分かりました!
では、取敢えずこっちは解決ということで。

閉鎖

“C言語何でも質問掲示板” へ戻る