ZVEI Tongenerator erstellen

  • VB.NET

Es gibt 74 Antworten in diesem Thema. Der letzte Beitrag () ist von mcbo.

    Chris, hier is maln Projekt, das hat zum Teil mit deinem Zeugs zu tun. Ich arbeite ja grad an
    was ähnlichem.
    Debugg das mal und drücke den Generator-Button. Schau mal ob das über deine soundkarte läuft.
    Signal abspielen & Aufnahme Bereitschaft auch mal testen, stell die Pegel ein, experimentieren.
    Is alles noch unübersichtlich, aber es geht ja um die Funktion.

    BOS-Anwendung.zip
    Hier ist eine Kopie des Codes (fast ganz unten in meinem Beitrag im Link)

    VB.NET-Quellcode

    1. Dim stream As New IO.MemoryStream
    2. Dim generator As New SoundGenerator(stream, New RiffWaveFmtChunkSettings(1S, 2S, 44100I, 16S))
    3. Dim soundPlayer As New Media.SoundPlayer
    4. generator.AppendSine(440.0, Short.MaxValue, TimeSpan.FromMilliseconds(500.0))
    5. stream.Seek(0, IO.SeekOrigin.Begin)
    6. soundPlayer.Stream = stream
    7. soundPlayer.Play() 'PlaySync, etc.


    Der "große" Code kommt gleich, ich war nur eben weg.

    Gruß
    ~blaze~

    OnkelR schrieb:

    Chris, hier is maln Projekt, das hat zum Teil mit deinem Zeugs zu tun. Ich arbeite ja grad an
    was ähnlichem.
    Debugg das mal und drücke den Generator-Button. Schau mal ob das über deine soundkarte läuft.
    Signal abspielen & Aufnahme Bereitschaft auch mal testen, stell die Pegel ein, experimentieren.
    Is alles noch unübersichtlich, aber es geht ja um die Funktion.

    vb-paradise.de/index.php/Attac…2120bed25805514ae1ddf2f1f

    Danke für die Datei!!

    Hab das Projekt ausprobiert und es funktioniert bei mir, der Ton kommt aus der Soundkarte!

    Darf ich fragen was das genau werden soll, bzw für welche Zwecke das benutzt werden soll?

    ~blaze~ schrieb:



    Der "große" Code kommt gleich, ich war nur eben weg.

    Gruß
    ~blaze~
    Danke für deine Mühe, ich warte gespannt darauf!!
    Na prima. Da is'n User hier im Forum, der braucht das für die Feuerwehr. Der kriegt das 5-ton signal übern Pager und eine art mp3-player
    oder so, über USB geht der Sound über die soundkarte und mein Proggi wertet die Frequenzen aus.
    Und bei zB. 88002 gibts Feueralarm übern Server. So ähnlich solls mal funzen.
    Kommen die anderen Signale auch? Bei button "Signal abspielen"?

    OnkelR schrieb:

    Na prima. Da is'n User hier im Forum, der braucht das für die Feuerwehr. Der kriegt das 5-ton signal übern Pager und eine art mp3-player
    oder so, über USB geht der Sound über die soundkarte und mein Proggi wertet die Frequenzen aus.
    Und bei zB. 88002 gibts Feueralarm übern Server. So ähnlich solls mal funzen.
    Kommen die anderen Signale auch? Bei button "Signal abspielen"?

    Ah verstehe, aber es gibt doch schon fertige Auswertungsprogramme, ich zbs. nutze solche schon sehr lang!
    Ja, die anderen Signale kommen auch, es funktioniert auch der Recorder !

    Ich muss an der Stelle jetzt leider aufhören, muss Morgen früh raus, melde mich aber dann Morgen wieder!!

    Danke recht herzlich euch Zwei, für eure Hilfe!!! :thumbup:

    Wünsch eine gute Nacht und bis Morgen
    Gruss Chris
    So, hier ist das mal mit DirectSound. Ich habe jetzt über einen Stream gearbeitet, man kann natürlich auch ohne arbeiten (habs nur aus Kompatibilitätsgründen gemacht). Es existiert eigentlich kein wirklicher Puffer für die Daten, sondern die werden beim Aufruf von PCMSoundStream.Read durch den ständigen Aufruf des im Konstruktor übergebenen Delegaten (siehe ApplicationEssentials.Main) berechnet. Ist jetzt nicht die performanteste Art, das zu lösen, aber dynamisch und relativ einfach zu verändern. Wenns Fragen gibt, kannst du sie natürlich gerne stellen.

    Edit: gefundene Bugs aus Code entfernt

    Gruß
    ~blaze~
    Dateien

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

    Man, guter Source-Code! Hat mir einiges eröffnet.
    Krieg beim debuggen allerdings ne exception. Muss später mal in Ruhe gucken.



    Bin zwar nicht der Thread-Ersteller, aber toll, dass Du so hilfst. :thumbsup:
    mfg OnkelR


    Hey Chris.
    Ich hab jetzt soweit alle Funktionen zusammen, ausgehend von dem Projekt was ich Dir gepostet habe.
    Um jetzt gezielt weiter zu proggen, bräucht ich noch ein paar Infos.

    1. welche Frequenzen willst Du einbinden?
    Nur die vom ZVEI-Standart: (1060, 1160, 1270, 1400, 1530, 1670, 1830, 2000, 2200, 2400 und 2600 Hz)
    Oder lieber flexibel, also Du gibst ne Frequ Deiner Wahl in ein Feld ein und das Proggi berechnet dann die Sinus-Welle...

    2. Einbinden der Auswahl-Möglichkeit eine Frequenz als Dauerton, oder in einer wählbaren Zeitdauer abzuspielen

    3. abspielen von 5-Ton-Folgen:
    soll der Standart benutzt werden (Vorlauf(600ms) - 5 Töne a 70ms - Pause(600ms) - 5 Töne a 70ms - Pause(600ms))
    oder soll die Zusammenstellung auch flexibel sein...

    4. die Rekorder-Funktion brauchst Du vielleicht auch nicht, ich weiß nicht

    5. naja und alles was Dir sonst noch so vorschwebt

    Ich weiß allerdings noch nicht wie ich Zeit habe, Du weißt schon wegen dem Weihnachtsgedönse und so.
    Mach also erstmal 'nen schönen Plan und dann schaun wir mal, ge.

    Fröhliche Weihnachten!
    mfg OnkelR

    Edit by ~blaze~:
    Doppelpost
    --> *Beiträge zusammengefügt*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()

    Hi
    Hast du die MainForm-Eigenschaft stehen lassen? Die erzeugt automatisch eine Instanz, sobald (wieder) eine benötigt wird/werden sollte. Bei meinem Generator kann man einfach dynamisch die Frequenz einbinden, indem man den Delegaten unterscheiden lässt (oder ihn auswechselbar macht, z.B. durch eine Eigenschaft).

    Edit:
    Wurde gerade auf den Fehler im Programmcode aufmerksam gemacht: Ich hatte ursprüngllich die MainFormInvalid-Property als MainFormValid vorgesehen. Allerdings stand dann eine doppelte Verneinung im Code und die war überflüssig. Da hab' ich beim Umbenennen einfach vergessen, das Not wegzustreichen. Korrekt wäre:

    VB.NET-Quellcode

    1. Public Shared ReadOnly Property MainFormInvalid As Boolean
    2. Get
    3. Return frmMainForm Is Nothing OrElse frmMainForm.IsDisposed
    4. End Get
    5. End Property

    Außerdem fehlt bei der Main-Prozedur der Aufruf vor dem End If:

    VB.NET-Quellcode

    1. Application.Run(MainForm)

    VB.NET-Quellcode

    1. Public Shared Sub Main(ByVal args() As String)
    2. Dim sd As New SelectDevice()
    3. Application.EnableVisualStyles()
    4. If sd.ShowDialog() = Windows.Forms.DialogResult.OK Then
    5. dDevice = New Device(sd.SelectedDevice.DriverGuid)
    6. dDevice.SetCooperativeLevel(MainForm, CooperativeLevel.Normal)
    7. 'Play sound
    8. Dim sb As New SecondaryBuffer(New PCMSoundStream(UserDefaultWaveFormat(), TimeSpan.FromSeconds(5.0#), AddressOf SineHandler), dDevice)
    9. sb.Play(0, BufferPlayFlags.Default)
    10. Application.Run(MainForm)
    11. End If
    12. End Sub


    Entschuldigung für die dummen Fehler und vielen Dank an Kangaroo für den Bugreport! Ich lade gleich mal eine neue Version rauf...

    Edit:
    Erledigt.

    Gruß und ebenfalls frohe Weihnachten
    ~blaze~

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „~blaze~“ ()

    So hallo und alles gute im neuen Jahr!!


    Ich hatte bis jetzt keine Zeit, irgendwas mit dem Projekt weiter zu machen, doch jetzt hab ich wieder Zeit!

    Danke nochmal für eure Hilfe!

    @~blaze~

    Danke vielmals für den Code, doch leider scheint mir das viel zu aufwendig und blicke hier absolut nicht durch...Sorry

    Ich werd wohl selber hier nicht weitermachen können, da ich das was du geschrieben hast, nicht verstehe...


    Ich muss mich wohl mit dem fertigen Programm abfinden! Hierbei ist mir damals eine Idee gekommen. Das fertige Programm hat eine Textbox, wo die Tonfolge drin steht und die kann man per Maus auswählen und zusätzlich anhand der Tastatur befüllen! Da ich aber von der externen Tastatur weg will, ist mir ne Onscreen Tastatur eingefallen, die ich nun versuche zu programmieren. Jetzt steh ich aber da wieder an, die ganzen Beispiele die ich gefunden habe, können nur IN einem Programm eine Textbox befüllen, ich finde aber kein Beispiel, wo man die Tastatur extern in ganz Windows betreiben kann!

    Ich bräuchte eigentlich nur eine Zehnertastatur, kann mir hier wer helfen?

    @OnkelR

    Wie sieht's bei deinem Projekt aus, bist du schon weitergekommen?

    Danke vielmals!!!
    Gruss Chris
    Hi Chris, auch Dir ein gesundes Neues.
    Jo, ein bisschen weitergemacht hab ich, muss mich aber erstmal wieder rein denken.
    Ich schau gleich mal nach. Also Töne und Tonfolgen mit Pause und trallala könnten wir jetzt auch selber generieren, kein Problem mehr.
    Alles mit der Bass.dll, ge.

    Du mußt mir Deinen aktuellen Stand berichten.
    mfg OnkelR
    Hallo, danke fürs schnelle Antworten!

    Also mein Stand ist noch da wo ich zum schreiben aufgehört hab. Ich hab das Projekt von blaze probiert, nur blicke ich wie gesagt hier überhaupt nicht durch...

    Ich kann dir mal mein Projekt zum anschauen schicken, aber bitte nicht auslachen - ANFÄNGER!!! Es ist noch nicht wirklich viel mit Codes bestückt, weiters weis ich garnicht, ob man den Code, den ich geschrieben habe überhaupt für das was ich vor hab, weiterführen kann...Aber es ist halt mal so angeordnet, wie ich mir das vorstelle, zumindestens die Form!

    Gruss Chris
    Das sieht schon sehr gut aus, zumindestens ist das schon mal viel mehr als bei mir! :D

    Ich würde das dann so benötigen, das ich für jeden einzelnen Ton/Frequenz nur eine Zahl ( siehe unten ) eingebe oder auswähle, um nicht die Frequenz aus der Dropdown auswählen zu müssen!
    Und aus den 5 eingegebenen Zahlen wird die Tonfolge dann generiert!

    Hier is mein Projekt!


    Hier die Zahlen die die Frequenz ergeben, die kennst du aber wahrsch. eh!

    1 - 1060
    2 - 1160
    3 - 1270
    4 - 1400
    5 - 1530
    6 - 1670
    7 - 1830
    8 - 2000
    9 - 2200
    0 - 2400
    R - 2600
    Dateien
    • HP radio neu.rar

      (156,68 kB, 138 mal heruntergeladen, zuletzt: )
    Jo. Ich schau mir Dein Projekt an, und dann mach ich mal 'ne ordentliche Eingabe-Möglichkeit.
    Würde doch gehen, ne Textbox - Du gibst 5 Zahlen ein, drückst Start oder so - dann wird Tonfolge abgespielt, oder?

    Gleich mit Pause? Also Tonfolge - 600MS Pause Tonfolge
    Ja so wie ich es in meinem Projekt gemacht habe, nur weiss ich nicht, ob man den Wert, der in der Texbox steht, so auslesen kann, wie benötigt, oder ob man das was anderes machen muss!? Die Pause kann man so lassen, wie du es gemacht hast, einige Einstellunge manuell durchführen ist eigentlich immer gut!

    Danke vorweg schon mal für deine Hilfe, so viel wie hier wurde mir noch nie unter die Arme gegriffen!! :D
    Ok, ich sehe grad du hast nen Tastenfeld und ne Textbox die darüber gefüllt wird, und den button "Auslösen".
    Ich pass das mal in ruhe an, also du gibst alles erstmal über dein tastenfeld ein, und drückst dann "Auslösen".
    Klingklong, färtsch, ge.
    Ich werde mich so in 2 Stunden wieder melden.
    mfg OnkelR