1

これは FMOD のようなもので比較的簡単な作業だと思っていましたが、うまくいきません。サンプルコード netstream でさえ、うまくいかないようです。netstream サンプル プログラムで再生しようとしている mp3 に関係なく、次のエラーが発生します。

FMOD error! (20) Couldn't perform seek operation.  This is a limitation of the medium (ie netstreams) or the file format.

これが何を意味するのかよくわかりません。これはまさに netstream サンプル プログラムの目的ではないでしょうか? インターネットからファイルをストリーミングするには?

createSound メソッドを渡すことができません

result = system->createSound(argv[1], FMOD_HARDWARE | FMOD_2D | FMOD_CREATESTREAM | FMOD_NONBLOCKING,  0, &sound);

編集:

これは、マシューの回答を読んだ後に変更したものです

FMOD_CREATESOUNDEXINFO soundExInfo;
memset(&soundExInfo, 0, sizeof(FMOD_CREATESOUNDEXINFO));
soundExInfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
soundExInfo.suggestedsoundtype = FMOD_SOUND_TYPE_MPEG;

result = system->createSound(argv[1], FMOD_HARDWARE | FMOD_2D | FMOD_CREATESTREAM | FMOD_NONBLOCKING | FMOD_IGNORETAGS,  &soundExInfo, &sound);

使用するファイルに応じて、2 つの異なるエラーが発生します。

テスト 1 の URL: http://kylegobel.com/test.mp3

テスト 1 エラー: (25) サポートされていないファイルまたはオーディオ形式です。


テスト 2 の URL: http://kylegobel.com/bullet.mp3

テスト 2 エラー: (20) シーク操作を実行できませんでした。これは、メディア (つまり、ネットストリーム) またはファイル形式の制限です。

変更を行う前は、netstream を使用して "C:\test.mp3" を再生できました。これは Web 上の test.mp3 という名前の同じファイルですが、上記の変更では機能しなくなりました。これらのファイルの形式が間違っているだけでしょうか? この分野の知識が不足していて申し訳ありません。私は音についてあまり知りませんが、理解しようとしています。

ありがとう、カイル

4

1 に答える 1

3

MP3 の先頭に大量のタグがある可能性があるため、FMOD はそれらを読み取り、先頭にシークしようとします (これはネット ストリームであるため実行できません)。FMOD_IGNORETAGS と、おそらく FMOD_CREATESOUNDEXINFO を、suggestedsoundtype を FMOD_SOUND_TYPE_MPEG に設定して使用してみてください。

それでもうまくいかない場合は、既知の動作していない MP3 ストリームに URL を投稿していただけますか?

編集: 問題のファイルには約 60KB のタグ データが含まれています。FMOD はその内容を喜んで読み取りますが、MPEG コーデックが機能するには、いくつかの小さなシークを行う必要があります。ネットストリームをシークできないため、すべてのシークは低レベルのファイル バッファ内に含まれている必要があります。ファイルのバッファ サイズを微調整する場合は、少し大きくすると、この制限を克服できます。System::setFileSystem の「blockalign」パラメータを参照してください。

于 2011-08-22T23:14:38.737 に答える