Audio Konvertierung

  • VB.NET
  • .NET (FX) 4.0

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Audio Konvertierung

    Moin liebes Forum,

    ich bin da auf ein kleines Problem gestoßen.
    Benötige für ein Projekt die Möglichkeit, Audiodateien zu konvertieren. Problem:
    Finde nirgendwo eine vernünftige Erklärung, wie man sowas konvertiert.
    Ich möchte eigentlich nur erklärt bekommen, wie man beispielsweise eine MP3 Datei einliest, und was man damit machen muss, damit es eine WAV wird. Wie differenziert man da?
    Ist eine Audiodatei nicht sowieso einfach nur eine Datei die ein Bytearray beinhaltet?

    Bitte helft mir :)
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~

    razzzer530i schrieb:

    Bitte helft mir
    Lass das :!:
    In den modernen Aufioformaten stecken Mannjahre.
    Du wirst nicht in der Lage sein, außer WAV ein anderes Audioformat selbst zu programmieren.
    Nimm z.B. FFMPEG, um Audioformate zu konvertieren: spielwiese.la-evento.com/hokuspokus/seite2.html
    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 razzer,

    richtig ist: Wavdateien sind Binärdateien, die den Ton unkomprimiert enthalten. Eine Wav-Datei hat aber zusätzlich noch einen Header. Hier steht z.B. drin, ob es ein Byte pro Sample gibt oder 2, also 8 Bit oder 16 Bit. Da steht auch ob es mono- oder stereo-Sound ist.

    Eine MP3-Datei hingegen ist ein komprimiertes Format. D.h. da kann man keine Rohdaten auslesen.

    Zum Abspielen wird ein MP3 jedoch dekomprimiert, also in den Urzustand zurückversetzt. Andersherum werden Rohdaten zu MP3 komprimiert und gespeichert. Um die Konvertierung zu machen, gibt es Controls (unter VB6 Ocxe). Man muss sich also nicht mit dem MP3-Algorithmus auseinandersetzen.

    Tatsache ist aber, dass immer wenn du was hörst, hat der Rechner die Rohdaten im Speicher. D.H. dein MP3-Player macht die Konversion zu Rohdaten und die werden abgespielt. Beim Ende des Stückes sind die Rohdaten (Wav) wieder weg.

    Alles klar?
    Vb3-Guru
    Das letzte mal als ich mich mit MP3 befasst habe, war es noch ein Verlustbehaftetes Audiokompressionsverfahren, dass, basierend auf einem psychoakustischem Modell, Kompressionsartefakte so gut es maschinenmöglich ist, versteckt.
    Nix mit:

    VB3-Guru schrieb:

    Zum Abspielen wird ein MP3 jedoch dekomprimiert

    Das ist komprimiert, und bleibt auch so, wie z.B. JPG.
    Zum Abspielen muss es dekomprimiert werden. D.h. das original-Signal muss wieder hergestellt werden und damit wird die Soundkarte gefüttert. Bei einem MP3-Player merkst du nichts davon.

    Ein jpeg wird zur Darstellung auf dem Bildschirm auch dekomprimiert. D.h. du siehst die dekomprimierte Bitmap (BMP). Das jpg auf deiner HD bleibt natürlich ein jpeg ;)
    @ VB3-Guru
    Das ist absoluter Unfug, was du da behauptest !
    Nichts und Niemand kann aus einer .mp3 Datei die Original Datei wiederherstellen !
    Das gilt auch für Bildformate !

    de.wikipedia.org/wiki/MP3
    tu-chemnitz.de/informatik/ThIS…tkom/Audiokompression.pdf

    FormFollowsFunction schrieb:

    Das ist absoluter Unfug, was du da behauptest !

    Also "absoluter Unfug" ist jetzt schon ein bisschen weit hergeholt.
    Ich denke, Du willst daruaf hinaus, dass MP3 (und JPEG) verlustbehaftete Kompressionsverfahren sind und man deshalb nicht mehr exakt die Originaldaten herausbekommt.
    Ja, schon. Aber darauf wollte @VB3-Guru ja nicht hinaus. Da könnte man durchaus etwas freundlicher darauf hinweisen, dass am Ende nicht mehr die Originaldaten herauskommen.

    @Thread
    Jedes Audioformat (von Bedeutung) hat eine Spezifikation. Diese kann man einsehen und man kann dementsprechend Code schreiben, der Daten nach dieser Spezifikation komprimiert und dekomprimiert.
    Bei MP3 wäre das zum Beispiel ein guter Anfang: mpgedit.org/mpgedit/mpeg_format/MP3Format.html
    Das Problem daran ist, dass es viel Arbeit ist. Besonders, wenn man auch alle selten verwendeten Fälle abdecken will. Da ist es einfacher, bestehenden Code zu verwenden. Ich kann mir gut vorstellen, dass es entsprechende Bibliotheken für .NET gibt. Als einfache Methode würde mir einfallen, die Datei mithilfe von FFMPEG zu RAW zu konvertieren und diese Rohen Samples dann in Dein Programm einzulesen.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Hitzige Diskussion.
    Da ich leider kein Soundexperte bin, bin ich mir da absolut nicht sicher. Aber wäre es nicht Unsinn, eine Rohdatei in MP3 umzuwandeln, nur um sie dann zum abspielen wieder zu dekomprimieren? Oder ist da nur die Speichergröße von Interesse? So wie bei RaR Dateien und sowas?

    Es gibt ja so viele Soundformate. Wofür das ganze dann? Bin mir sicher das für 5.1 oder 7.1 Systeme die Soundspur anders sein müsste als für einen 2.0 Kopfhörer.
    Mein Problem dabei ist eigentlich nur, dass ich verstehen möchte was da so hinter steckt. Die Soundformatierung benötige ich eigentlich nur, um die Tonspur aus ner MP4 Datei zu klauen, MP3 zu WAV zu wandeln und WAV zu MP3 zu wandeln. Die anderen Formate interessieren mich eigentlich nicht.
    Finde aber leider auch nichts was mir da so wirklich weiter hilft, wie man so etwas in VB bearbeiten könnte.
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~

    razzzer530i schrieb:

    um die Tonspur aus ner MP4 Datei zu klauen
    Sieh Dir mal diesen an:
    mkvtoolnix.download/downloads.html
    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!

    razzzer530i schrieb:

    Oder ist da nur die Speichergröße von Interesse?

    So ziemlich, ja.
    Kennst Du Jerobeam Fenderson? Ziemlich cool, was der Typ so macht. (Hier wird kurz erklärt, wie das funktioniert.) Die WAV-Datei, die zu diesem Song gehört, ist 237 MB groß. 5 Minuten und 24 Sekunden (oder 324 Sekunden), mal 2 Kanäle, mal 192000 Samples pro Sekunde, mal 2 Bytes pro Sample (16 Bit Float) + 44 Bytes WAV-Header = ~237 MB.
    Das ist eine ganze Menge an Daten.
    Aber der Knackpunkt ist, dass es gut aussieht, wenn man das an ein Oszilloskop hängt.
    Komprimiert man das runter auf MP3 mit 320 kb/s und einer Samplerate von 44800 Hz, dann sieht es wesentlich grausiger aus:

    Aber die Datei ist dann nur noch ca. 12 MB groß. Hören kann man diesen Unterschied aber nicht. Und das ist die Gretchenfrage: Wie weit kann man verlustbehaftet komprimieren, ohne dass man es merkt?
    Bei verlustfreien Kompressionsverfahren (FLAC zum Beispiel) stellt sich die Frage etwas anders: Wie weit kann man überhaupt komprimieren?

    Also ja, es geht darum, möglichst viel Platz zu sparen.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Also nur um das nochmal zu erklären: Wenn ein Sound (Musik) aus dem Lautsprecher kommt, dann ist das ein analoges Signal. Was anderes kann der Lautsprecher nicht. Vor dem Lautsprecher sitzt ein Verstärker. Der braucht auch ein analoges Signal.

    Vor dem Verstärker sitzt ein Prozessor, der das digitale Signal (raw audio) in ein analoges Signal wandelt. Der braucht Rohdaten, also das was man unter Windows als Wav bezeichnet.

    Will man nun ein MP3 abspielen, müssen die komprimierten Daten dekomprimiert werden und an die Soundkarte weitergegeben werden. Das macht der MP3-Player. Es gibt nun natürlich Geräte, die ein MP3 erkennen und die Konversion auf einem eigenen kleinen Prozessor dekomprimieren, z.B. ein iPod. Ob die Dekompression nun auf einem separaten Prozessor oder auf der CPU des PC gemacht wird, spielt keine Rolle - der Lautsprecher braucht ein analoges Signal, daran führt kein WEg vorbei - sonst hört man keinen Sound sondern nur digitales Rauschen ;-).

    Dass MP3 nicht verlustfrei ist, ist völlig klar. Töne oberhalb 16kHz werden abgeschnitten - das hört man aber nicht.

    Ähnlich ist es bei jpeg: Jedes komprimierte Format muss zunächst zu einer Bitmap dekomprimiert werden. Diese Bitmap liegt dann im RAM, z.B. im DC einer Picturebox. Nur die Rohdaten kann man als Bild sehen.

    Ich bin echt erstaunt über die Kompetenz mancher User auf dieser Site 8-)

    Beste Grüße
    vb3-guru

    VB3-Guru schrieb:

    Dass MP3 nicht verlustfrei ist, ist völlig klar. Töne oberhalb 16kHz werden abgeschnitten - das hört man aber nicht
    Das ist aber nur ein Bruchteil der Wahrheit.
    Die in MP3 verborgenen psychoakustischen Algorithmen sind wesentlich komplexer.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    @petaod

    Hilft das razzzer530i nun mit der Frage

    razzzer530i schrieb:

    Ist eine Audiodatei nicht sowieso einfach nur eine Datei die ein Bytearray beinhaltet?

    Tatsache ist, raw-audio ist einfach nur ein Array von Daten. Eine Wav-Datei enthält noch einen Header, der die Art der Daten beschreibt.
    Schau dir hierzu mal
    foren.activevb.de/forum/csharp…m-001-Raw-Audio-St/#forum
    und die nachfolgenden Threads an. Da kannst du sehen, wie man eine Wav-Datei erzeugt und gleich abspielt.

    Wie oben schon beschrieben, muss ein MP3 erst zu rwa-audio konvertiert werden, bevor es gespielt werden kann. Das ist nicht so leicht, aber machbar.

    Beste Grüße
    vb3-guru