Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [Visual Basic 2008] Leggere il volume master del computer
Forum - C# / VB.NET - [Visual Basic 2008] Leggere il volume master del computer - Pagina 2

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 22:42
Mercoledì, 29/04/2009
Si, fa parte delle DirectX.

puoi scaricare le DirectX SDK a quest'indirizzo

http://www.microsoft.com/downloads/details.aspx?familyid=5 ...

dopo aggiungi i riferimenti necessari del tipo

Codice sorgente - presumibilmente C# / VB.NET

  1. Imports Microsoft.DirectX.DirectSound



per gestire un suono basta fare del tipo

Codice sorgente - presumibilmente VB.NET

  1. Public sound As SecondaryBuffer
  2.  
  3.  
  4.  
  5. Function caricaSuono(ByVal fileSrc As String) As SecondaryBuffer
  6.  
  7.         caricaSuono = New SecondaryBuffer(fileSrc, DirectSound)
  8. End Function
  9.  
  10.  
  11.  
  12. Sub Main()
  13.  
  14. sound = caricaSuono("ok.wav")
  15.  
  16.  
  17. end sub




una volta assegnato il suono alla variabile
puoi gestire tantissime cose
appunto come effetti audio, il bilanciamento, ascoltare il suono in una determinata posizione, gestire il volume ecc. ecc.

ti consiglio

http://www.notjustcode.it/public/DS_Effect_VB.zip
per gli effetti

il quale illustra molti esempi
per questo credo che non ti conviene gestire l'audio generale di tutto il computer
ma di gestire l'audio di ogni singolo suono e appunto puoi creare equalizzatori
molto piu facilmente appunto perchè esiste proprio una funzione in directX che ti restituisce o imposta il volume.

oppure quest'esempio
http://www.notjustcode.it/public/DS_Record_VB.zip

che esegue anche un detect della tua scheda audio e ti permette di catturare audio che il tuo computer riproduce creando un file wav

:k:


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Furion (Normal User)
Rookie


Messaggi: 51
Iscritto: 31/01/2008

Segnala al moderatore
Postato alle 11:21
Giovedì, 30/04/2009
Oddio ti ringrazio, ma non è quello che dovevo fare io ^____^ Forse mi sono spiegato male all'inizio, faccio un mea culpa e lo rispiego: un mio amico ha un portatile su cui aveva Windows sVista. Ha fatto il downgrade ed è tornato a XP. Su sVista, però, aveva un programma della Acer che quando lui usava la rotella integrata per controllare il volume di sistema, su schermo gli compariva un disegno con scritto il volume attuale e lo stato di muto. Quel prog, sul sito della Acer, esiste solo per sVista ed io mi sono offerto per rimpiazzarglielo con uno fatto da me. Ed eccomi nei casini...

cmq ho provato, nella funzione GetVolumeControl, a usare la Marshal.FreeCoTaskMem ed il problema si è quasi risolto: in pratica, adesso, la dimensione dell'applicazione rimane fissa per qualche secondo, poi aumenta di un po' e rimane fissa di nuovo per un altro tot di tempo e così via. UFF... ^__^

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 15:12
Giovedì, 30/04/2009
Ma come l'hai usata la Free?

PM Quote
Avatar
Furion (Normal User)
Rookie


Messaggi: 51
Iscritto: 31/01/2008

Segnala al moderatore
Postato alle 19:43
Giovedì, 30/04/2009
Ho usato queste due righe di codice

Codice sorgente - presumibilmente Plain Text

  1. Marshal.FreeCoTaskMem(mxlc.pamxctrl)
  2. Marshal.FreeCoTaskMem(pmxcd.paDetails)



all'interno della GetVolumeControl, subito prima di entrambi i return. E' giusto?

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 20:15
Giovedì, 30/04/2009
Tutti e due prima di tutti e due i return???

Perche' non posti solamente la funzione con le modifiche?

PM Quote
Avatar
Furion (Normal User)
Rookie


Messaggi: 51
Iscritto: 31/01/2008

Segnala al moderatore
Postato alle 10:24
Venerdì, 01/05/2009
Certo, eccola qui:

Codice sorgente - presumibilmente VB.NET

  1. Private Shared Function GetVolumeControl(ByVal hmixer As Integer, ByVal componentType As Integer, ByVal ctrlType As Integer, ByRef mxc As MIXERCONTROL, ByRef vCurrentVol As Integer) As Boolean
  2.         Dim mxlc As New MIXERLINECONTROLS
  3.         Dim mxl As New MIXERLINE
  4.         Dim pmxcd As New MIXERCONTROLDETAILS
  5.         Dim du As New MIXERCONTROLDETAILS_UNSIGNED
  6.         mxc = New MIXERCONTROL
  7.         Dim rc As Integer
  8.         Dim retValue As Boolean
  9.         vCurrentVol = -1
  10.  
  11.         mxl.cbStruct = Marshal.SizeOf(mxl)
  12.         mxl.dwComponentType = componentType
  13.  
  14.         rc = mixerGetLineInfoA(hmixer, mxl, MIXER_GETLINEINFOF_COMPONENTTYPE)
  15.  
  16.         If MMSYSERR_NOERROR = rc Then
  17.             Dim sizeofMIXERCONTROL As Integer = 152
  18.             Dim ctrl As Integer = Marshal.SizeOf(GetType(MIXERCONTROL))
  19.             mxlc.pamxctrl = Marshal.AllocCoTaskMem(sizeofMIXERCONTROL)
  20.             mxlc.cbStruct = Marshal.SizeOf(mxlc)
  21.             mxlc.dwLineID = mxl.dwLineID
  22.             mxlc.dwControl = ctrlType
  23.             mxlc.cControls = 1
  24.             mxlc.cbmxctrl = sizeofMIXERCONTROL
  25.  
  26.             ' Allocate a buffer for the control
  27.             mxc.cbStruct = sizeofMIXERCONTROL
  28.  
  29.             ' Get the control
  30.             rc = mixerGetLineControlsA(hmixer, mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE)
  31.  
  32.             If MMSYSERR_NOERROR = rc Then
  33.                 retValue = True
  34.                 ' Copy the control into the destination structure
  35.                 mxc = CType(Marshal.PtrToStructure(mxlc.pamxctrl, GetType(MIXERCONTROL)), MIXERCONTROL)
  36.             Else
  37.                 retValue = False
  38.             End If
  39.             Dim sizeofMIXERCONTROLDETAILS As Integer = Marshal.SizeOf(GetType(MIXERCONTROLDETAILS))
  40.             Dim sizeofMIXERCONTROLDETAILS_UNSIGNED As Integer = Marshal.SizeOf(GetType(MIXERCONTROLDETAILS_UNSIGNED))
  41.             pmxcd.cbStruct = sizeofMIXERCONTROLDETAILS
  42.             pmxcd.dwControlID = mxc.dwControlID
  43.             pmxcd.paDetails = Marshal.AllocCoTaskMem(sizeofMIXERCONTROLDETAILS_UNSIGNED)
  44.             pmxcd.cChannels = 1
  45.             pmxcd.item = 0
  46.             pmxcd.cbDetails = sizeofMIXERCONTROLDETAILS_UNSIGNED
  47.  
  48.             rc = mixerGetControlDetailsA(hmixer, pmxcd, MIXER_GETCONTROLDETAILSF_VALUE)
  49.  
  50.             du = Marshal.PtrToStructure(pmxcd.paDetails, GetType(MIXERCONTROLDETAILS_UNSIGNED))
  51.  
  52.             vCurrentVol = du.dwValue
  53.  
  54.             Marshal.FreeCoTaskMem(mxlc.pamxctrl)
  55.             Marshal.FreeCoTaskMem(pmxcd.paDetails)
  56.  
  57.             Return retValue
  58.         End If
  59.  
  60.         Marshal.FreeCoTaskMem(mxlc.pamxctrl)
  61.         Marshal.FreeCoTaskMem(pmxcd.paDetails)
  62.        
  63.         retValue = False
  64.         Return retValue
  65.     End Function 'GetVolumeControl


PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 10:34
Venerdì, 01/05/2009
Le ultime due Free non devono esserci perche' in quel punto non sono state fatte le due Alloc ...

Non vedo altri punti in cui ci potrebbe essere un memory leak.

Non dovresti avere piu' problemi di allocazione di memoria ... anche se la memoria impegnata sembra crescere, prova a vedere se e' solo l'effetto della modifica del working set ... (prova riducendo ad icona il programma e controlla se la memoria impegnata sembra ridursi)...

PM Quote
Avatar
Furion (Normal User)
Rookie


Messaggi: 51
Iscritto: 31/01/2008

Segnala al moderatore
Postato alle 11:06
Venerdì, 01/05/2009
Allora ho provato a fare come dici tu ed ecco quello che è successo: premettendo che il mio prog parte a schermo intero, all'inizio avevo una dimensione di circa 20Mb in memoria (lo so è enorme, devo cercare di diminuirla) che continuava a crescere. Allora l'ho ridotto a icona e la dimensione si è ridotta a 2 soli Mb, però poi ha ricominciato subito a crescere, arrivando a poco più di 3. Cosa faccio?

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo