Потоковое MP3 из Интернета с FMOD - PullRequest
1 голос
/ 23 августа 2011

Я думал, что это будет относительно простая задача с чем-то вроде FMOD, но я не могу заставить его работать.Кажется, даже пример кода netstream не работает.Независимо от того, какой mp3 я пытаюсь воспроизвести с помощью примера программы netstream, я получаю эту ошибку:

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

Я получаю две разные ошибки в зависимости от того, какие файлы я использую.

URL-адрес теста 1: http://kylegobel.com/test.mp3

Ошибка теста 1: (25) Неподдерживаемый формат файла или аудио.


URL-адрес теста 2: http://kylegobel.com/bullet.mp3

Ошибка теста 2: (20) Не удалось выполнить операцию поиска.Это ограничение носителя (т.е. netstreams) или формата файла.

Прежде чем я внес изменение, я мог использовать netstream для воспроизведения «C: \ test.mp3», который является тем же файлом с именем test.mp3 в Интернете, но это больше не работает с вышеуказанными изменениями.Может быть, эти файлы просто в неправильных форматах или что-то?Извините за недостаток знаний в этой области, я действительно мало знаю о звуке, но пытаюсь это понять.

Спасибо, Кайл

1 Ответ

3 голосов
/ 23 августа 2011

Возможно, MP3 имеет большое количество тегов в начале, поэтому FMOD читает их, а затем пытается вернуться к началу (что он не может сделать, потому что это сетевой поток). Можете ли вы попробовать использовать FMOD_IGNORETAGS и, возможно, FMOD_CREATESOUNDEXINFO с рекомендуемым типом звука, установленным в FMOD_SOUND_TYPE_MPEG?

Если это не сработает, не могли бы вы опубликовать URL в известном не работающем потоке MP3?

EDIT: Файл, о котором идет речь, содержит около 60 КБ данных тегов, FMOD с радостью прочитает эту информацию, но для работы кодека MPEG необходимо выполнить несколько небольших поисков. Поскольку вы не можете искать netstream, все поиски должны содержаться в низкоуровневом файловом буфере. Если вы измените размер файлового буфера, сделав его немного больше, вы сможете обойти это ограничение. См. Параметр "blockalign" System :: setFileSystem.

...