[C] Allegro et fonctions sons, Un petit problème pour arrêter ma boucle |
Bienvenue invité ( Connexion | Inscription )
[C] Allegro et fonctions sons, Un petit problème pour arrêter ma boucle |
30 Mar 2011, 20:51
Message
#1
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 1 194 Inscrit : 1 Aug 2005 Lieu : Tahiti Membre no 43 294 |
Bonjour, voilà je suis entrain de coder un petit jeu comme Project avec allegro.
J'ai crée des fonctions pour géré le son factilement, mais voilà j'arrive pas à arrêter ma boucle infinie qui joue le son de mon choix. CODE void play(char*nomSon) { SAMPLE*sample=load_sample(nomSon); if (!sample) { allegro_message("pas pu trouver le fichier son %s",nomSon); exit(EXIT_FAILURE); } play_sample(sample, 255, 0, 1000, 0);//0 pas de loop Fonctionne parfaitement et me permet de faire plusieurs sons en même temps. CODE SAMPLE* playloop(char*nomSon) { SAMPLE*sample=load_sample(nomSon); if (sample == NULL) { allegro_message("pas pu trouver le fichier son %s",nomSon); exit(EXIT_FAILURE); } play_sample(sample, 100, 0, 1000, 1);//1 loop return sample; } Je récupère un pointer SAMPLE* dans le main. La fonction lance bien un son, jusqu'à ce que je l'arrête donc en boucle Mais mon problème c'est que j'arrive pas à l'arreter CODE void stoploop(SAMPLE* sample) { stop_sample(sample); } Je lui envoi le pointeur récupérer dans le main, mais ça ne fonctionne pas. Vous avez une idée? Merci d'avance -------------------- Imac Alu 24" 2.4Ghz 2Go 10.5.4
Dual-core Intel® Atom- 1 Tb 10.5.6 Serveur iPhone 8Go 2.1 www.dedimac.com |
|
|
1 Apr 2011, 19:04
Message
#2
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 6 580 Inscrit : 20 Mar 2003 Membre no 6 765 |
Je récupère un pointer SAMPLE* dans le main. La fonction lance bien un son, jusqu'à ce que je l'arrête donc en boucle Mais mon problème c'est que j'arrive pas à l'arreter La fonction play_sample() est-elle synchrone (elle attend la fin du sample avant de ressortir) ? -------------------- késtananafout' (:
|
|
|
1 Apr 2011, 21:49
Message
#3
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 1 194 Inscrit : 1 Aug 2005 Lieu : Tahiti Membre no 43 294 |
euh, je ne sais pas trop.
Si j'appel mon fonction play("nondu.wav") 2 deux son, j'arrive à les jouer en même temps. J'ai essayé de tout mettre dans le main, sans les sous programmes et donc sans faire passer de pointeur. Et ça fonctionne si je lance une lecture en boucle et l'arrête avec stop_sample. Ce qui confirme que l'erreur viens de mes sous programme. Je pense que c'est au moment ou je retourne le pointeur un main que ça plante. Merci -------------------- Imac Alu 24" 2.4Ghz 2Go 10.5.4
Dual-core Intel® Atom- 1 Tb 10.5.6 Serveur iPhone 8Go 2.1 www.dedimac.com |
|
|
1 Apr 2011, 22:34
Message
#4
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 6 580 Inscrit : 20 Mar 2003 Membre no 6 765 |
euh, je ne sais pas trop. Pour le vérifier, ce n'est pas bien compliqué: tu choisis un sample assez long, et tu ajoutes un printf avant et après l'appel à la fonction. si le printf après l'appel s'affiche avant la fin du sample, ta fonction est asynchrone. Si j'appel mon fonction play("nondu.wav") 2 deux son, j'arrive à les jouer en même temps. Donc, à priori, elle est asynchrone. J'ai essayé de tout mettre dans le main, sans les sous programmes et donc sans faire passer de pointeur. Et ça fonctionne si je lance une lecture en boucle et l'arrête avec stop_sample. Ce qui confirme que l'erreur viens de mes sous programme. Je pense que c'est au moment ou je retourne le pointeur un main que ça plante. Et si tu postais ton code ? Ou un bout de code qui démontre que ce que tu veux faire ne fonctionne pas ? (cf: tests unitaires du cycle en V) -------------------- késtananafout' (:
|
|
|
2 Apr 2011, 02:23
Message
#5
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 1 745 Inscrit : 13 Nov 2006 Membre no 72 823 |
sinon utilise un débugueur (ou des printf...), pour vérifier que la valeur de sample que tu passes à stoploop est bien celle renvoyée par playloop.
-------------------- Macbook Pro 15" Core 2 Duo 2.33GHz, 3Go RAM, Mac OS X 10.6.8 | Macbook Air 13" mi-2011 Core i5, Mac OS X 10.8
NAS Synology DS-110+ iPhone 6 silver 64Go - forfait SFR Red 3Go |
|
|
11 Apr 2011, 15:52
Message
#6
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 1 194 Inscrit : 1 Aug 2005 Lieu : Tahiti Membre no 43 294 |
Je reviens vers vous pour un autre problème j'ai réussi à utiliser mes fonctions son; mais maintenant je voudrais ajuster le son
J'ai donc créé 2 fonctions qui s'appellent, je vous expliquer avec le code:-) Dans le main CODE muet=dessinerMuet(page,speaker,speakeroff,forest,muet); Avec muet initialisé à 1 Mes sous-programmes CODE int dessinerMuet(BITMAP*page,BITMAP*speaker,BITMAP*speakeroff,char*nomSon,int muet)// muet=0=> Muet { muet=mute(nomSon,muet); if(muet==0) { masked_blit(speakeroff,page,0,0,100,100,speaker->w,speaker->h); }//Fonctionne jusqu'à la if(muet==1) { masked_blit(speaker,page,0,0,100,100,speaker->w,speaker->h); } return muet; } Pour géré l'affichage en fonction de l'état de muet CODE int mute(char* nomSon,int muet) { // On utilise 1 pour avoir du son et 0 pour muet if(mouse_x>100&&mouse_x<120&&mouse_y>100&&mouse_y<120&&(muet==0)&&mouse_b&1) { muet=1; adjust_sample(nomSon,255, 128,1000,1); } if(mouse_x>100&&mouse_x<120&&mouse_y>100&&mouse_y<120&&muet==1&&mouse_b&1) { muet=0; adjust_sample(nomSon,0, 128,1000,1); } return muet; } Ici on ajuste le son. Cela fonctionne lors du premier click, l'image change et le son est coupé. Par contre après quand je click la valeur de muet ne repasse pas à 1. Merci d'avance, j'ai cherché longuement autour, mais je ne vous vraiment pas Ce message a été modifié par le jeune bidouilleur - 11 Apr 2011, 15:53. -------------------- Imac Alu 24" 2.4Ghz 2Go 10.5.4
Dual-core Intel® Atom- 1 Tb 10.5.6 Serveur iPhone 8Go 2.1 www.dedimac.com |
|
|
11 Apr 2011, 21:18
Message
#7
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 1 745 Inscrit : 13 Nov 2006 Membre no 72 823 |
Si on appelle mute avec muet à 0 (et des valeurs de x & y qui correspondent aux test), on va passer dans les 2 if, vu que le corps du premier passe muet à 1.
Je suppose que ce n'est pas le comportement voulu... ça ne serait pas plus lisible comme ça? Code int mute(char* nomSon,int muet)
{ // On utilise 1 pour avoir du son et 0 pour muet if( 100 < mouse_x && mouse_x < 120 && 100 < mouse_y && mouse_y < 120 && mouse_b&1 ) { adjust_sample(nomSon, muet ? 0 : 255, 128, 1000, 1); muet = ! muet; } return muet; } Ce message a été modifié par darenzana - 11 Apr 2011, 21:39. -------------------- Macbook Pro 15" Core 2 Duo 2.33GHz, 3Go RAM, Mac OS X 10.6.8 | Macbook Air 13" mi-2011 Core i5, Mac OS X 10.8
NAS Synology DS-110+ iPhone 6 silver 64Go - forfait SFR Red 3Go |
|
|
12 Apr 2011, 09:54
Message
#8
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 1 194 Inscrit : 1 Aug 2005 Lieu : Tahiti Membre no 43 294 |
Merci ça fonctionne parfaitement:)
Je comprend pas trop le muet = ! muet; merci -------------------- Imac Alu 24" 2.4Ghz 2Go 10.5.4
Dual-core Intel® Atom- 1 Tb 10.5.6 Serveur iPhone 8Go 2.1 www.dedimac.com |
|
|
12 Apr 2011, 18:42
Message
#9
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 1 745 Inscrit : 13 Nov 2006 Membre no 72 823 |
! est l'opérateur de négation logique, défini comme suit:
! 0 = 1 ! n'importe quelle valeur différent de 0 = 0 quand j'ecris muet = ! muet, c'est pour inverser sa valeur. c'est équivalent à muet = muet ? 0 : 1 ; ou à if (muet == 0) { muet = 1 } else { muet = 0 } ou à if (muet != 0) { muet = 0 } else { muet = 1 } ou à if (muet) { muet = 0 } else { muet = 1} -------------------- Macbook Pro 15" Core 2 Duo 2.33GHz, 3Go RAM, Mac OS X 10.6.8 | Macbook Air 13" mi-2011 Core i5, Mac OS X 10.8
NAS Synology DS-110+ iPhone 6 silver 64Go - forfait SFR Red 3Go |
|
|
13 Apr 2011, 08:54
Message
#10
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 1 194 Inscrit : 1 Aug 2005 Lieu : Tahiti Membre no 43 294 |
Merci pour ton aide précieuse
-------------------- Imac Alu 24" 2.4Ghz 2Go 10.5.4
Dual-core Intel® Atom- 1 Tb 10.5.6 Serveur iPhone 8Go 2.1 www.dedimac.com |
|
|
Nous sommes le : 24th April 2024 - 11:24 |