Salut,
Pourquoi utiliser une OCX exotique ?
Une simple image box fait l'affaire...
[Sin.BAS]
Option Explicit
Public buffer(44100) As Byte
Sub main()
Dim f0, Fs As Long
Dim VScale
Dim P, Q, Ck, Sk, Ck_New, Sk_New
Dim Cnt, Oh
Dim nFile2 As Integer ' Output File Hook.
For Cnt = 0 To UBound(buffer)
buffer(Cnt) = 128
Next
Fs = 44100 ' fréquence d'échantillonage.
f0 = 1200 ' Fréquence du signal.
VScale = 90 ' échelle du signal (Amplitude)
' Constantes
Dim pi
pi = 4 * Atn(1)
P = Cos(2 * pi * f0 / Fs)
Q = Sin(2 * pi * f0 / Fs)
' Selection du cadran.
'Partie Haute.
Ck = 0 ' ) Sinus )1 Cosinus \/\ pi/4
Sk = -1 ') )0
'Partie Basse.
'Ck = 0 'Decallage PI/2
'Sk = 1
' Création du signal.
' -> pour une période.
'OH = Fs \ f0 ' Période.
'Oh = (Fs \ f0) / 2 ' Demie-période.
Oh = UBound(buffer)
For Cnt = 0 To Oh 'UBound(buffer)
buffer(Cnt) = Int((VScale * Ck) + 128) '+ 128 (Azimute du signal)
Ck_New = P * Ck - Q * Sk
Sk_New = Q * Ck + P * Sk
Ck = Ck_New
Sk = Sk_New
'VScale = VScale * (1 - (Cnt / 5000)) ' Amortissement RLC.
Next
nFile2 = FreeFile
Open "Sin_22K_8bits_unsigned.raw" For Binary Access Write As #nFile2
Put #nFile2, 1, buffer
Close #nFile2
FrmScale.Show
End Sub
Dans la frame principale: [FrmScale]
ici on imprime directement dans la frame, mais on peut tout mettre dans une picturebox...
Option Explicit
Public buffer(44100) As Byte
Sub main()
Dim f0, Fs As Long
Dim VScale
Dim P, Q, Ck, Sk, Ck_New, Sk_New
Dim Cnt, Oh
Dim nFile2 As Integer ' Output File Hook.
For Cnt = 0 To UBound(buffer)
buffer(Cnt) = 128
Next
Fs = 44100 ' fréquence d'échantillonage.
f0 = 1200 ' Fréquence du signal.
VScale = 90 ' échelle du signal (Amplitude)
' Constantes
Dim pi
pi = 4 * Atn(1)
P = Cos(2 * pi * f0 / Fs)
Q = Sin(2 * pi * f0 / Fs)
' Selection du cadran.
'Partie Haute.
Ck = 0 ' ) Sinus )1 Cosinus \/\ pi/4
Sk = -1 ') )0
'Partie Basse.
'Ck = 0 'Decallage PI/2
'Sk = 1
' Création du signal.
' -> pour une période.
'OH = Fs \ f0 ' Période.
'Oh = (Fs \ f0) / 2 ' Demie-période.
Oh = UBound(buffer)
For Cnt = 0 To Oh 'UBound(buffer)
buffer(Cnt) = Int((VScale * Ck) + 128) '+ 128 (Azimute du signal)
Ck_New = P * Ck - Q * Sk
Sk_New = Q * Ck + P * Sk
Ck = Ck_New
Sk = Sk_New
'VScale = VScale * (1 - (Cnt / 5000)) ' Amortissement RLC.
Next
nFile2 = FreeFile
Open "Sin_22K_8bits_unsigned.raw" For Binary Access Write As #nFile2
Put #nFile2, 1, buffer
Close #nFile2
FrmScale.Show
End Sub
Un petit exemple que j'avais fait ... donc, si ça peut aider...