Einfacher sound recorder für .NET

  • VB.NET

Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von DTF.

    Einfacher sound recorder für .NET

    Hi,

    Ich suche nach einer möglichst EINFACHEN Lösung für folgendes Problem:

    Ich habe einen kleines "Sprachlabor" in .NET geschrieben, mit dem ich längere fremdsprachliche .mp3 Dateien kontrolliert abspielen kann. Manchmal verstehe ich einen Satz nicht und würde gern einen Muttersprachler um Rat bitten. Aber natürlich will ich ihm nichr die ganze .mp3 Datei schicken, sondern nur die fragliche Passage.

    Ich kann solche Sätze in meinem Sprachlabor gezielt abspielen - und diese Ausgabe würde ich dann gern als .mp3 Datei abspeichern.

    Zur Zeit nutze ich den Windows Voice Recorder ... der die Lautsprecher Ausgabe per Mikrophon aufzeichnet - oder aber ich nutze mein "Video Capture" um eine .mp4 Datei von dem Fenster zu erstellen. Aber all das ist natürlich nicht zufriedenstellend.

    Ich würde also gern die Ausgabe meiner Sound Karte per Programm aufzeichnen ... dazu hätte ich gern ein möglichst einfaches .NET Programm ...

    Das müsste doch eigentlich mit ein paar Zeilen Code zu machen sein (so wie ich ja auch einen Screenshot mit ein paar Zeilen Code erstellen kann).

    Zu diesem Thema finde ich vorwiegend älltere Threads - das Thema ist offensichtlich ziemlich ausgekaut. Allerding sind die Lösungen wie mir scheint recht komplex ... entweder muss man irgendeine App installieren, oder man benötigt DLLs ... da muss man sich tief in die Materie einarbeiten.

    Ich hoffe, ihr könnt mir mit einem CodeSnippet aushelfen. Das Programm soll nach dem Start einfach alles von der Sound Karte aufzeichnen ... und beim Programm Ende alles in eine .mp3 Datei abspeichern. Nicht mehr und nicht weniger. Das sollte doch ohne große Kopfstände machbar sein.

    Oder aber alternativ:

    Zum Abspielen der .mp3 Dateien nutze ich den AxWindowMediaPlayer ... gibt es da vielleicht eine Option, die beim ".play" das Ganze aufzeichnet ?

    LG
    Peter

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

    Lade dir die BASS.dll runter und auch die BassNet.

    Bei der BASS.dll sind Beispiele bei, "RecTest" ist eins wo du mal reinschauen und dann nutzen könntest. Wenn ich mich recht erinnere VB-Classic Code, es sollte nicht schwer sein den Code zu modernisieren.

    PS.
    Jupp, das Beispiel ist dabei, heist tatsächlich RecTest und ist VB Classic, schau dir einfach den Code an und bau da drauf auf.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    @Peter329 Wenn Du mit WAV arbeiten würdest, könntest Du ganz easy Anfang und Ende markieren und den Bereich speichern.
    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!
    @RFG

    das mit der .wav Datei klingt vielversprechend.

    Aber die Dateien stammen oft von DVDs ... und da sind sie nun mal als .mp3 Datei abgespeichert.

    Gibt es denn eine einfache Möglichkeit eine .mp3 Datei per .Net in eine .wav Datei zu konvertieren?

    @DTF

    ... womit wir wieder bei einer DLL wären. :)

    Na, mal sehen, wo ich die (aus verlässlicher Quelle) herbekomme. Und ob ich den Code dann auch noch gebacken bekomme.

    LG
    Peter

    Peter329 schrieb:

    aus verlässlicher Quelle

    Wie wär's denn mit der Idee das Ding beim Hersteller zu besorgen? Sowohl BASS, wie und auch Addons und auch die BassNet bekommst du dort. Verweiss auf die BassNet, bass.dll in Debug/Release Ordner kopieren, schon ist das Einsatzbereit.
    un4seen.com/
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Peter329 schrieb:

    Gibt es denn eine einfache Möglichkeit eine .mp3 Datei per .Net in eine .wav Datei zu konvertieren?
    @-Franky- hat mal Code für einen Media-Konverter gepostet, ohne DLL.
    Der Audio-Part funktioniert ganz prima.
    Audio- und Video-Converter mit Windows-Boardmitteln (ab Windows 10)
    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!
    Hi

    Neben dem von @RodFromGermany genannten Code der die WinRT nutzt, könntest Du auch direkt die MediaFoundation nutzen (die WinRT nutzt die gleiche Schnittstelle) um eine MP3 zu WAV zu konvertieren. Die MediaFoundation stellt dafür sogar einen passenden SinkWriter für WAV-Dateien bereit. Der Programmieraufwand ist bei der WinRT aber geringer. Leider hab ich nur VB6-Code wie das mit der MediaFoundation und MP3 zu WAV funktioniert. Du kannst natürlich auch die MediaFoundation nutzen um direkt von einem Mikrofon aufzunehmen uvm. Falls Du Dich in die MediaFoundation einarbeiten möchtest, kann ich Dir zb dieses PDF empfehlen: ofitselfso.com/Tanta/Windows_M…etting_Started_CSharp.pdf Zum Thema ".. womit wir wieder bei einer DLL wären" Du nutzt ständig irgendwelche DLLs oder Schnittstellen von Windows, auch wenn Du das kaum in .Net mitbekommst. Die Frage ist nur, möchte man sich zusätzliche DLLs an Bord holen die unter Umständen das gleiche können, wie die vorhandenen Windows DLLs bzw. Schnittstellen. ;)
    Mfg -Franky-

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

    Also erst mal vielen Dank für eure Ratschläge.

    Ich habe das jetzt mal versucht zu ordnen.

    Also die Idee, die Datei erst mal in eine .wav Datei zu konvertieren habe ich aufgegeben. Das scheint mir nicht ganz so trivial zu sein und selbst wenn es mir gelingt, dann habe ich ja immer noch nicht das Problem gelöst, dass ich den passenden Ausschnitt als Datei abspeichere.

    Da erscheint mit die Sache mit dem Sound Recorder vielversprechender.

    Ich hab die BASS Sortware heruntergeladen,mit bass.dll und rectest folder. Leider vestehe ich das Beispiel RECTEST nicht so richtig. Wie kriegt man das Dingens denn zum Laufen. Was muss ich denn mit den Files .frm, .bas und .vbp anstellen?

    Meine Kenntnisse sind halt limitiert ... irgendwie fehlt mir das Know-how wie ich daraus eine lauffähige VB-Anwendung mache.

    Na, vielleicht hat ja jemand Geduld, mir auf die Sprünge zu helfen ... es wäre halt schön, wenn mein gut funktionierendes "Sprachstudio" auch noch eine "Record-Funktion" hätte.

    LG
    Peter

    Peter329 schrieb:

    Leider vestehe ich das Beispiel RECTEST nicht so richtig. Wie kriegt man das Dingens denn zum Laufen. Was muss ich denn mit den Files .frm, .bas und .vbp anstellen?

    Diese Dateien gehören zu einem VB6 Projekt. Du kannst mit jedem beliebigen Texteditor in die Datei schauen. Da es sich um VB6 Code handelt, müsstest den Code entsprechend nach .NET übersetzen.

    Peter329 schrieb:

    Also die Idee, die Datei erst mal in eine .wav Datei zu konvertieren habe ich aufgegeben. Das scheint mir nicht ganz so trivial zu sein und selbst wenn es mir gelingt, dann habe ich ja immer noch nicht das Problem gelöst, dass ich den passenden Ausschnitt als Datei abspeichere.

    Das konvertieren ist super einfach. Siehe auch das WinRT Beispiel dazu. Selbst direkt mit der MediaFoundation sind es nur ein paar Zeilen Code mehr. Man muss sich halt damit beschäftigen wollen. ;) Teile aus einer WAV auszuschneiden ist ebenfalls einfach. WaveHeader auslesen (üblicherweise 44 Byte). Im WaveHeader stehen alle wichtigen Informationen wie SampleRate, Channels, WaveTyp, Bits, Größe der Daten usw. Die eigentlichen WaveDaten kommen nach dem WaveHeader (oder falls vorhanden, nach dem letztem Chunk-Block <- kommt selten vor). Anhand der Daten aus dem WaveHeader kann man nun genau errechnen, wo X-(Milli)Sekunde in den WaveDaten beginnt und endet. Den Teil kopiert man sich, schreibt einen neuen WaveHeader mit entsprechenden Daten und danach den kopierten Teil. Du kannst sogar den WaveHeader der alten WAV für die neue WAV nutzen. Du musst ja nur die Größe der WaveDaten (kopierter Teil) anpassen.

    @DTF Wow. 4 zusätzliche Bass-DLLs + eine zusätzliche lame.exe für etwas, was Windows selbst anbietet und kann und von den Bass-DLLs auch nur genutzt wird. ;)
    Mfg -Franky-
    Ich hab versucht, das Projekt aus dem Code Austausch zum Laufen zu bringen ...

    Leider scheitere ich schon beim Versuch denVerweis auf die bass.dll zum Laufen zu bringen.

    Also entweder ist das Dingens nicht geeignet oder ich mache etwas schrecklich falsh.

    LG
    Peter
    Bilder
    • s 2024-08-24 10-00-077.jpg

      155,2 kB, 1.785×792, 220 mal angesehen
    Du musst BassNet runterladen, da drin ist eine bassnet.dll, auf diese musst du verweisen, die bass.dll kopierst du einfach in die Debug/Releaseordner.

    Siehe bei un4seen im Downloadbereich bei "Other APIs" nach Bass.Net, den Download der bass.dll oben(auf der Seite dort) für Windows hast du ja bereits. Diese beiden brauchst du als minimalsetup. Solltestest du auch die BASS-WASAPI brauchen, einfach die dll für windows loaden und auch in debug/releaseordner kopieren, weitere Net-Wrapper Dlls sind nicht nötig. Du kannst also alle AddonDlls nutzen, musst sie nur an die richtige Stelle kopieren.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    Also erst mal vielen Dank für deine Geduld.

    Ich habe jetzt die bassnet.dll geladen und die konnte ich als Verweis hinzufügen.

    Die bass.dll und basswsapi.dll habe ich in die Debug/Release Ordner kopiert.

    Das Projekt lässt sich jetzt starten ... produziert aber leider einen Laufzeitfehler - der mich dann an die Grenzen meiner Fähigkeiten führt ... :(

    Was mache ich falsch?

    LG
    Peter
    Bilder
    • s 2024-08-24 10-42-186.jpg

      92,08 kB, 1.487×803, 216 mal angesehen

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

    @Peter329 FileNotFound ist doch ne klare Aussage.
    Welche DLLs befinden sich neben Deiner Exe im Verzeichnis?
    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!
    Jau ... dass da irgenein File nicht gefunden wird ist mir schon klar. Nur wie heißt der File und wo wird er vermutet?

    Was mir aufgefallen ist: die Anwendung scheitert schon vor dem Load ... der Haltepunkt (s.Anhang) wird NICHT erreicht.

    Und im Debug Ordner sind alle erwähnten .dll Files enthalten (s. Anhang)

    LG
    Peter
    Bilder
    • s 2024-08-24 11-03-472.jpg

      129,22 kB, 1.313×613, 214 mal angesehen
    • s 2024-08-24 11-07-280.jpg

      30,89 kB, 912×197, 23 mal angesehen
    @Peter329 Möglicherweise stimmen die Versionen nicht (x86 / x64).
    Sieh Dir mal con allen DLLs die Versionsnummern und die Beschereibung an.
    Verwende mal den Dependency Walker:
    dependencywalker.com/

    Dir fehlt außerdem noch die BassEnc.dll
    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!

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

    Also ich finde nur eine bassenc_mp3.dll ... und die behebt mein Problem nicht.

    Aber der dependency walker auf die Bass.Net.dll angewandt vermeldet eine Reihe von "file not found messages" ... die Namen scheinen mir aber auf irgendwelche iternen Objecte zu verweisen ... (s. Anhang)

    Die Fehlerliste ist endlos .... da muss irgendetwas Grundlegendes nicht stimmen ...

    LG
    Peter
    Bilder
    • s 2024-08-24 13-49-506.jpg

      150,7 kB, 1.418×742, 195 mal angesehen

    petaod schrieb:

    Wieso lädst du die BASS nicht mit nuget rein?


    Ganz einfach ... weil ich nicht weiß was "nuget" ist und wie man das aufruft.

    Ich habe jetzt die downloads geprüft.

    Es gibt eine Bass.Net.dll im Verzeichnis "core" (die habe ich verwendet) und eine etwas größere Version im Verzeichnis "full".

    Diese größere Version habe ich jetzt verwendet. Damit erhalte ich schon beim Compile eine Fehlermeldung:

    Severity Code Description Project File Line Suppression State
    Warning The primary reference "Bass.Net" could not be resolved because it was built against the ".NETFramework,Version=v4.8" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.7.2". Test Sound

    Ich habe dann versucht das Framework zu erhöhen ... aber die Version v4.8 wird mir nicht angeboten (s. Anhang)

    Also hab ich versucht ein neueres Framework zu laden .... aber das ist gescheitert, weil es schon installiert sei ! (s. Anhang)

    Ich bin am verzweifeln .... bin ich wirklich so dumm?

    LG
    Peter
    Bilder
    • s 2024-08-24 14-53-420.jpg

      54,99 kB, 628×633, 20 mal angesehen
    • s 2024-08-24 14-52-118.jpg

      23,05 kB, 524×465, 21 mal angesehen