2010-07-25 25 views
0
FMOD_RESULT result; 
FMOD::System *system; 

result = FMOD::System_Create(&system);  
if (result != FMOD_OK) 
{ 
    printf("FMOD error! (%d) %s\n", result, FMOD_ErrorString(result)); 
} 

result = system->init(100, FMOD_INIT_NORMAL, 0);  
if (result != FMOD_OK) 
{ 
    printf("FMOD error! (%d) %s\n", result, FMOD_ErrorString(result)); 
} 

FMOD::Sound *sound; 
result = system->createSound("01.mp3", FMOD_DEFAULT, 0, &sound);  // FMOD_DEFAULT uses the defaults. These are the same as FMOD_LOOP_OFF | FMOD_2D | FMOD_HARDWARE. 
ERRCHECK(result); 

FMOD::Channel *channel; 
result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel); 
ERRCHECK(result); 

J'ai tracé le code ci-dessus, il n'y a pas d'erreur/avertissement, mais 01.mp3 n'est pas joué, pourquoi?Pourquoi playSound ne produit-il pas de son avec FMOD sur Windows?

Répondre

1

Alors que le code me semble bien, notez que playSound() est asynchrone. Si vous partez directement après, le son n'aura jamais le temps de jouer. .: par exemple

int main() { 
    // ... 
    sytem->playSound(FMOD_CHANNEL_FREE, sound, false, &channel); 
    // playSound() returns directly, program exits without sound being heard 
} 

Pour contourner ce problème rapide pour les tests (et sans savoir ce que votre demande sera structuré comme), vous pouvez attendre pour l'entrée de la console:

result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel); 
// ... 
std::cout << "Press return to quit." << std::endl; 
std::cin.get(); 
+0

est-il une solution? – ieplugin

+0

@iep: Ajouté. Avec plus de détails sur votre application, il pourrait y avoir de bien meilleurs moyens. –