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);

根据我使用的文件,我得到两个不同的错误。

测试 1 网址: http: //kylegobel.com/test.mp3

测试 1 错误:(25) 不支持的文件或音频格式。


测试 2 网址: http: //kylegobel.com/bullet.mp3

测试 2 错误:(20) 无法执行查找操作。这是媒体(即网络流)或文件格式的限制。

在进行更改之前,我可以使用 netstream 播放“C:\test.mp3”,它与网络上名为 test.mp3 的文件相同,但不再适用于上述更改。也许这些文件只是格式错误或其他什么?对不起,我缺乏这方面的知识,我真的不太了解声音,但试图弄清楚。

谢谢,凯尔

4

1 回答 1

3

MP3 可能在开头有大量标签,因此 FMOD 读取它们然后尝试回到开头(它不能这样做,因为它是一个网络流)。您可以尝试使用 FMOD_IGNORETAGS 和 FMOD_CREATESOUNDEXINFO 并将建议的声音类型设置为 FMOD_SOUND_TYPE_MPEG 吗?

If that does't work could you post the url to a known not working MP3 stream?

EDIT: The file in question has around 60KB of tag data, FMOD is happy to read over that stuff but for the MPEG codec to work it needs to do some small seeks. Since you cannot seek a netstream all the seeks must be contained inside the low level file buffer. If you tweak the file buffer size, make it a bit larger you can overcome this restriction. See System::setFileSystem "blockalign" parameter.

于 2011-08-22T23:14:38.737 回答