| |
VB.NET - Ein- und UmsteigerWie Equalizer einstellung Speichern??? | | | Autor: Micka | Datum: 19.03.11 20:11 |
| Hallo an alle.
Habe einen Player erstellt um Radiostreams zu Spielen alles über Bass.net und bass.dll.
Der Player und der Equalizer sind 2 eigene Formen allerdings wird die Form Equalizer mit der Playerform über einen Button aufgerufen.
Leider kann ich die einstellungen des Equalizers nicht speichern da ich nicht weiss wie.
Wäre euch dankbar wenn ihr mir helfen könnt.
Hier mal der Equalizer Code.
#Region "Imports"
Option Explicit On
Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Net
Imports Un4seen.Bass
#End Region
Public Class Form2
Public Stream As Integer
Public fx(19) As Integer
Private S As New AudioMixerHelper
#Region "' benötigte API-Deklarationen"
Private Property hWnd As Long
' benötigte API-Deklarationen
Private Declare Function GetAsyncKeyState Lib "user32" ( _
ByVal vKey As Integer) As Short
Private Declare Sub keybd_event Lib "user32" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Integer, _
ByVal dwExtraInfo As Integer)
Const KEYEVENTF_KEYUP As Integer = &H2
Const VK_ESCAPE As Integer = &H1B
Const VK_LWIN As Integer = &H5B
Const VK_RWIN As Integer = &H5C
Public peak(2) As Single
#End Region
#Region "Equalizer_Load"
Private Sub Equalizer_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
Bass.BASS_Init(-1, 192000, BASSInit.BASS_DEVICE_CPSPEAKERS, _
IntPtr.Zero, Nothing)
Dim eq As New EqualizerClass
eq.EQ_Int()
eq.EQ_Load()
End Sub
#End Region
#Region "TrackBar1_Scroll"
Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles TrackBar1.Scroll
TrackBar1.Text = IIf(0 < 3, 10 - TrackBar1.Value, 20 - TrackBar1.Value)
Dim p As New BASS_DX8_PARAMEQ
Bass.BASS_FXGetParameters(fx(0), p)
p.fGain = TrackBar1.Value
Bass.BASS_FXSetParameters(fx(0), p)
End Sub
Private Sub TrackBar2_Scroll(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles TrackBar2.Scroll
TrackBar2.Text = IIf(0 < 3, 10 - TrackBar2.Value, 20 - TrackBar2.Value)
Dim p As New BASS_DX8_PARAMEQ
Bass.BASS_FXGetParameters(fx(1), p)
p.fGain = TrackBar2.Value
Bass.BASS_FXSetParameters(fx(1), p)
End Sub
#Region "Button1_Click"
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
Dim instance As New Form1
instance.Show(Me)
Close()
End Sub
#End Region
#Region "Public Class AudioMixerHelper"
Public Class AudioMixerHelper
Private Const MMSYSERR_NOERROR As Integer = 0
Private Const MAXPNAMELEN As Integer = 32
Private Const MIXER_LONG_NAME_CHARS As Integer = 64
Private Const MIXER_SHORT_NAME_CHARS As Integer = 16
Private Const MIXER_GETLINEINFOF_COMPONENTTYPE As Integer = &H3
Private Const MIXER_GETCONTROLDETAILSF_VALUE As Integer = &H0
Private Const MIXER_GETLINECONTROLSF_ONEBYTYPE As Integer = &H2
Private Const MIXER_SETCONTROLDETAILSF_VALUE As Integer = &H0
Private Const MIXERLINE_COMPONENTTYPE_DST_FIRST As Integer = &H0
Private Const MIXERLINE_COMPONENTTYPE_SRC_FIRST As Integer = &H1000
Private Const MIXERLINE_COMPONENTTYPE_DST_SPEAKERS As Integer = _
MIXERLINE_COMPONENTTYPE_DST_FIRST + 4
Private Structure MIXERCONTROL
Public cbStruct As Integer
Public dwControlID As Integer
Public dwControlType As Integer
Public fdwControl As Integer
Public cMultipleItems As Integer
<MarshalAs(UnmanagedType.ByValTStr, _
SizeConst:=MIXER_SHORT_NAME_CHARS)> Public szShortName As String
<MarshalAs(UnmanagedType.ByValTStr, _
SizeConst:=MIXER_LONG_NAME_CHARS)> Public szName As String
Public lMinimum As Integer
Public lMaximum As Integer
<MarshalAs(UnmanagedType.U4, SizeConst:=10)> Public reserved As _
Integer
End Structure 'MIXERCONTROL
End If
mixerClose(mixer)
End Sub 'SetVolume
End Class 'AudioMixerHelper
#End Region
End Class Müsste den Code ein wenig Kürzen er war ein wenig zu lang sollte aber dennoch das wichtigste für Euch da sen um mir zu helfen.
Danke für Eure Hilfe 0
Beitrag wurde zuletzt am 19.03.11 um 20:42:00 editiert. | |
Re: Wie Equalizer einstellung Speichern??? | | | Autor: Micka | Datum: 20.03.11 12:32 |
| Hallo an alle.
hier nochmal eine Frage an Euch betreffend des Equalizers.
Alles funktioniert super nur wenn ich das Programm ausführe und die Equalizer Einstellung mache "Sprich die Frequens ändere" und dann den Equalizer Schliesse und ihn dann wieder öffne stehen alle Pannels wieder auf null und die zuvor gemachte Einstellung ist nicht mehr zu sehen.
Wie kann ich das ändern?
Danke für Eure Hilfe 0 | |
Re: Wie Equalizer einstellung Speichern??? | | | Autor: Manfred X | Datum: 20.03.11 15:28 |
| Hallo!
Ich vermute, dass Du die Instanz des Formulars mit Close
"vernichtest" und später wieder eine neue Instanz erstellst.
Dabei gehen natürlich alle Einstellungen, die in dieser Instanz
gespeichert waren, verloren.
Benenne zunächst das Formular von "Form2" um z.B. in "frmEqualizer".
Damit wird das AutoInstancing der Form vermieden:
Erstelle den Equalizer einmal (im Hauptformular, Deklarationsteil)
als: Dim myEqualizer as New frmEqualizer
Mache diese Form nur unsichtbar - kein Close.
(Oder im FormClosing-Event die CloseReason: UserClosing canceln.)
Etwa so:
Private Sub FormClosing(sender As Object, _
e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If e.CloseReason = CloseReason.UserClosing Then
Me.Hide() : e.Cancel = True
End If
End Sub MfG
Manfred
Beitrag wurde zuletzt am 20.03.11 um 15:51:53 editiert. | |
Re: Wie Equalizer einstellung Speichern??? | | | Autor: Manfred X | Datum: 20.03.11 16:06 |
| Hallo!
Was ich gerade noch sehe:
Dein Button1 muss natürlich raus.
Erstelle statt dessen einen Button "OK" und weise der
Eigenschaft "DialogResult" den Wert OK zu.
Im Hauptformular wird die Equalizer-Instanz geöffnet:
myEqualizer.showdialog | |
Re: Wie Equalizer einstellung Speichern??? | | | Autor: Micka | Datum: 20.03.11 16:10 |
| Hallo Manfred X
ist dann die Einstellung auch gespeichert wenn ich den Player ganz schliesse und dann wieder öffne??
Das sollte auch sein.
Wenn nicht dann kannst du mir sicher sagen wie das zu Bewerkstelligen ist.
Danke dir. 0 | |
Re: Wie Equalizer einstellung Speichern??? | | | Autor: Manfred X | Datum: 20.03.11 16:21 |
| Hallo!
Am einfachsten ist es wohl, wenn Du im FormClosing-Ereignis
des Player-Formulars eine Datei "myPlayerSettings.txt" zum Schreiben
öffnest (z.B. im Ordner: ApplictionData des Users) und die aktuellen
Values Deiner Steuerelemente dort einträgst.
Im Load-Ereignis des Player-Formulars prüfst Du zunächst, ob diese
Datei bereits vorhanden ist.
Falls ja, öffnest Du die Datei, liest die gespeicherten Werte und
überträgst sie in die zugehörigen Eigenschaften der Steuerelemente
des Equalizers.
MfG
Manfred | |
Re: Wie Equalizer einstellung Speichern??? | | | Autor: Micka | Datum: 20.03.11 16:27 |
| ok klingt gut nun aber meine frage wie genau mache ich das?
dankefür deine Gedult.
gruß 0 | |
Re: Wie Equalizer einstellung Speichern??? | | | Autor: Manfred X | Datum: 20.03.11 16:47 |
| Hallo!
Hier das Prinzip:
Private Sub frmPlayer_FormClosing(sender As Object, e As
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
'Abrufen der Werte der Trackbars und als String aufbereiten
Dim text As String = myEqualizer.TrackBar1.Value.ToString & ";" & _
myEqualizer.TrackBar2.Value.ToString
'Datei öffnen und schreiben
With My.Computer.FileSystem
Dim folder As String = _
.SpecialDirectories.CurrentUserApplicationData
Dim filename As String = "PlayerSettings.txt"
Dim filepath As String = IO.Path.Combine(folder, filename)
.WriteAllText(filepath, text, False)
End With
End Sub
Private Sub frmPlayer_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
With My.Computer.FileSystem
Dim folder As String = .SpecialDirectories.CurrentUserApplicationData
Dim filename As String = "PlayerSettings.txt"
Dim filepath As String = IO.Path.Combine(folder, filename)
If .FileExists(filepath) Then
Dim text As String = My.Computer.FileSystem.ReadAllText(filepath)
Dim values() As String = text.Split(";"c)
myEqualizer.TrackBar1.Value = CInt(values(0))
myEqualizer.TrackBar2.Value = CInt(values(1))
End If
End With
End Sub
Beitrag wurde zuletzt am 20.03.11 um 16:50:19 editiert. | |
Re: Wie Equalizer einstellung Speichern??? | | | Autor: Micka | Datum: 20.03.11 19:28 |
| Hallo Manfred X
habe alles gemacht wie du sagtest.
nur eines geht noch Überhaubt nicht.
Und zwar das Speichern der Einstellung.
Hier mal der Code."Was mache ich falsch???" Ich habe 10 Regler im Equalizer.
#Region " Private Sub Form1_FormClosing"
Private Sub Form1_FormClosing(ByVal sender As Object, _
ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles _
Me.FormClosing
' Timer stoppen
Timer1.Stop()
'Abrufen der Werte der Trackbars und als String aufbereiten
Dim text As String = myEqualizer.TrackBar1.Value.ToString & ";" & _
myEqualizer.TrackBar2.Value.ToString
'Datei öffnen und schreiben
With My.Computer.FileSystem
Dim folder As String = _
.SpecialDirectories.CurrentUserApplicationData
Dim filename As String = "PlayerSettings.txt"
Dim filepath As String = IO.Path.Combine("C:\PlayerSettings.txt")
.WriteAllText(filepath, text, False)
End With
End Sub
#End Region
#Region " Private Sub Form1_Load"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
BassNet.Registration()
Dim eq As New EqualizerClass
eq.EQ_Int()
eq.EQ_Load()
Try
System.IO.File.Copy(CurDir() + "\bass.dll", _
"C:\Windows\System32\bass.dll")
Catch
End Try
Bass.BASS_Init(-1, 192000, BASSInit.BASS_DEVICE_CPSPEAKERS, _
IntPtr.Zero, Nothing)
Me.TrackBar1.Minimum = 0
Me.TrackBar1.Maximum = 10
Me.TrackBar1.TickFrequency = 1
Me.TrackBar1.Value = S.GetVolume
Dim OSC(1023) As Integer
Dim OSCData(1023) As Single
Dim oLeft, oRight As Single
With My.Computer.FileSystem
Dim folder As String = _
.SpecialDirectories.CurrentUserApplicationData
Dim filename As String = "PlayerSettings.txt"
Dim filepath As String = IO.Path.Combine("C:\PlayerSettings.txt")
If .FileExists(filepath) Then
Dim text As String = My.Computer.FileSystem.ReadAllText( _
filepath)
Dim values() As String = text.Split(";"c)
myEqualizer.TrackBar1.Value = CInt(values(0))
myEqualizer.TrackBar2.Value = CInt(values(1))
End If
End With
End Sub
#End Region
End Class Was habe ich hier falsch?
Danke dir. 0
Beitrag wurde zuletzt am 20.03.11 um 19:36:52 editiert. | |
Re: Wie Equalizer einstellung Speichern??? | | | Autor: Manfred X | Datum: 20.03.11 20:32 |
| Hallo!
Du mußt die Einstellungen Deiner 10 Trackbars zunächst in die
Variable "text" eintragen (FormClosing) bzw. aus der
Variable "text" in die 10 Trackbars eintragen.
In meinem Code werden nur 2 Trackbars berücksichtigt.
Wenn Du Deine Trackbars als "Me.Trackbar1" usw. ansprechen kannst,
(=> der Code befindet sich im Equalizer-Formular) mußt Du auch in
meinem Code "myEqualizer." entfernen bzw. durch "Me." ersetzen.
Wenn Du den Pfad zur Settings-Datei komplett in einem String angibst,
benötigst Du die Methode "IO.Path.Combine" nicht.
MfG
Manfred | |
Re: Wie Equalizer einstellung Speichern??? | | | Autor: Micka | Datum: 20.03.11 21:23 |
| Habe es nochmal umgeschrieben aber nur ein erfolg gehabt.
Nun werden die Trackbars in die txt datei eingeschrieben mit dem Wert 0.
aber ansonsten Speichert das Programm die einstellungen nicht.
Hier nochmal der code.
Private Sub Equalizer_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
Bass.BASS_Init(-1, 192000, BASSInit.BASS_DEVICE_CPSPEAKERS, _
IntPtr.Zero, Nothing)
Dim eq As New EqualizerClass
eq.EQ_Int()
eq.EQ_Load()
With My.Computer.FileSystem
Dim folder As String = _
.SpecialDirectories.CurrentUserApplicationData
Dim filename As String = "PlayerSettings.txt"
Dim filepath As String = IO.Path.Combine("C:\PlayerSettings.txt")
If .FileExists(filepath) Then
Dim text As String = My.Computer.FileSystem.ReadAllText( _
filepath)
Dim values() As String = text.Split(";"c)
Me.TrackBar1.Value = CInt(values(0))
Me.TrackBar2.Value = CInt(values(1))
Me.TrackBar3.Value = CInt(values(0))
Me.TrackBar4.Value = CInt(values(1))
Me.TrackBar5.Value = CInt(values(0))
Me.TrackBar6.Value = CInt(values(1))
Me.TrackBar7.Value = CInt(values(0))
Me.TrackBar8.Value = CInt(values(1))
Me.TrackBar9.Value = CInt(values(0))
Me.TrackBar10.Value = CInt(values(1))
End If
End With
End Sub
Private Sub Form2Closing(ByVal sender As Object, _
ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles _
Me.FormClosing
If e.CloseReason = CloseReason.UserClosing Then
Me.Hide() : e.Cancel = True
'Abrufen der Werte der Trackbars und als String aufbereiten
Dim text As String = Me.TrackBar1.Value.ToString & ";" & _
Me.TrackBar2.Value.ToString & ";" & _
Me.TrackBar3.Value.ToString & ";" & _
Me.TrackBar4.Value.ToString & ";" & _
Me.TrackBar5.Value.ToString & ";" & _
Me.TrackBar6.Value.ToString & ";" & _
Me.TrackBar7.Value.ToString & ";" & _
Me.TrackBar8.Value.ToString & ";" & _
Me.TrackBar9.Value.ToString & ";" & _
Me.TrackBar10.Value.ToString & ";"
'Datei öffnen und schreiben
With My.Computer.FileSystem
Dim folder As String = _
.SpecialDirectories.CurrentUserApplicationData
Dim filename As String = "PlayerSettings.txt"
Dim filepath As String = IO.Path.Combine( _
"C:\PlayerSettings.txt")
.WriteAllText(filepath, text, False)
End With
End If
End Sub beide Codes habe ich in der Equalizer Form geschrieben.
Was stimmt hier nicht??
Danke dir 0 | |
Re: Wie Equalizer einstellung Speichern??? | | | Autor: Manfred X | Datum: 20.03.11 21:58 |
| Hallo!
Du musst im Debugger prüfen, welche Einstellungen die
Trackbars besitzen, wenn die Form geschlossen wird.
Beim Schreiben (im Closing):
If e.CloseReason = CloseReason.UserClosing Then
Me.Hide() : e.Cancel = True
else
'Falls die Form von der überg. Form geschlossen wird:
'Einstellungen speichern
Dim text As String = Me.TrackBar1.Value.ToString & ";" & _
Me.TrackBar2.Value.ToString & ";" & _
Me.TrackBar3.Value.ToString & ";" & _
Me.TrackBar4.Value.ToString & ";" & _
Me.TrackBar5.Value.ToString & ";" & _
Me.TrackBar6.Value.ToString & ";" & _
Me.TrackBar7.Value.ToString & ";" & _
Me.TrackBar8.Value.ToString & ";" & _
Me.TrackBar9.Value.ToString & ";" & _
Me.TrackBar10.Value.ToString
'Datei öffnen und schreiben
With My.Computer.FileSystem
Dim filepath As String = "C:\PlayerSettings.txt"
.WriteAllText(filepath, text, False)
End With
End If Beim Zuweisen auf die Trackbars im Load-Ereignis müssen die
Indizes korrekt gesetzt werden:
Me.TrackBar1.Value = CInt(values(0))
Me.TrackBar2.Value = CInt(values(1))
Me.TrackBar3.Value = CInt(values(2))
Me.TrackBar4.Value = CInt(values(3))
Me.TrackBar5.Value = CInt(values(4))
usw. | |
Re: Wie Equalizer einstellung Speichern??? | | | Autor: Micka | Datum: 20.03.11 22:09 |
| Danke Manfred X
habs hinbekommen.
Super Klasse 5 Sterne für Manfred X
Gruß Micka 0 | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|