cherios
-
Modifié le 30 août 2017 à 07:03
[Dal]
Messages postés6203Date d'inscriptionmercredi 15 septembre 2004StatutContributeurDernière intervention29 janvier 2025
-
31 août 2017 à 12:52
la j'ai vraiment un problème et je ne sais pas ou sa bloque voici le code et job-tien toujours cette erreur le but est simple bouton parler jouer la music stream
#include <windows.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include "fmod.h"
#include "fmod_errors.h"
#define ID_B_PARLER 0
int c =1;
int d =0;
int f =0;
int g =0;
int l =0 ;
#define ID_B_QUITTER 1
#define TAILLE_MAX 1000
int nombreAleatoire = 0;
char chaine[TAILLE_MAX] = "";
FILE* fichier = NULL,*a = NULL;
int allo = 0;
/*
Create a system2 object and initialize.
*/
HINSTANCE instance;
LRESULT CALLBACK procedureFenetrePrincipale(HWND, UINT, WPARAM, LPARAM);
int WinMain (HINSTANCE cetteInstance, HINSTANCE precedenteInstance,
LPSTR lignesDeCommande, int modeDAffichage)
{
FMOD_SYSTEM *system2;
FMOD_SOUND *sound,*tir;
FMOD_CHANNEL *channel = 0;
FMOD_RESULT result;
int key;
unsigned int version;
result = FMOD_System_Create(&system2);
result = FMOD_System_Init(system, 1, FMOD_INIT_NORMAL, 0);
ERRCHECK(result);
/*
Bump up the file buffer size a little bit for netstreams (to account for lag).
*/
result = FMOD_System_SetStreamBufferSize(system, 64*1024, FMOD_TIMEUNIT_RAWBYTES);
ERRCHECK(result);
HWND fenetrePrincipale;
MSG message;
WNDCLASS classeFenetre;
instance = cetteInstance;
classeFenetre.style = 0;
classeFenetre.lpfnWndProc = procedureFenetrePrincipale;
classeFenetre.cbClsExtra = 0;
classeFenetre.cbWndExtra = 0;
classeFenetre.hInstance = NULL;
classeFenetre.hIcon = LoadIcon(NULL, IDI_APPLICATION);
classeFenetre.hCursor = LoadCursor(NULL, IDC_ARROW);
classeFenetre.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);
classeFenetre.lpszMenuName = NULL;
classeFenetre.lpszClassName = "classeF";
// On prévoit quand même le cas où ça échoue
if(!RegisterClass(&classeFenetre)) return FALSE;
fenetrePrincipale = CreateWindow("classeF", "Ma premiere fenetre winAPI !", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 400, 110,
NULL, NULL, cetteInstance, NULL);
if (!fenetrePrincipale) return FALSE;
ShowWindow(fenetrePrincipale, modeDAffichage);
UpdateWindow(fenetrePrincipale);
while (GetMessage(&message, NULL, 0, 0))
{
/*
Bump up the file buffer size a little bit for netstreams (to account for lag).
*/
result = FMOD_System_SetStreamBufferSize(system, 64*1024, FMOD_TIMEUNIT_RAWBYTES);
fichier = fopen("data/son.txt", "r+a");
while (fgets(chaine, TAILLE_MAX, fichier) != NULL)
{
allo++; // On affiche la chaîne qu'on vient de lire
}
fclose(fichier);
const int MAX = allo, MIN = 0;
srand(time(NULL));
nombreAleatoire = 0;
while (f != 6)
{
f++;
nombreAleatoire = (rand() % (MAX - MIN + 1)) + MIN;
c = nombreAleatoire ;
}
f=0;
a = fopen("data/son.txt", "r+a");
int op =0;
while (op!= nombreAleatoire)
{
op ++;
fgets(chaine, TAILLE_MAX, a);
}
printf("%s",chaine);
if (g==1)
{
printf ("allo");
result = FMOD_System_CreateSound(system2, chaine, FMOD_HARDWARE | FMOD_2D | FMOD_CREATESTREAM | FMOD_NONBLOCKING, 0, &sound);
while(l != 7)
{
FMOD_System_PlaySound(system2, FMOD_CHANNEL_FREE, sound, FALSE, &channel);
Sleep(365);
l ++;
}
l =0;
FMOD_System_CreateSound(system2, "data/son/turning.wav", FMOD_CREATESAMPLE, 0,&tir);
FMOD_System_PlaySound(system2, FMOD_CHANNEL_FREE, tir, 0, NULL);
}
if (g== 2)
{
}
TranslateMessage(&message);
DispatchMessage(&message);
}
return message.wParam;
}
LRESULT CALLBACK procedureFenetrePrincipale(HWND fenetrePrincipale, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND boutons[2] = {NULL};
switch (message)
{
case WM_CREATE:
boutons[0] = CreateWindow("BUTTON", "Parler", WS_CHILD | WS_VISIBLE,
5, 5, 383, 30, fenetrePrincipale, (HMENU)ID_B_PARLER, instance, NULL);
boutons[1] = CreateWindow("BUTTON", "Quitter", WS_CHILD | WS_VISIBLE,5, 45, 383, 30, fenetrePrincipale, (HMENU)ID_B_QUITTER, instance, NULL);
return 0;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_B_PARLER:
g = 1;
break;
case ID_B_QUITTER:
result = FMOD_Sound_Release(sound);
result = FMOD_System_Close(system2);
SendMessage(fenetrePrincipale, WM_DESTROY, 0, 0);
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(fenetrePrincipale, message, wParam, lParam);
}
}
et voici mon code d'erreur C:\Users\drec\Desktop\spirit box\source\spirit box\api\spirit box_api\main.cpp|56|error: cannot convert 'int (__attribute__((__cdecl__)) *)(const char*)' to 'FMOD_SYSTEM*' for argument '1' to 'FMOD_RESULT FMOD_System_Init(FMOD_SYSTEM*, int, FMOD_INITFLAGS, void*)'| j'attend de votre aide si vous voulez bien merci d'avance pour vos réponses :)
Dalfab
Messages postés706Date d'inscriptiondimanche 7 février 2016StatutMembreDernière intervention 2 novembre 2023101 31 août 2017 à 02:48
c'est system2 qu'il faut ligne 56 pas system qui est une fonction
[Dal]
Messages postés6203Date d'inscriptionmercredi 15 septembre 2004StatutContributeurDernière intervention29 janvier 20251 099 31 août 2017 à 12:52
Oui, d'autant plus que c'est bien le pointeur "system2" qui est est utilisé dans la fonction FMOD_System_Create(), et qui doit ensuite être utilisé dans chaque appel aux API : il y deux autres appels en lignes 63 et 108 qui ont ce même problème.
D'ailleurs, cette ligne 108 (et ce qui suit) semble placée dans la pompe de la boucle de messages Windows, qui va être bien encombrée en étant occupée à exécuter tout cela à chaque itération... alors qu'elle est sensée juste vérifier la file des événements Win32. Je doute que cherios veuille vraiment placer cela dans une boucle qui est sensée pouvoir s'exécuter plusieurs fois par seconde (en fait, je ne comprend pas ce qu'il veut faire).
Enfin, si cherios utilise l'interface C de FMOD, et développe en C avec l'API Windows, il devrait nommer son fichier main.c et non pas main.cpp et utiliser un compilateur C et non C++.
31 août 2017 à 12:52
D'ailleurs, cette ligne 108 (et ce qui suit) semble placée dans la pompe de la boucle de messages Windows, qui va être bien encombrée en étant occupée à exécuter tout cela à chaque itération... alors qu'elle est sensée juste vérifier la file des événements Win32. Je doute que cherios veuille vraiment placer cela dans une boucle qui est sensée pouvoir s'exécuter plusieurs fois par seconde (en fait, je ne comprend pas ce qu'il veut faire).
Enfin, si cherios utilise l'interface C de FMOD, et développe en C avec l'API Windows, il devrait nommer son fichier main.c et non pas main.cpp et utiliser un compilateur C et non C++.
Dal