Mittwoch, 3. April 2013

Visual Basic 2012 Excel 2013 Multimedia Sound Recorder programmieren von Selzer-McKenzie SelMcKenzie


Visual Basic 2012 Excel 2013 Multimedia Sound Recorder programmieren von Selzer-McKenzie SelMcKenzie


 
 
 


 

Author D.Selzer-McKenzie

Heute zeige ich Ihnen, wie Sie einen Sound-Recorder programmieren. Einen Sound-Recorder, mit dem Sie ohne Zusatzgeräte Musik abspielen können, über Mikrophon aufnehmen können und auch vorlesen lassen können. Ebenfalls kann alles abgespeichert werden.

Natürlich ist das auch mit älteren Visual-Basic-Versionen 2005,2008,2010,2012 möglich und Excel.

Den kompletten Source-Code stelle ich nachstehend ein, Sie sollten sich aber auf dem Film den Source-Code ansehen, dort habe ich ihn abgefilmt.

Hier nun der komplette Source-Code:

Imports System.IO

Imports System.Runtime.InteropServices

Imports System.Text

Imports System.Drawing

Public Class Form1

   

    Private Shared Function mciSendString(lpstrCommand As String,

                                lpstrReturnString As StringBuilder, uReturnLength As Integer,

                                hwndCallback As IntPtr) As Integer

    End Function

   

    Private Shared Function mciGetErrorString(dwError As Integer,

                                  lpstrBuffer As StringBuilder, uLength As Integer) As Integer

    End Function

    Private Function getMciError(errCode As Integer) As String

        Dim errMsg As New StringBuilder(255)

        If mciGetErrorString(errCode, errMsg, errMsg.Capacity) = 0 Then

            Return "MCI-Fehler " & errCode

        Else

            Return errMsg.ToString()

        End If

    End Function

   

    Private Shared Function GetShortPathName(lpszLongPath As String,

                                  lpszShortPath As StringBuilder, cchBuffer As Integer) As Integer

    End Function

    Private Function shortPathName() As String

        Dim shortPath As String = String.Empty

        Dim len As Long = 0

        Dim buffer As New StringBuilder(256)

        Dim s As String = Directory.GetCurrentDirectory()

        len = GetShortPathName(s, buffer, 256)

        shortPath = buffer.ToString()

        Return shortPath

    End Function

    ' ---------------------------------------------------------------------------------------------------

    Private SoundZeichnen As Graphics = Nothing

    Private PufferArray() As Byte = Nothing

    Private BreiteDesDiagramms As Single

    Private KoordinateDiagrammMittellinie As Single

    Private StreckungsfaktorAmplitude As Single

    Private ZählerTicks As Integer

    Private StartzeitAufnahme As DateTime

    Private AbgelaufeneZeit As Integer

    Private TimerInterval As Integer

    Private Const LängeZeitachse As Integer = 60000

    ' ----------------------------------------------------------------------------------------------------

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        SoundZeichnen = SoundPictureBoxDiagramm.CreateGraphics()

        TimerInterval = Uhr10.Interval

        ReDim PufferArray(LängeZeitachse / TimerInterval)       ' 6000 gespeicherte Werte (ca. 1 Minute)  

        BreiteDesDiagramms = SoundPictureBoxDiagramm.Width

        KoordinateDiagrammMittellinie = SoundPictureBoxDiagramm.Height / 2

        StreckungsfaktorAmplitude = KoordinateDiagrammMittellinie / 140

        ' -----------------------------------------------------------------------

        Dim mciString As String = "open new type waveaudio alias myAlias"

        Dim ResRes As Integer = mciSendString(mciString, Nothing, 0, IntPtr.Zero)

        If ResRes <> 0 Then

            MessageBox.Show(getMciError(ResRes),

                            "MCI-Fehler beim Öffnen des Geräts ('Open New'-Befehl)",

                            MessageBoxButtons.OK, MessageBoxIcon.Error)

        End If

        mciString = "set myAlias time format ms bitspersample" &

                       " 8 channels 1 samplespersec 8000 bytespersec 8000"

        ResRes = mciSendString(mciString, Nothing, 0, IntPtr.Zero)

        If ResRes <> 0 Then

            MessageBox.Show(getMciError(ResRes),

                 "MCI-Fehler beim Zuweisen der Parameter ('Set-Befehl)",

                 MessageBoxButtons.OK, MessageBoxIcon.Error)

        End If

        ' ----------------------------------------------------------------------

        mciString = "open new type waveaudio alias myAlias2"

        ResRes = mciSendString(mciString, Nothing, 0, IntPtr.Zero)

        If ResRes <> 0 Then

            MessageBox.Show(getMciError(ResRes),

                            "MCI-Fehler beim Öffnen des Geräts ('Open New'-Befehl)",

                            MessageBoxButtons.OK, MessageBoxIcon.Error)

        End If

        Uhr10.Start()

    End Sub

    Private Sub SoundButtonStartStop_Click(sender As Object, e As EventArgs) Handles SoundButtonStartStop.Click

        If SoundButtonStartStop.Text = "START" Then  ' auf START geklickt

            Dim mciString As String = "record myAlias"

            Dim ResRes As Integer = mciSendString(mciString, Nothing, 0, IntPtr.Zero)

            If ResRes <> 0 Then

                MessageBox.Show(getMciError(ResRes),

                      "MCI-Fehler beim Starten der Aufnahme ('Record-Befehl)",

                      MessageBoxButtons.OK, MessageBoxIcon.Error)

            End If

            SoundButtonStartStop.Text = "STOP"

            ' --------------------------------------------------------------

            StartzeitAufnahme = DateTime.Now

            ZählerTicks = 0

            SoundPictureBoxDiagramm.Refresh()

        Else                        ' auf STOPP geklickt

            saveFile()

            SoundButtonStartStop.Text = "START"

        End If

    End Sub

    Private Sub Uhr10_Tick(sender As Object, e As EventArgs) Handles Uhr10.Tick

        Dim mciString As String = "status myAlias2 level"

        Dim buffer As New StringBuilder(20)

        Dim ResRes As Integer = mciSendString(mciString, buffer, buffer.Capacity, IntPtr.Zero)

        If ResRes <> 0 Then

            MessageBox.Show(getMciError(ResRes),

                       "MCI-Fehler bei der Status-Abfrage  ('status ... level'-Befehl)",

                       MessageBoxButtons.OK, MessageBoxIcon.Error)

        End If

        Dim level As Byte = Byte.Parse(buffer.ToString())    ' 0 ... 127          

        SoundProgressBarPegel.Value = level

        ' ----------------------------------------------------------------

        If SoundButtonStartStop.Text = "STOP" Then

            Dim TheTimeSpan As New TimeSpan(DateTime.Now.Ticks - StartzeitAufnahme.Ticks)

            Dim Sekunden As Integer = Convert.ToInt32(TheTimeSpan.TotalSeconds)

            SoundLabelAnzeigeSekunden.Text = "Laufzeit: " & Sekunden.ToString() & " Sekunden"

            If Sekunden = LängeZeitachse / 1000 Then

                saveFile()

                SoundButtonStartStop.Text = "START"

                Return

            End If

            AbgelaufeneZeit = Convert.ToInt32(TheTimeSpan.TotalMilliseconds)

            Dim x As Single = AbgelaufeneZeit * BreiteDesDiagramms / LängeZeitachse

            SoundZeichnen.DrawLine(New Pen(Color.Yellow, 0.1F), x, KoordinateDiagrammMittellinie - level _

                                        * StreckungsfaktorAmplitude, x, KoordinateDiagrammMittellinie + level * StreckungsfaktorAmplitude)

            PufferArray(ZählerTicks) = level

            ZählerTicks += 1

        End If

    End Sub

    ' -------------------------------------

    '  Sound-Datei im aktuellen Verzeichnis abspeichern:

    Private Sub saveFile()

        Dim mciStr As String = "save myAlias " & shortPathName() & "\Test.wav"

        Dim res As Integer = mciSendString(mciStr, Nothing, 0, IntPtr.Zero)

        If res <> 0 Then

            MessageBox.Show(getMciError(res), "MCI-Fehler beim Speichern der Datei ('Save'-Befehl)", _

                            MessageBoxButtons.OK, MessageBoxIcon.Error)

        End If

    End Sub

 

    Private Sub SoundPictureBoxDiagramm_Paint(sender As Object, e As PaintEventArgs) Handles SoundPictureBoxDiagramm.Paint

        Dim Zeichnen As Graphics = e.Graphics

        Dim dx As Single = BreiteDesDiagramms / LängeZeitachse * AbgelaufeneZeit / ZählerTicks

        For j As Integer = 0 To ZählerTicks - 1

            Zeichnen.DrawLine(New Pen(Color.Yellow, 0.1F), j * dx, KoordinateDiagrammMittellinie _

                              - PufferArray(j) * StreckungsfaktorAmplitude, j * dx, _

                              KoordinateDiagrammMittellinie + PufferArray(j) * StreckungsfaktorAmplitude)

        Next j

    End Sub

End Class

 

Keine Kommentare:

Kommentar veröffentlichen

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.