Ciao a tutti, dovrei realizzare un programma che riesce a mandare in esecuzione la musica e la analizzi per poi accendere dei led dalla porta parallela in base al ritmo. Ho trovato un programma, in licenza GNU GPL, che avvia un file musicale (.wav) e crea in una picturebox 3 spettrometri a scelta, io ho utilizzato per comodità quello con due rettangoli che si allungano in base al ritmo della musica. A questo punto tramite i comandi di acquisizione dei pixel (in modo molto spartano ) dico che se il pixel in questione è di colore nero (quindi i rettangoli allungandosi raggiungono il pixel in questione) attivs l' istruzione "PortOut(&h378, x)" per accendere i led occorrenti. Ora vi chiedo se mi potete dare una mano ad alleggerire il codice perchè così facendo servirebbe un computer abbastanza potente per analizzare in un millesimo di secondo la picturebox (e molte altre istruzioni contemporaneamente) e praticamente (col mio pentium a 700 MHz) mi va a scatti (anche se funziona ! )
Grazie per l' attenzione e spero mi possiate dare una mano .

Ecco il link del programma (senza mie modifiche) :

http://www.pierotofy.it/pages/sorgen...972-WaveProof/

Ecco le modifiche apportate da me sul codice Form1.vb 8ho rimosso tutti gli altri visualizzatori (onda e a sfumatura) e ho messo il comando per analizzare il pixel:

codice:
Option Explicit On
Imports Microsoft.DirectX.AudioVideoPlayback
Public Class Form1
    Private Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte)
    Private Wave As CWAVReader
    Private StartTime As Date
    Private File As String
    Private Manager As WaveDataManager
    Public Player As Audio

    Private Sub btnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoad.Click
        Dim Open As New OpenFileDialog
        Open.Filter = "Wave|*.wav"
        If Open.ShowDialog = Windows.Forms.DialogResult.OK Then
            Wave = Nothing
            Manager = Nothing
            Me.Enabled = False
            lblStatus.Text = "Attendere, apertura in corso..."
            Application.DoEvents()
            Wave = New CWAVReader(Open.FileName)
            Manager = New WaveDataManager(Wave.GetSoundDataValue(), Wave.ByteRate)
            Manager.CompressData(tmrRefresh.Interval / 1000)
            picWave.Image = Manager.GetWaveForm(picWave.Width, picWave.Height)
            picWave.Refresh()
            File = Open.FileName
            If Player Is Nothing Then
                Player = New Audio(File)
            Else
                Player.Open(File)
            End If
            Me.Enabled = True
            Application.DoEvents()
            lblStatus.Text = "File aperto"
            btnPlay.Enabled = True
            btnStop.Enabled = True
        End If
    End Sub
    Private Sub btnPlay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlay.Click
        If Manager Is Nothing Then
            MessageBox.Show("Caricare un file prima di procedere!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End If
        Manager.Visualizer = New RectangleVisualizer(Manager)
        Manager.Visualizer.ForeColor = Color.Black
        Manager.Visualizer.BackgroundColor = Color.White
        Player.Play()
        tmrRefresh.Start()
        Timer1.Start()
    End Sub
    Private Sub tmrRefresh_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrRefresh.Tick
        Dim TotalSeconds As Double = Player.CurrentPosition
        If Player.CurrentPosition = Player.Duration Then
            tmrRefresh.Stop()
        End If
        If TotalSeconds = 0 Then
            Exit Sub
        End If
        picWave.Image = Manager.Visualizer.Render(picWave.Width, picWave.Height, TotalSeconds - 5500 / 1000, TotalSeconds)
    End Sub
    Private Sub btnPause_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If Player IsNot Nothing Then
            tmrRefresh.Stop()
            Player.Pause()
            Timer1.Stop()
        End If
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim immagine As New Bitmap(picWave.Image)
        Timer1.Interval = 1
        '275 la metà
' analizza il pixel, se è nero attiva la porta parallela
        If immagine.GetPixel(295, 100).ToArgb = Color.Black.ToArgb Then
            PortOut(&H378, 1)
        Else         
        End If
        If immagine.GetPixel(315, 100).ToArgb = Color.Black.ToArgb Then
            PortOut(&H378, 3)
        End If
        If immagine.GetPixel(330, 100).ToArgb = Color.Black.ToArgb Then
            PortOut(&H378, 7)
            End If
        If immagine.GetPixel(350, 100).ToArgb = Color.Black.ToArgb Then
            PortOut(&H378, 15)    
        End If
        If immagine.GetPixel(370, 100).ToArgb = Color.Black.ToArgb Then
            PortOut(&H378, 31)
        End If
        If immagine.GetPixel(385, 100).ToArgb = Color.Black.ToArgb Then
            PortOut(&H378, 63)     
        End If
        If immagine.GetPixel(405, 100).ToArgb = Color.Black.ToArgb Then
            PortOut(&H378, 127)
        End If
        If immagine.GetPixel(425, 100).ToArgb = Color.Black.ToArgb Then
            PortOut(&H378, 255)    
        End If
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        End
    End Sub
    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
    End Sub
    Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
        If Player IsNot Nothing Then
            tmrRefresh.Stop()
            Player.Stop()
            Timer1.Stop()
        End If
    End Sub
End Class