2011-08-22 5 views
1

Je pensais que ce serait une tâche relativement simple avec quelque chose comme FMOD, mais je ne peux pas le faire fonctionner. Même l'exemple de code netstream ne semble pas faire l'affaire. Peu importe ce que je mp3 essaie de jouer avec le programme exemple Netstream, je reçois cette erreur:Streaming MP3 à partir d'Internet avec FMOD

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

Je ne comprends pas vraiment ce que cela signifie. N'est-ce pas exactement ce que le programme d'exemple netstream était? diffuser un fichier depuis Internet?

Je ne peux pas passer la méthode createSound

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

EDIT:

C'est ce que j'ai modifié après avoir lu la réponse de Mathew

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

Je reçois deux erreurs différentes en fonction des fichiers que j'utilise.

Test 1 URL: http://kylegobel.com/test.mp3

Test 1 Erreur: (25) fichier non pris en charge ou le format audio.


Test 2 URL: http://kylegobel.com/bullet.mp3

Test 2 Erreur: (20) Impossible de rechercher l'opération. Ceci est une limitation du support (c.-à-d. Netstreams) ou du format de fichier.

Avant de faire la modification, je pourrais utiliser netstream pour jouer "C: \ test.mp3" qui est le même fichier nommé test.mp3 sur le web, mais cela ne fonctionne plus avec les changements ci-dessus. Peut-être que ces fichiers sont juste dans les mauvais formats ou quelque chose? Désolé pour mon manque de connaissances dans ce domaine, je ne connais pas vraiment le son, mais j'essaie de comprendre.

Merci, Kyle

Répondre

3

Il est possible que le MP3 a une grande quantité de balises au début, donc FMOD les lit tente alors de chercher revenir au début (qui ne peut pas le faire parce que c'est un flux net). Pouvez-vous essayer d'utiliser FMOD_IGNORETAGS et peut-être FMOD_CREATESOUNDEXINFO avec un type de suggestion suggéré défini sur FMOD_SOUND_TYPE_MPEG?

Si cela ne fonctionne pas, pouvez-vous publier l'URL sur un flux MP3 qui ne fonctionne pas?

EDIT: Le fichier en question a environ 60 Ko de données de tag, FMOD est heureux de lire sur ce truc mais pour que le codec MPEG fonctionne, il doit faire quelques petites recherches. Puisque vous ne pouvez pas rechercher un flux de données, toutes les recherches doivent être contenues dans le tampon de fichier de bas niveau. Si vous modifiez la taille de la mémoire tampon du fichier, augmentez la taille de cette limite. Voir le paramètre "blockalign" System :: setFileSystem.

+0

J'ai édité par votre demande, une idée de pourquoi cela fonctionnerait lors de la lecture du fichier localement? comme c: \ test.mp3 plutôt que http://mysite.com/test.mp3? –

+0

Parce que vous lui dites que le format suggéré est MPEG (qui saute le codec de balise), et que MPEG ne recherche que 4k de données à la recherche de l'audio, il échouera. Vous pouvez utiliser FMOD_MPEGSEARCH pour résoudre ce problème. J'ai aussi édité ma réponse pour que le fichier fonctionne pour vous. –