vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Sinuston ausgeben, Ton wird nicht verändert? Stream wird nicht gelöscht. 
Autor: fsg4u
Datum: 06.04.12 12:52

Moin moin,
Ich versuche gerade verschiedene Töne über die Soundkarte auszugeben.
Einen Ton kann ich auch ausgeben, aber wenn ich im Programm, dann die Frequenz, Amplitude oder Länge(Duration) änder, und wieder play mache, spielt er trotzdem nur den gleichen ton, obwohl ich createSignalData wieder neuaurufe.
Ich hab das Gefühl, dass er den Stream des Mediaplayers einfach nicht löscht. Starte ich das programm neu, kann ich einen anderen ton erzeugen.
Habt ihr eine Idee? Anbei mein Code:
Hab 2 Klassen. Meine Main und eine Audio.


Option Explicit On
Imports System.Runtime.InteropServices
Imports System.Threading.Thread
 
Public Class Main
    Dim a As New audio
 
    Private Sub BtTest_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles BtTest.Click
 
        a.CreateSignalData(1300, 1300, 30, TextBox1.Text) 'die länge des tons 
        ' wird aus der textbox  gelesen. frequenz für L und R sind 1300 Hz. 
        ' Amplitude bleibt bei 30
        a.StartPlay()                                     'startet den player
    End Sub
 
end class
 
Public Class audio
 
    Dim myFreqStream As New IO.MemoryStream
    Dim myStreamWriter As New IO.BinaryWriter(Me.myFreqStream)
 
    ' Physikal. Parameter
    Private myDuration As Double ' Zeit in Sekunden
    Private myFreq_1 As Double       ' Frequenz in Hz
    Private myFreq_2 As Double
    Private myPhaseshift As Double    ' Phasenverschiebung links/rechts in Grad
    Private myAmplitude As Double ' Amplitude 0-100
 
    ' Wav-Parameter
    Private mySamlpelsPerSecond As Integer 'VB6 Long
    Private myBlockalign As Short 'VB6 Integer
    Private myChannels As Short 'VB6 Integer
    Private myBitsPerSample As Short 'VB6 Integer
 
    Private mySoundData() As Integer 'VB6 Long
    Private Const Pi2 As Double = Math.PI * 2 '6.28318530717959
 
    Public ReadOnly Property FreqStream() As IO.Stream
        Get
            Me.myFreqStream.Position = 0
            For i As Integer = Me.mySoundData.GetLowerBound(0) To _
              Me.mySoundData.GetUpperBound(0)
                Me.myStreamWriter.Write(mySoundData(i))
            Next
            Return Me.myFreqStream
        End Get
    End Property
 
    Public Sub CreateSignalData(ByVal freqL As Integer, ByVal freqR As Integer, _
      ByVal Ampl As Double, ByVal dur As Double)
 
        myDuration = dur
        mySamlpelsPerSecond = 44100
        myFreq_1 = freqL
        myFreq_2 = freqR
        myAmplitude = Ampl
        myBitsPerSample = 16
        myChannels = 2
        myPhaseshift = 180
 
        Dim t As Double
        Dim tStep As Double
        Dim w1 As Double
        Dim w2 As Double
        Dim nSamples As Integer 'VB6  Long
        Dim A As Double
        Dim Phi As Double
        Dim i As Integer 'VB6  Long
 
        nSamples = CInt(myDuration * mySamlpelsPerSecond)
        tStep = 1 / mySamlpelsPerSecond
 
        w1 = myFreq_1 * Pi2
        w2 = myFreq_2 * Pi2
        Phi = myPhaseshift * Pi2 / 360
 
        ReDim mySoundData(nSamples + 10)
 
        A = (myAmplitude / 100) * 32000
        For i = 11 To nSamples + 10
            mySoundData(i) = CInt(65536 * CInt(A * Math.Sin(w1 * t)) + A * _
              Math.Sin(w2 * t + Phi))
            t = t + tStep
        Next i
        Call SetHeader(nSamples * 4)
    End Sub
 
    Private Sub SetHeader(ByVal nBytes As Long)
        myBlockalign = CShort(myChannels * myBitsPerSample / 8)
        mySoundData(0) = 1179011410   ' Riff
        mySoundData(1) = CInt(nBytes + 36)  ' Länge
        mySoundData(2) = 1163280727   ' Wave
        mySoundData(3) = 544501094    ' fmt
        mySoundData(4) = 16           ' immer 16 (auch bei 8 Bit-Sound)
        mySoundData(5) = myChannels * 65536 + 1
        mySoundData(6) = mySamlpelsPerSecond        ' SPS
        mySoundData(7) = mySamlpelsPerSecond * myBlockalign
        mySoundData(8) = myBitsPerSample * 65536 + myBlockalign
        mySoundData(9) = 1635017060   ' "DATA"
        mySoundData(10) = CInt(nBytes)      ' Datenlänge in Byte
    End Sub
 
 
    Protected Overrides Sub Finalize() 'keine ahnung wofür das hier ist und 
    ' wann man es aufrufen soll
        Me.myFreqStream.Dispose()
        MyBase.Finalize()
    End Sub
 
    Private WithEvents myPlayer As New System.Media.SoundPlayer()
 
    Public WriteOnly Property AudioData() As IO.Stream
        Set(ByVal value As IO.Stream)
            value.Position = 0
            Me.myPlayer.Stream = value
        End Set
    End Property
 
    Public Sub StartPlay()
        AudioData = FreqStream
        Me.myPlayer.Play()
    End Sub
 
    Public Sub StopPlay()
        Me.myPlayer.Stop()
    End Sub
End Class
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Sinuston ausgeben, Ton wird nicht verändert? Stream wird nic...2.627fsg4u06.04.12 12:52
Re: Sinuston ausgeben, Ton wird nicht verändert? Stream wird...1.308ModeratorFZelle06.04.12 14:21
Re: Sinuston ausgeben, Ton wird nicht verändert? Stream wird...1.288fsg4u06.04.12 15:48
Re: Sinuston ausgeben, Ton wird nicht verändert? Stream wird...1.384ModeratorFZelle07.04.12 13:12
Re: Sinuston ausgeben, Ton wird nicht verändert? Stream wird...1.270fsg4u09.04.12 12:52

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel