トップページ > 過去ログ > 記事閲覧
再生できる音声ファイルの最大長について
名前:DG 日時: 2010/03/28 17:55

再生時間が最大10分のwavまたはmp3ファイルをBGMとして流すことを考えています。 LoadSoundMemしてから、PlaySoundMemして再生したところ、 音が全く再生されませんでした(ハンドラは正常に取得できていました)。 そこで、再生時間が違う音声ファイルで色々試したところ、 再生できなくなる長さの閾値が380秒と381秒の間にあるということが確認できました。 現在、SetCreateSoundDataType(DX_SOUNDDATATYPE_MEMPRESS)をし、 ストリーミング再生で10分の長さでも問題なく再生できています。 DX_SOUNDDATATYPE_MEMNOPRESSの場合は 正常に再生できる長さに限界(だいたい380秒、環境依存?)があるという事でよろしいでしょうか? (メモリは有限なので上限があるのは当たり前ですが・・・) あとSetCreateSoundDataType(DX_SOUNDDATATYPE_MEMNOPRESS_PLUS)とすると -1の返り値が来て、アプリケーションが異常終了してしまいます。 メモリが確保できなくてエラー吐いてるのかな?と思い 短い音声ファイルなどで試してみましたが、変わりませんでした。 DX_SOUNDDATATYPE_MEMNOPRESS(こちらは正常に終了する)との違いは、 一気に読み込むか、再生しながら順次読み込むかだけで最終的に同じ状態になるとの認識でしたので なぜ片方だけエラーになるのかがよくわかりません。 どなたか情報をご存知でしたら 是非教えてください

Page: 1 | 2 |

Re: 再生できる音声ファイルの最大長について ( No.4 )
名前:いっち 日時:2010/03/29 20:25

早速の対応ありがとうございます。 > なので、3分以上のサウンドデータの場合は自動的に DX_SOUNDDATATYPE_MEMPRESS の設定で > 読み込むように処理を変更することにしました 6m17sのmp3と6m27sのmp3のファイルが共に再生されることを確認しました。 ただし、どのタイプで再生されているかまでは、明確に確認することは出来ませんでした。 (Load時間の変化は確認できましたが) > なので、応急処置として DX_SOUNDDATATYPE_MEMNOPRESS_PLUS が指定された場合は DX_SOUNDDATATYPE_MEMNOPRESS が > 指定されたものとして処理するように処理を変更しました、ご迷惑お掛けして申し訳ありません DX_SOUNDDATATYPE_MEMNOPRESS_PLUSを指定して再生を行ってみましたが、 前バージョンと変わらず、アプリが強制終了となりました。 DGさん> 私の環境によるものかもしれませんので、 もし宜しければ、動作の確認もお願いできますでしょうか?
Re: 再生できる音声ファイルの最大長について ( No.5 )
名前:管理人 日時:2010/03/30 04:48

> DX_SOUNDDATATYPE_MEMNOPRESS_PLUSを指定して再生を行ってみましたが、 > 前バージョンと変わらず、アプリが強制終了となりました。 応急処置コードがバグっていました orz 修正したものをアップしましたので、よろしければお試し下さい 何度も申し訳ありません m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: 再生できる音声ファイルの最大長について ( No.6 )
名前:いっち 日時:2010/03/30 12:29

修正確認しました。 お忙しい中の対応、ありがとうございます。
Re: 再生できる音声ファイルの最大長について ( No.7 )
名前:DG 日時:2010/03/30 20:59

こちらでもテストしました。 DX_SOUNDDATATYPE_MEMNOPRESS DX_SOUNDDATATYPE_MEMNOPRESS_PLUS DX_SOUNDDATATYPE_MEMPRESS DX_SOUNDDATATYPE_FILE 全てについて、10分のmp3,wavで再生できることを確認しました。 対応ありがとうございました!
Re: 再生できる音声ファイルの最大長について ( No.8 )
名前:Masao 日時:2010/03/30 21:10

類似問題で失礼します。 3分のwavは再生できましたが、3分前後のmp3 はLoadSoundMemでの戻り値が-1 になってしまうようです。 いえ、間違えました。 すべてのmp3 でロードが失敗するみたいです。 環境 Windows7 64bit ライブラリ:ついさっきこちらのスレで落とした 3.02b SetCreateSoundDataType 関数に関係なくおきています。 皆様は同様の症状がありませんか?
Re: 再生できる音声ファイルの最大長について ( No.9 )
名前:DG 日時:2010/03/30 21:15

Masaoさんの書き込みを受けて、こちらでも 179秒と180秒のmp3ファイルを4つのモード全てで再テストしましたが、全て正常に再生出来ました。 こちらの環境は WindowsXP SP3 32bit ライブラリはMasaoさんと同じです
Re: 再生できる音声ファイルの最大長について ( No.10 )
名前:Masao 日時:2010/04/01 10:31

追加情報です。 2.25b で、リビルドし同じコードで行うと、やはり失敗しました。 もしかして、OS…? いままで、ogg か wav くらいしか使ったことがなかったので、びっくりです。 PCの再起動は試しました。 音声ファイルは、他のメディアプレイヤーで正常に再生できます。 wav ファイルと同じディレクトリに mp3 をいれてあり、(LoadSoundMemでのファイル名を)wavからmp3へ拡張子を変えただけなので、パスの指定ミスはありません。(相対パスです。)
Re: 再生できる音声ファイルの最大長について ( No.11 )
名前:いっち 日時:2010/03/30 23:42

私の環境では問題なく再生できています。 事象の再現するソースとMasaoさんの環境でビルドしたモジュールをアップローダでご提供いただけますでしょうか? 読み込むファイル名を"test.mp3"等にして頂ければ自前で用意します。
Re: 再生できる音声ファイルの最大長について ( No.12 )
名前:Ma 日時:2010/03/31 00:06

ttp://www1.axfc.net/uploader/Sc/so/98458.zip PD: DXライブラリ 検証に必要そうな、Log.txtも同封しました。 Releaseモードでコンパイルしてあります。 (すいません、単語に疎いものですからモジュールがどこまでを指すものなのか分かりません。) 検証に使ったmp3も同封です。 私の環境の場合、handle=-1 になります。 Log.txt には 629:音声ファイルのPCMへの変換に失敗しました こうありました。
Re: 再生できる音声ファイルの最大長について ( No.13 )
名前:いっち 日時:2010/03/31 02:03

ありがとうございます。 ご提供頂いた、モジュールとmp3ファイルで試してみたところ、私の環境では問題なく再生されました。 申し訳ありませんが、私ではこの事象が62bit版Windows7固有の事象なのか、CODECとの相性の問題なのかはわかりません。 管理人さんや他の方にご意見を頂くのが宜しいかと思います。 あまりお役に立てず、すみません。
Re: 再生できる音声ファイルの最大長について ( No.14 )
名前:Masao 日時:2010/03/31 20:46

>あまりお役に立てず、すみません。 いえいえ、わざわざ検証していただいてありがとうございます。 管理人さん待ちとさせていただきます。
Re: 再生できる音声ファイルの最大長について ( No.15 )
名前:管理人 日時:2010/04/05 01:50

> Maさん = Masaoさん ? アップしていただいた実行ファイルを試させていただきましたが、正常に再生することができましたので 恐らくMaさんのPCにインストールされているコーデックとDXライブラリのACMを使ったmp3 デコードプログラムとの相性の問題だと思います 外部のコーデックを使用している以上、再生できることを100%保証することができないのが辛いところです・・・ ( 権利関係の問題でmp3のデコードプログラムをライブラリの中に含めるわけにもいかず・・・ ) デコードにACMではなく DirectShow を使うという手もあるのですが、今考えられる形で実装すると 確実にメモリを大量に消費することに・・・
Re: 再生できる音声ファイルの最大長について ( No.16 )
名前:Masao 日時:2010/04/05 12:11

>管理人様 Maさん = Masaoさん ? そのとおりです。 すいません。たまに(うっかり)端折ったりしますorz ここの掲示板ではできる限りMasao でキープしますので、よろしくおねがいします。 なるほど、コーデックが原因でしたか…。 ところで、どのコーデックが推奨とかあるのでしょうか? (これから適当に検索してインストールして試しますが、念のためおきかせください。) Windows7 64bit 環境ですが、 音コーデックのリストは以下のように、なっておりました。 Audio Codecs Type Name Format Binary Version ACM Microsoft IMA ADPCM CODEC 0011 imaadp32.acm 6.1.7600.16385 ACM Microsoft CCITT G.711 A-Law and u-Law CODEC 0007 msg711.acm 6.1.7600.16385 ACM Microsoft GSM 6.10 Audio CODEC 0031 msgsm32.acm 6.1.7600.16385 ACM Microsoft ADPCM CODEC 0002 msadp32.acm 6.1.7600.16385 ACM Messenger Audio Codec 028E sirenacm.dll 14.0.8089.726 ACM Microsoft PCM Converter 0001 LameACM.acm 0.9.1.0 ACM LAME MP3 Codec v0.9.2 - 3.98.4 0001 LameACM.acm 0.9.1.0 DMO WMAudio Decoder DMO 0160, 0161, 0162, 0163 WMADMOD.DLL 6.1.7600.16385 DMO WMAPro over S/PDIF DMO 0162 WMADMOD.DLL 6.1.7600.16385 DMO WMSpeech Decoder DMO 000A, 000B WMSPDMOD.DLL 6.1.7600.16385 DMO MP3 Decoder DMO 0055 mp3dmod.dll 6.1.7600.16385 で、 Lame mp3 codec は、ついさきほどインストールしたコーデックです。 これで再起動しても、正常に再生できなかったので、 mp3dmod.dll が悪さをしているとおもって、ファイル消去で葬ってやったんですが、なおらず…。 コーデックについては詳しくないので、最初から入っているコーデックのアンインストール方法とかよくわからないです…。 DXライブラリでmp3を正常に再生できるようにするために必要なステップを、よろしければおしえてください。
Re: 再生できる音声ファイルの最大長について ( No.17 )
名前:管理人 日時:2010/04/19 00:26

私もコーデックについてはよく分かっていません(汗 なので正常に再生するためのステップも・・・わかりません 現在 DirectShow で mp3 を pcm に変換する代替手段を準備中ですので、 もう少しお時間を下さい
Re: 再生できる音声ファイルの最大長について ( No.18 )
名前:Masao 日時:2010/04/20 08:06

了解です。お手数おかけして、申し訳ありません。 よろしくお願いします。
Re: 再生できる音声ファイルの最大長について ( No.19 )
名前:管理人 日時:2010/04/25 23:47

DirectShow の既存機能でさっくり実装するつもりだったのですが返り討ちに遭いました 腰を据えて取り掛かろうと思いますので申し訳ありませんがゴールデンウイーク辺りまでお時間を下さい orz
Re: 再生できる音声ファイルの最大長について ( No.20 )
名前:Masao 日時:2010/04/27 09:20

了解です。 繰り返しですが、お手数おかけして申し訳ありません・・・><
Re: 再生できる音声ファイルの最大長について ( No.21 )
名前:管理人 日時:2010/05/01 17:36

お待たせしました、DirectShow を使って MP3 をデコードする機能を実装してみましたので よろしければお試し下さい m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) ただ、DirectShow のシーク機能の正確性の関係上データタイプは常に DX_SOUNDDATATYPE_MEMNOPRESS になってしまいます つまり、読み込み時間が長く、且つ生PCMを持つので 5MB くらいのMP3ファイルを読み込むと 50MB くらいメモリを喰います・・・ こちらはデコード後のPCMをテンポラリファイルに出力するようにするか悩み中です・・・ あ、因みに、原因は分からないのですが、デバッグ実行すると LoadSoundMem で止まるかもしれません というのも、DirectShow のあるAPIを呼んだときに Windows7 + VisualStudio2008 の環境でAPIから 何時まで経っても出てこなかったからです・・・ なので、もし止まってしまったら普通の実行をしてみてください、多分普通に動きます (・・;
Re: 再生できる音声ファイルの最大長について ( No.22 )
名前:Masao 日時:2010/05/02 10:58

対応ありがとうございます。 正常に動作することを確認しました。 ちなみに、デバッグ実行でも正常にロードできました。 ただ、やはりPCM変換(?)に時間がかかってしまうようで、LoadSoundMemにあかる時間は私の環境では14MBのmp3ファイルが約9秒、34KBのmp3ファイルは約.45秒かかるようです。 たぶん、DX_SOUNDDATATYPE_MEMNOPRESSのためですよね? でも、今は再生できるようになっただけで満足です。ありがとうございました。
Re: 再生できる音声ファイルの最大長について ( No.23 )
名前:管理人 日時:2010/05/02 23:35

> たぶん、DX_SOUNDDATATYPE_MEMNOPRESSのためですよね? はい、その通りです 何れ機会があったら逐次デコードなどを試してみたいと考えています

Page: 1 | 2 |