ZVEI Tongenerator erstellen

  • VB.NET

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

    ZVEI Tongenerator erstellen

    Hallo,


    Ich wollte die Experten unter euch mal fragen, wie man einen Tongenerator programmieren kann!
    Und zwar soll das Programm eigentlich ganze Tonfolgen ausgeben können! Es handelt sich hier um das Tonsystem ZVEI-1

    Es gibt zig solcher Programme schon fertig, nur ich benötige eine individuell angepaste SW für Elektrotechnische Zwecke. Ich will das Programm gerne komplett mit einem Touchscreen bedienen, nur bei den fertigen Programmen sind die Buttons eben zu klein und die SW ist NICHT IMMER NUR über die Maus zu bedienen!

    Ich hab schon einige kleine und einfache Programme geschrieben, hab aber schon länger nichts mehr in VB programmiert, verwandte Themen haben sich auch nicht finden lassen, deswegen frag ich euch hier!

    Ich freu mich über eure Antworten
    Schaue mal hier gibt's eine passende Funktion mit der du Sinustöne erzeugen kannst.

    VB.NET-Quellcode

    1. Declare Function Beep Lib "kernel32.dll" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long



    mit dem Aufruf

    VB.NET-Quellcode

    1. Beep(1000,300)



    könntest du einen 300ms langen Sinuston der Frequenz 1000 Hz erzeugen.
    Die genauen Frequenzen sind ja auf Wikipedia beschrieben.

    Musst halt noch beachten, dass wenn zwei Ziffern direkt hintereinander kommen, dass du dann als 2. den "R"-Ton abspielen musst.

    Gruss
    Danke für eure Antworten, jetzt komm ich mal zum schreiben!

    Also ich hab ehrlich gesagt nicht wirklich die Ahnung, sowas "schweres" zu schreiben, deswegen sagt mir diese Funktion auch nicht wirklich was, sorry, aber ich vermute mal, dass der Ton hierbei aus dem PC Lautsprecher kommt, ich würde ihn von der Soundkarte brauchen.

    Ich hab bis jetzt mal mein Programm so ca. nach meinen Vorstellungen "gezeichnet", hab auch schon einige Codes der Form hinzugefügt (meistens irgendwie aus dem I-Net rausgesucht und kopiert, da ich schon so lang nichts mehr in VB 8 gemacht hab) aber das wichtigste, eben die Tonerzeugung fehlt mir halt....

    Da ich bis jetzt keine annähernden Beispiele zu dem Thema gefunden hab, die Zeit VB ausführlich zu studieren auch nicht da ist, wird dieses Projekt wahrscheinlich nicht fertig werden, da einfach zu schwierig für mich, es sei denn, es erbarmt sich wer um mich und hilft mir ein wenig, falls das evtl. möglich wäre! Ich weiss, dass mir niemand ein komplettes Programm schreiben wird,(ausser auf Bezahlung) aber vielleicht kann mir wer ein wenig unter die Arme greifen!?



    Danke euch recht herzlich!!!
    Gruss Chris
    Hi Chris2208.
    Probiers doch mal mit Console.Beep
    Das funktioniert auch aus einer Form heraus und das Signal läuft meines Wissens über die Soundkarte.
    Bei mir is das jedenfalls so.

    Mach ne Form, erstelle einen Button, und in das Button1.Click Event schreibste den Code.


    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim _Frequenz As Integer = 1000 'in Hz
    3. Dim _Dauer As Integer = 2000 'in Millisekunden - hier 2 Sekunden
    4. Console.Beep(_Frequenz, _Dauer)
    5. End Sub
    Console.Beep ruft eben diese WinAPI funktion auf...
    Die o.g. WinAPI Deklaration ist aber falsch:

    pinvoke.net schrieb:

    <DllImport("kernel32.dll", SetLastError := True)> _
    Private Shared Function Beep(ByVal dwFreq As UInteger, ByVal dwDuration As UInteger) As Boolean
    End Function

    Wäre weitausschöner und auch richtig...

    Funktioniert natürlich auch aus einer Forms Anwendung herraus, warum auch nicht?!

    Aber Console.Beep ist Managed und verschafft dir damit nicht nur den Vorteil weniger Code schreiben zu müssen ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

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

    Hi
    Der Code, den m9898 verlinkt hat, erzeugt einen Puffer, der RIFF-Wave-Daten enthält. Wenn du ihn mit den richtigen Daten befüllst, kannst du einen Sinuston ausgeben. Das wird auch im Code schon ausgeführt (einfach AppendSine aufrufen). Du musst halt immer die Elongationen, Amplituden usw. an die Anzahl der Bits pro Sample anpassen (also für 16 Short, für 8 SByte nehmen, usw.). Den Stream kannst du anschließend ausgeben lassen. Ist halt indirekt.

    Gruß
    ~blaze~
    Die Beep-Funktion geht nicht über die Soundkarte.
    Der Sound wird von CD-Laufwerken oder Gehäusen ausgeben.
    Falls beides nicht möglich ist, gibt es halt keinen Ton.

    Kenn ich aber ganz anders, aus eigener Erfahrung...
    1. Sound Karte
    2. falls 1 nicht vorhanden interner Lautsprecher
    3. falls 2 nicht vorhanden nichts
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Dann ist das ja ziemlich mysteriös.
    Ich habe den Sound vom CD-Laufwerk und Mainboard abgeklemmt.

    Komisch das kein Ton über Soundkarte kommt. Komisch das die Beep-Funktion funktioniert hat, als der Sound vom CD-Laufwerk noch nicht abgeklemmt war.
    Die Welt ist doch schon komisch, eh.


    Mfg.
    SAR
    Bei mir kommt der Sound aus'n Lüfter. 8|

    Frage an Chris2208. Wie ist denn Dein Wissenstand bei VB? Ich könnte Dir schon ne Lösung anbieten, die definitiv über die
    Soundkarte läuft. Das ist dann aber nicht so eine popelige Funktion wie beep(). Das braucht schon etwas Übung.

    Noch 'ne Frage, willst Du die 5-Ton Folgen des ZVEI-Standard nur estellen, nur abhören(analysieren) oder beides. Was willst Du
    zum Schluss als Applikation haben. Das kann ich alles nicht aus Deinem Post entnehmen.
    Hallo und danke für die vielen Antworten!!

    Also um die Frage von OnkelR zu beantworten, ich hab schon einige kleine und einfache Programme geschrieben, also eher für Anfänger...Mein Wissensstand reicht für das jetzige Vorhaben ohne Hilfe von jemanden anderen sicher nicht aus!! Wie gesagt, ich verlange keinen kompletten Programmcode, mir würde ein Grundgerüst reichen, das ich halt dann für meine Zwecke umschreiben kann, dass wäre toll!!

    Und was ich genau benötige ist ein Encoder, also ein Tongenerator der die Tonfolgen generiert. Protokoll benötige ich mom. nur ZVEI-1, POCSAG würde ich auch brauchen, nur ist das sicher noch aufwendiger, darum belasse ich es mal bei dem ZVEI-1!




    Edit: Ich hab jetzt mal den Code von OnkelR probiert, und der Ton kommt aus dem PC Speaker und nicht von der Soundkarte! Wenn ich das jetzt richtig verstanden habe, müsste ich den PC Speaker deaktivieren, damit ich den Ton aus der Soundkarte bekomme, ist das richtig?

    Danke!!
    Gruss Chris

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

    wegen POCSAG müsste ich auch erst mal schauen wie das aufgebaut ist.
    Du willst also die Tonfolge: Vorlauf(600ms) - 5 Töne a 70ms - Pause(600ms) - 5 Töne a 70ms - Pause(600ms)
    Du willst sie nur auf deinem Computer zur Laufzeit abspielen? Oder als Datei speichern?

    Hey Chris, ich weiß nicht was ihr mit eurer soundkarte habt. Hast du irgendein Sound-Aufnahmeprogramm?
    Spiel die freuquenzen mit console.beep() ab und schau ob du einen Aussteuerungspegel hast. Den hast Du garantiert.

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

    Ok, das versteh ich. Hättste mal eher mit rausrücken können ;)
    Ne Systemeinstellung für deinen audio-treiber haste nicht? Zwecks Umstellung, bzw. kann man bei vielen Einstellern auch den Pegel sehen
    wenn ein Signal über die Soundkarte kommt.