Tonfolge als .wav abspeichern.

  • VB.NET

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von OnkelR.

    Tonfolge als .wav abspeichern.

    Moin,

    ich erzeuge mit diesem Befehl:

    VB.NET-Quellcode

    1. Console.Beep(1000, 100)

    eine zufällige Tonfolge. Diese möchte ich rigenwie als .wav-Datei abspeichern und möglichst auch wieder auslesen können.
    D.h.: If Ton = 1000ms, 100Hz then ...

    Kann mir bitte jemand weiterhelfen.
    Ich google schon seit einigen Tagen und haben bisher nix gefunden was ich verstanden hab oder was mich weitergbracht hätte.

    Danke
    Jojo
    Dazu solltest du erstmal verstehen wie eine WAV Datei funktioniert.

    Ein guter Artikel dazu ist dieser hier: de.wikipedia.org/wiki/Sampling_(Musik) - Abschnitt Audiosample.

    Eine WAV Datei besteht also aus einem 44 Byte großen Header, und danach den eigendlichen Sounddaten.
    Console.Beep generiert ein Rechteck, also sollte es reichen, sich einfach bei einer Samplingrate von 44100 Hz und sagen wir 8bit, auf der Frequenz des Tones entweder 255 oder 0 zu schreiben.

    Jenachdem, wie lange du das machst, ändert sich die Tonlänge. eine Pause wäre einfach 0 über 44,1 kB für eine Sekunde Pause.

    Zum Generieren des WAV-Headers musst du nen bisschen hier im Forum suchen, dass hatten wir neulich erst.

    Ich hoffe ich konnte helfen, und hab dich nicht mit Fachbegriffen erschlagen,
    Manawyrm

    Kurzer Nachtrag:

    jep. Das ist ein Rechteck. siehe hier:
    de.wikipedia.org/wiki/Systemlautsprecher

    Viel Erfolg!

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

    Herzlich willkommen im Forum. :thumbup:
    Willst Du im Sinne einer Musik-Meta-Datei Deine Töne codieren:
    1000, 100
    2000, 141
    1500, 150

    als Datei abspeichern, mit System.IO.File.ReadAllLines(...) einlesen, splitten und Deine Play(a, b)-Routine aufrufen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    Willst Du im Sinne einer Musik-Meta-Datei Deine Töne codieren:
    Sorry, aber ich versteh hier grad nur Bahnhof :D

    Manawyrm schrieb:

    Console.Beep generiert ein Rechteck, also sollte es reichen, sich einfach bei einer Samplingrate von 44100 Hz und sagen wir 8bit, auf der Frequenz des Tones entweder 255 oder 0 zu schreiben.



    Jenachdem, wie lange du das machst, ändert sich die Tonlänge. eine Pause wäre einfach 0 über 44,1 kB für eine Sekunde Pause.
    Ich habs glaub ich verstanden, hab aber leider trotzdem keine Ahnung wie ich das Programmieren soll. ?(
    (Alles was ich bis jetzt programmiert hab war: TicTacToe, Taschenrechner und ein paar Sachen von Youtube nachprogrammiert.)

    Vielen DAnk

    Jojo

    LJ Jojo schrieb:

    hab aber leider trotzdem keine Ahnung wie ich das Programmieren soll.

    Dann solltest Du etwas kleiner anfangen und Beispiele aus einem Buch nachprogrammieren, Threads mit Dich interessierenden Themen verfolgen, die Grundlagen lernen halt.
    Wenn Du nicht weißt, wovon wir reden, musst Du unsere Sprache lernen, nicht anders herum. Sorry.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Naja, das hier ist schon ziemlich harter Tobak, daher ist das imho in Ordnung.

    Frage an dich: Wie gut kannst du VB? Schonmal mit Streams gearbeitet? mit Klassen?
    Und dann: Weißt du wie Audio funktioniert? Wenn nein: Bitte anhören. Lohnt sich. meta.metaebene.me/media/cre/cre154_digital_audio.mp3
    Außerdem: Mathe in Richtung 5,6 Klasse hast du drauf, oder?

    Wenn du das drauf hast, können wir weitermachen.

    Hört sich schlimmer an, als es ist ;)

    Gruß,
    Manawyrm

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

    Manawyrm schrieb:

    Weißt du wie Audio funktioniert? Wenn nein: Bitte anhören. Lohnt sich. meta.metaebene.me/media/cre/cre154_digital_audio.mp3
    Ich hab mir die zweieinhalb Stunden angetan.
    Ein bisschen langatmig ist es schon.

    Das liegt mit daran, dass die beiden Moderatoren die Zeit damit verplempern, sich ihr Halbwissen gegenseitig zu korrigieren.
    Unterm Strich kommt dann auch meist eine korrekte Aussage heraus.
    Aber wer Detailwissen besitzt, muss ab und an feststellen, dass beide die Materie nicht immer vollständig verstanden haben.

    Das ist aber nicht unbedingt dramatisch, da der Laie sowieso schon viel früher abschält.
    Ich glaube, dass der Podcast für einen Anfänger zu heftiger Tobak wäre und würde ihn eher als interessante Fachsimpelei einordnen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @LJ Jojo:
    Soll hinterher eine Datei rauskommen, die Du mit dem Windows Media Player abspielen kannst
    oder
    soll hinterher eine Datei rauskommen, die Du mit Deinem Programm ausliest und dann per Console.Beep() abspielst?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielen Dank das es hier doch noch weiter geht.

    Also hier soll eine Datei rauskommen, die ich mit dem WM Player abspielen kann. Ich will sie aber auch wieder einlesen können. (steht oben genauer)

    Mathe 5. + 6. kann ich (außer da kommt jetzt schriftliches dividieren+multiplizieren) :D



    Das Podcast hör ich mir jetzt mal an. :)

    Mit nem Stream hab ich bis jetzt noch nicht gearbeitet. :/





    Jojo

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „LJ Jojo“ ()

    Ich hab hier irgendwo was gelesen, dass man mit der bass.dll oder so ähnlich die Lautstärke von Frequenzen analysieren kann. ich brauche letztendlich 10 Frequenzen. Wenn ich alse welche wähle, die weit auseinader sind, müsste das doch gehen. Man spielt die Datei ab und gleichzeitig schaut das Programm über die Bass.dll:
    If Frequenz xy.lautstärke > 50 Then
    Label1.Text="Ja"
    EndIf

    oder so ählich.
    Such mal auf der Hauptseite nach WAVE generieren.
    Du hast einen WAVE-Header, der muss richtig belegt sein und danach eine entsprechende Anzahl Samples, je nach Typ Mono-8, Mono-16 oder Stereo-8, Stereo-16 und so.
    Da musst Du halt mal ein wenig rumspielen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo LJ Jojo

    Hab ma ne Anwendung gemacht mit Unterstützung der bass.dll
    Geht leider den Umweg über die Soundkarte.

    1. Du wählst in der Combobox eine Frequenz aus
    2. im NumericUpDown legst Du die Dauer des Tones in Millisekunden fest
    3. der Aufnahmepegel sollte nicht zu hoch sein (Übersteuerung)
    musste bissel experimentieren.
    4. Button "Ton abspielen und aufnehmen" drücken
    5. Im Verzeichnis der Anwendung befindet sich die generierte Wav namens "_tmp.wav"

    Ist jetzt alles Husch Husch gemacht. Gerade was die Dauer des Tones betrifft, das
    geht natürlich eleganter über den Aufnahmetimer. Habsch aber jetzt keinen Bock gehabt.

    Sollte das Deinen Ansprüchen genügen, schick ich Dir den Source-Code zum reinfummeln
    in Dein Programm.

    mfg OnkelR
    Dateien
    • Generator_app.zip

      (341,56 kB, 165 mal heruntergeladen, zuletzt: )

    OnkelR schrieb:

    Sollte das Deinen Ansprüchen genügen, schick ich Dir den Source-Code zum reinfummeln
    in Dein Programm.
    DANKEEEEE! Das ist genial! Müsste ich noch etwas anpassen, und dann hätte ich immerhin schon mal den Ton :love: ;)
    Naja, meine Ohren sind jetzt zwar hinüber, aber was solls... Ich hab mein Laptop an meiner großen Anlage angeschlossen und hab ihn deswegen als auf 3% stehn... bis eben :D

    Kann man doch bestimmt auch so abändern, dass er eine Tonfolge in die .wav speichert?!

    Aber den Sourcecode würde ich mir trotzdem gerne mal anschauen.

    Jojo :) :) :)

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

    Hi.
    Sind die Ohren jetzt sauber, was?
    Ja, Tonfolgen gehen natürlich auch. Wieviel Töne sollen es denn sein und wie lang die Pause zwischen den Tönen?

    Wenn Du dich für diese Variante entscheidest, dann solltest Du dich unbedingt auch hier mal umschauen un4seen.com/

    mfg OnkelR
    Dateien
    • Generator.zip

      (474,69 kB, 157 mal heruntergeladen, zuletzt: )