Sous windows, en C et avec devc++.
Version imprimable
Sous windows, en C et avec devc++.
Possible, voir du côté des fichiers de ressources ;)
Merci mais je doit chercher ou?Citation:
Envoyé par Franck.H
Recsources de dev c++ ou autres?
Voici un exemple de création et d'utilisation de fichiers de ressources: http://chgi.developpez.com/windows/ressources/
je n'arrive pas a voir comment faire pour un son, ce n'est pas parreil qu'un eicon...Et puis je ne suis pas sous une windows apps, jesuis en console apps...Citation:
Envoyé par Franck.H
Moi là je lit "Sous windows" ... dans ce cas faut préciser, sous DOS ca m'étonnerais que cela soit possible !Citation:
Envoyé par miron
Dos != console apps non?Citation:
Envoyé par Franck.H
Non justement car tu utilise les mêmes fonctions et API que si tu programmais directement pour le DOS !Citation:
Envoyé par miron
Bon ok il est possible d'utiliser les API Win32 en "Programmes consoles" mais sinon en DOS ... magache ... DOS qui en générale est surtout codé en 16bits si je me souviens mais bon pour les fichiers de ressources j'ai de gros doutes :lol:
Mince alors...Citation:
Envoyé par Franck.H
Et donc vous avez quelles idée pour qun son ne soi lisible qune seule fois?
Il faut bien faire la différence entre un programme console, qui s'exécute nativement sous Windows et qui n'est rien qu'un programme n'ayant pas de GUI (interface graphique) et un programme s'exécutant réellement sous DOS.
Sous plateforme NT les programmes DOS s'exécutent sous une machine virtuelle nommée NTVDM. Les programmes DOS s'exécutent en mode mémoire segmenté, peuvent appeler directement les interruptions, etc.
Pour en revenir à la question principale, il est tout à fait possible d'inclure un fichier .WAV en ressources pour un programme console.
Il suffit juste d'inclure le fichier.wav en tant que ressource de type RT_RCDATA (données de ressource utilisateur).
voici une liste des ressources possibles sous Windows :
http://msdn.microsoft.com/library/de...ourcetypes.asp
Ensuite, pour obtenir un pointeur et la taille de la ressource, ca ne change pas des APIs habituelles travaillant sur les ressources.
Dans l'ordre : ( sauf SizeOfResource qui peut être placé n'importe où après FindResource() )
FindResource()
LoadResource()
LockResource()
SizeOfResource()
; travail avec la ressource
FreeResource()
À partir de LockResource() on est en possession d'un pointeur sur la ressource et SizeOfResource retourne sa taille. On peut passer ce pointeur à une ou plusieurs fonctions (celles de la bibliothèque windows WINMM par exemple), ou décharger la ressource sur le disque facilement pour l'utiliser avec un autre programme, comme MediaPlayer.
PlaySound sait directement jouer un wav contenu dans une ressource.
http://msdn.microsoft.com/library/en..._playsound.asp
Avec WAVE dans le h cela fonctionne aussiCitation:
Il suffit juste d'inclure le fichier.wav en tant que ressource de type RT_RCDATA (données de ressource utilisateur).
Il faut utiliser aussi la macro MAKEINTRESOURCE
Miron si j'ai un instant je te ferai un programme d'exemple
M'envoyer un MP pour me le rappeler
Essayer ceci :
tada.wav par exemple se trouve dans windows\medias
Citation:
//fichier .rc par exemple test.rc
ID_WAVE1 WAVE "tada.wav"
Citation:
//Fichier H resources.h
#ifndef __RESOURCES_H
#define __RESOURCES_H
#define ID_WAVE 100
#endif
Faire un projet avec le fichier .rc , .h ( resources.h) et main.cpp ou tout autre nomCitation:
// main.cpp
// Lier avec winmm.lib ! //
#include <stdio.h>
#include <windows.h>
#include "resources.h"
void main()
{
HINSTANCE handle=::GetModuleHandle("nom_programme.exe");
printf("Tada !!!\n");
BOOL b=PlaySound("ID_WAVE1",handle,SND_RESOURCE|SND_ASYNC);
//BOOL b=PlaySound("tada.wav",NULL,SND_FILENAME|SND_ASYNC);pour charger fichier sur disque
Sleep(3000);// tempo
}
Si tu utilises WinMain et apli GUI comme dans le tuto de CGi déclarer une variable globale de type HINSTANCE qui sera initialisée avec HINSTANCE juste après WinMain plutôt que GetModuleHandlle utilisé ici pour ce court programme console
Citation:
HINSTANCE g_hinstance;// en global
int WINAPI WinMain(HINSTANCE hinstance,....
g_hinstance=hinstance;
Merci
Voila j'ai utilisé tout ca mais je voudrais savoir la vitesse maqimalle de lecture*
Voila mon code:Et je ne sait plus comment faire, je veux que mon programme ne soit pas ralenti par la lecture.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200 #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <time.h> #include <conio.h> #include <mmsystem.h> int oui=0; //----------------------------------------------------------------------------- void Ecran(int Mode) // parametre Mode : 1=plein ecran et 2=mode fenetre { typedef BOOL WINAPI (*SetConsoleDisplayModeT)(HANDLE,DWORD,DWORD*); SetConsoleDisplayModeT SetConsoleDisplayMode; HINSTANCE hLib=LoadLibrary("KERNEL32.DLL"); SetConsoleDisplayMode=(SetConsoleDisplayModeT) GetProcAddress(hLib,"SetConsoleDisplayMode"); HANDLE h=CreateFile("CONOUT$",GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,0); DWORD oldmode; SetConsoleDisplayMode(h,Mode,&oldmode); } //----------------------------------------------------------------------------- void aff(int x,int y) { int c,touche=0; //char Touche[1]; //char *Touchep=&Touche[1]; //char Message[BUFSIZ]; HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE); COORD pos={x,y}; SetConsoleCursorPosition(handle,pos); if (kbhit()) while ((touche==0||touche==224)&&(touche!=27||touche!=97)) touche=getch(); if(touche==27) exit(0); //Touche[1]=touche; if (touche) oui=!oui; //if (Touche[1]) strcat(Message,Touchep); if(oui) { if (y==10&&x>10&&x<70) printf("%c",196); else if (y==10&&x==10) printf("%c",218); else if (y==10&&x==70) printf("%c",191); else if (y==40&&x>10&&x<70) printf("%c",196); else if (y==40&&x==10) printf("%c",192); else if (y==40&&x==70) printf("%c",217); else if (x==10&&y>10&&y<40) printf("%c",179); /*else if (y==11&&x>10&&x<11+oui) printf("%c",Message[x-11]);*/ /* else if (x==11&&y==11) printf("B"); else if (x==12&&y==11) printf("o"); else if (x==13&&y==11) printf("n"); else if (x==14&&y==11) printf("j"); else if (x==15&&y==11) printf("o"); else if (x==16&&y==11) printf("u"); else if (x==17&&y==11) printf("r"); */ else if (x!=79||y!=50) { if (rand()%3==0) c=(rand()%26)+97; else c=(rand()%10)+48; printf("%c",c); } } else if (x!=79||y!=50) { if (rand()%3==0) c=(rand()%26)+97; else c=(rand()%10)+48; printf("%c",c); } } //----------------------------------------------------------------------------- int main() { int x,x1=0,x2=0,x3=0,x4=0,x5=0,x6=0,x7=0,x8=0,x9=0,y,y1,y2,y3,y4,y5,y6,y7,y8,y9,i; Ecran(1); for (i=1;i<16;i++) { HANDLE handle1=GetStdHandle(STD_OUTPUT_HANDLE); COORD pos={30,20}; SetConsoleCursorPosition(handle1,pos); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),i); printf(" Par Pierre BLACHE..."); Sleep(500); system("cls"); } srand((unsigned)time(NULL)); HINSTANCE handle=GetModuleHandle("Matrix.exe"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 2); HANDLE handle1=GetStdHandle(STD_OUTPUT_HANDLE); COORD pos={79,50}; SetConsoleCursorPosition(handle1,pos); printf("%c",(rand()%10)+48); BOOL b=PlaySound("ID_WAVE1",handle,SND_RESOURCE|SND_ASYNC); for (y=1;y<=50;y++) for (x=0;x<80;x++) aff(x,y); y1=rand()%50; y2=rand()%50; y3=rand()%50; y4=rand()%50; y5=rand()%50; y6=rand()%50; y7=rand()%50; y8=rand()%50; y9=rand()%50; while(1) { y1++; y2++; y3++; y4++; y5++; y6++; y7++; y8++; y9++; if (y1>50){ x1=rand()%80; y1=1;} aff(x1,y1); if (y2>50){ x2=rand()%80; y2=1;} aff(x2,y2); if (y3>50){ x3=rand()%80; y3=1;} aff(x3,y3); if (y4>50){ x4=rand()%80; y4=1;} aff(x4,y4); if (y5>50){ x5=rand()%80; y5=1;} aff(x5,y5); if (y6>50){ x6=rand()%80; y6=1;} aff(x6,y6); if (y7>50){ x7=rand()%80; y7=1;} aff(x7,y7); if (y8>50){ x8=rand()%80; y8=1;} aff(x8,y8); if (y9>50){ x9=rand()%80; y9=1;} aff(x9,y9); //BOOL b=PlaySound("ID_WAVE1",handle,SND_RESOURCE|SND_ASYNC); BOOL c=PlaySound("Son.wav",NULL,SND_FILENAME|SND_MEMORY);//pour charger fichier sur disque // sndPlaySound("Son.wav", SND_SYNC );|SND_MEMORY Sleep(20); } return 0; }
De plus je desirerais savoir si il etais possible de lire un son dans le lecteur par default(ca c'est possible) et pouvoir fermet le lecteur a la fin de la lecture, quand je dit fermet c'est forcer, ne pas attendre que ca soit l'utilisaeu qui le fasse...
A ce moment là ne pas utiliser PlaySound !!!Citation:
Et je ne sait plus comment faire, je veux que mon programme ne soit pas ralenti par la lecture.
Il faut passer à Direct Sound ; c'est la carte son qui prendra en charge le fichier WAV et qui déchargera par conséquent l'OS
Direct sound ok mais je doit cherchez ou?Citation:
Envoyé par mat.M
Dans la faq C, rien , dans windows non plus...
Merci
Depuis WIN32, mode console ne signifie pas 'sous DOS'. C'est une application windows 32-bit, mais elle n'est pas GUI, c'est tout. La plupart des fonctions systèmes et des ressources sont disponibles.Citation:
Envoyé par Franck.H
Citation:
Envoyé par miron