Est - ce que il exsite déja une classe qui me permet , d'enregistrer l'audio du microphone de mon pc.
Ya quelqu'un qui a déja fais ce la.
Merci
Est - ce que il exsite déja une classe qui me permet , d'enregistrer l'audio du microphone de mon pc.
Ya quelqu'un qui a déja fais ce la.
Merci
Salut
vois du coté de fmod , directx ou peut etre son equivalent libre ( opengl ? pas ur )
Merci Cedni,
Realement j'ai vu ya la classe TMediaPlayer,, mais je ne sais pas comment faire pour detecter, le microphone (j'ai deux carte audio instaler sur mon pc)
Ya quelq'un qui a déja fai ce la ?
merci
salut,
essayes de voir avec les activeX, peut être tu pourra en installer un qui donnera la sollution à ton problème.
« Aucun homme ne peut rien vous révéler sinon ce qui repose déjà à demi endormi dans l'aube de votre connaissance»
« No man can reveal to you aught but that which already lies half asleep in the dawning of your knowledge »_(¯`·.__-Alg3ri4nH4ck3r-__.·´¯)_
est ce que il existe des classe builder, qui detecte quand un device est active sur mon pc? example quand j'utilise mon microphone , la calsse detecte, le device avec son numero.
merci
Salut !
Pour cela, je pense qu'il faudrait passer par les API dédiées !
Reste à savoir ce que tu comptes faire au juste !
Alors là par contre ... ???est ce que il existe des classe builder, qui detecte quand un device est active sur mon pc? example quand j'utilise mon microphone , la calsse detecte, le device avec son numero.
merci
Normalement, on ne devrait pas procéder dans ce sens là !
A mon avis ça reviendrait à rajouter un niveau de difficulté supplémentaire (une sombre histoire de gestion du mixer) !
En fait, on doit se trouver dans la situation inverse : on sélectionne le dispositif, on l'ouvre, on écoute et on le ferme !
A plus !
utiliser fmod c est le millieur metode pour tavallier par les son
Salut Alghero
J'ai trouve un lien sur le site, j'ai teste le code donne il fonctionne bien
Seul l'initialisation du Tchart a ete laborieuse, pour moi je n'ai pas installe de micro juste celui de la WebCam le programme va bien le recuperer sans mon intervention
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
J ai testé pour voir
J ai corrigé quelques include pour la vcl
Mais je ne trouve pas le composant lineseries dans bcb6
Comment as tu fait ?
Je n'ai rien change au code, pour " LineSeries ", c'est simple dans TreeView un doubleclick sur Chart1 une fenetre s'ouvre clicker sur Add choisir le Type Lines fermer la boite de dialogue le composant qui fait parti de TChart est ajoute
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
merci bien mais rien ne se passe en utilisant le micro de la cam
Pour l'audio je n'ai que la WebCam de branchee, et elle a ete detectee automatiquement.
Je viens de modifier le code pour l'integration par code de " LineSeries "
Le .h
Le .cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <mmreg.h> //pour WAVEFORMATEX #include <mmsystem.h> #include "CGAUGES.h" #include <Chart.hpp> #include <ExtCtrls.hpp> #include <TeEngine.hpp> #include <TeeProcs.hpp> #include <Series.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TChart *Chart1; TPanel *Panel1; TButton *Button1; TCGauge *CGauge1; TLabel *Label1; void __fastcall FormClose(TObject *Sender, TCloseAction &Action); void __fastcall FormActivate(TObject *Sender); void __fastcall FormCreate(TObject *Sender); void __fastcall Button1Click(TObject *Sender); private: // User declarations void Fermer_la_capture_audio ( void ); void Initialize_Get_audio(void); void Capure_Audio(TMessage &Msg); public: // User declarations __fastcall TForm1(TComponent* Owner); // adjonction pour capture Audio WAVEFORMATEX waveform; // format of received datas PWAVEHDR pWaveHdr_1; // header1 for buffer1 PBYTE pBuffer_1; // buffer1... PWAVEHDR pWaveHdr_2; // header2 for buffer2 PBYTE pBuffer_2; // buffer2... HWAVEIN h_WaveIn; // wave mapper for window virtual void __fastcall WndProc (TMessage &Msg); }; #define F_16k 16000 /* Get wave at 16 kHz */ #define BUFFER_SIZE 6400 /* Catch data by blocks of 6400 bytes */ #define _16Bits 16 /* 16 bits per samples */ #define Mono 1 /* Record 'mono' signal */ #define L_Frame_16k 320 /* Frame size */ #define max(a, b) (((a) > (b)) ? (a) : (b)) #define min(a, b) (((a) < (b)) ? (a) : (b)) //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
Cela doit fonctionner sans intervention
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include <Dialogs.hpp> //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "CGAUGES" #pragma resource "*.dfm" TForm1 *Form1; long ilp; TLineSeries *Series1; #define _20_msec 0.02 #define scale 0.0030517578125 /* 100 div 32768*/ //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void TForm1::Fermer_la_capture_audio ( void ) { waveInUnprepareHeader(h_WaveIn, Form1->pWaveHdr_1, sizeof(WAVEHDR)); waveInUnprepareHeader(h_WaveIn, Form1->pWaveHdr_2, sizeof(WAVEHDR)); } //--------------------------------------------------------------------------- void TForm1::Initialize_Get_audio(void) { short i; HWND hwnd; hwnd = Form1->Handle; Form1-> waveform.wFormatTag = WAVE_FORMAT_PCM; // PCM Form1-> waveform.nChannels = Mono; // MONO Form1-> waveform.nSamplesPerSec = F_16k; // 16000 Hz Form1-> waveform.nAvgBytesPerSec = F_16k * ( _16Bits / 8 ) * Mono;// 32000 bits per sec 16K, 16bits, Mono Form1-> waveform.nBlockAlign = 1; Form1-> waveform.wBitsPerSample = _16Bits; // 16 BITS Form1-> waveform.cbSize = 0; if(waveInOpen(&h_WaveIn, WAVE_MAPPER, &Form1->waveform, (DWORD)hwnd, 0, CALLBACK_WINDOW)) { MessageBox(0, "Cannot Open wave mapper in", "this demo software", MB_ICONEXCLAMATION | MB_OK); exit(1); } // Allocate headers Form1-> pWaveHdr_1 = (PWAVEHDR) malloc(sizeof(WAVEHDR)); Form1-> pWaveHdr_2 = (PWAVEHDR) malloc(sizeof(WAVEHDR)); // Allocate buffers Form1-> pBuffer_1 = (PBYTE) malloc(sizeof(BYTE)*BUFFER_SIZE); Form1-> pBuffer_2 = (PBYTE) malloc(sizeof(BYTE)*BUFFER_SIZE); // Setup first header Form1-> pWaveHdr_1->lpData = (CHAR*)Form1-> pBuffer_1; Form1-> pWaveHdr_1->dwBufferLength = BUFFER_SIZE; Form1-> pWaveHdr_1->dwBytesRecorded = 0; Form1-> pWaveHdr_1->dwUser = 0; Form1-> pWaveHdr_1->dwFlags = 0; Form1-> pWaveHdr_1->dwLoops = 1; Form1-> pWaveHdr_1->lpNext = NULL; Form1-> pWaveHdr_1->reserved = 0; Form1-> pWaveHdr_2->lpData = (CHAR*)Form1-> pBuffer_2; Form1-> pWaveHdr_2->dwBufferLength = BUFFER_SIZE; Form1-> pWaveHdr_2->dwBytesRecorded = 0; Form1-> pWaveHdr_2->dwUser = 0; Form1-> pWaveHdr_2->dwFlags = 0; Form1-> pWaveHdr_2->dwLoops = 1; Form1-> pWaveHdr_2->lpNext = NULL; Form1-> pWaveHdr_2->reserved = 0; // Add buffer waveInPrepareHeader(h_WaveIn, Form1-> pWaveHdr_1, sizeof(WAVEHDR)); waveInPrepareHeader(h_WaveIn, Form1-> pWaveHdr_2, sizeof(WAVEHDR)); waveInStart(Form1->h_WaveIn); } //--------------------------------------------------------------------------- void TForm1::Capure_Audio(TMessage &Msg) { unsigned long i = 0; while (i< ((PWAVEHDR) Msg.LParam)->dwBytesRecorded) { short m1,m2,m; short* signal = (short*)&((PWAVEHDR)Msg.LParam)->lpData[i]; i += L_Frame_16k * sizeof(short); m1 = 0; m2 = 0; for (short j =0; j < L_Frame_16k; j++) // 320 data 16k => 20 ms { m = signal[j]; if ( m > 0 ) m1 = max(m1, m); else m2 = min(m2, m); } CGauge1->Progress = max( m1,-m2)*scale; Series1->Delete(0); if ( m1+m2 >=0) Series1->AddXY((++ilp)*_20_msec,m1*scale); else Series1->AddXY((++ilp)*_20_msec,m2*scale); } i = waveInAddBuffer(h_WaveIn, (PWAVEHDR) Msg.LParam, sizeof(WAVEHDR)); if ( i != 0 ) ShowMessage("Error_Audio_Capture " + IntToStr(i) ); } //--------------------------------------------------------------------------- void __fastcall TForm1::WndProc(TMessage &Msg) { switch ( Msg.Msg ) { case MM_WIM_OPEN: // on init, add both buffers to WaveIn { waveInAddBuffer(h_WaveIn, Form1->pWaveHdr_1, sizeof(WAVEHDR)); waveInAddBuffer(h_WaveIn, Form1->pWaveHdr_2, sizeof(WAVEHDR)); break; } case MM_WIM_DATA: // We are receiving sound data... { Capure_Audio(Msg); break; } } TForm::WndProc(Msg); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { Fermer_la_capture_audio ( ); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormActivate(TObject *Sender) { Initialize_Get_audio(); CGauge1->Align = alLeft; CGauge1->MinValue = 0; CGauge1->MaxValue = 100; Caption = "DEMONSTRATION SOFTWARE INCLUDING AUDIO MESSAGE INTERCEPTION"; Chart1->LeftAxis->Automatic = false; Chart1->LeftAxis->Maximum = 100; Chart1->LeftAxis->Minimum = -100; Chart1->BottomAxis->Automatic = true; // on ajoute TLineSeries deux lignes supplementaires de code Series1 = new TLineSeries(Chart1); Chart1->AddSeries(Series1); Series1->Clear(); for ( ilp = -1000; ilp <=0 ; ilp++ ) Series1->AddXY(ilp*_20_msec,0); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { TBorderIcons tempBI = BorderIcons; tempBI >> biMaximize; tempBI >> biMinimize; tempBI >> biHelp; tempBI >> biSystemMenu; BorderIcons = tempBI; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Application->Terminate(); } //---------------------------------------------------------------------------
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
Non rien à faire
J ai essayé avec la webcam , avec un micro sur la carte son
Parcontre j ai egalement deux mixer possibles , il me semble sur cette carte audio integré 7.1
Je suis aussi sur Seven .
Je suis sous XP Pack2 et BCB6, la lecture du micro " Logitech Microphone(Pro 4000) " ca a marche de suite on voit la courbe son sur le " TChart " et le volume sur le " CGauge ", il n'y a pas de retour son dans les HP et l'enregistrement n'est pas implemente, c'est un debut
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
Salut !
Je pense qu'il faudrait détecter les dispositifs audio disponibles (vus par le système).
Simplement pour permettre à l'utilisateur de travailler avec le bon dispositif !
Bien qu'on puisse le faire avec des menus (mainmenu ou popup), je montre au plus simple avec une TComboBox.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 WAVEINCAPS WaveInCaps; UINT WaveInDeviceCode=0; WAVEOUTCAPS WaveOutCaps; UINT WaveOutdeviceCode=0;
La détection s'effectue dans le constructeur de la form :
La OnChange de la ComboBox (Enabled à false lors d'une action audio) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 //REM : TComboBox *WaveInDevs1; UINT Max = waveInGetNumDevs(); UINT j; for(j=0; j < Max; j++) { waveInGetDevCaps(j, &WaveInCaps, sizeof(WAVEINCAPS)); WaveInDevs1->Items->Add(WaveInCaps.szPname); } if(Max != 0)WaveInDevs1->ItemIndex = 0;
On dispose ainsi d'un WaveInDevCode valide et ciblé pour la waveInOpen.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void __fastcall TForm1::WaveInDevs1Change(TObject *Sender) { if(WaveInDevs1->ItemIndex != -1) { WaveInDeviceCode = WaveInDevs1->ItemIndex; } }
A noter qu'à ce stade ce qui se pense en waveIn se pense de la même manière en waveOut !
A plus !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager