DirectSound-Effekte auf mp3s
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
array
band
base
buffer
byte
datei
datum
effekt
http
kleinen dateien
knacken
modul
sache
schlagen
sekunde
teil
umbau
url
vorgehen
wiedergabe
-
Moin.
Bisher hab ich es nur geschafft, per DirectSound-Effekte (Chrous, Flanger, Gargle usw.) auf wav-Dateien anzuwenden, da sich darüber anscheinend auch nur Wave-Dateien wiedergeben lassen. Allerdings nutzt man heute ja fast nur noch mp3s für die Wiedergabe. Ich könnte jetzt ja auf die schnelle durch z.B. ffmpeg.exe eine schnelle Umwandlung durchführen, und diese dann wiedergeben. Bei kleinen Dateien ists kein Problem. Doch angenommen man hat eine Aufzeichnung, die 2 Stunden geht... als Wave-Datei sinds dann mal eben locker an die 1,5GB. Das Umzuwandeln kostet demnach auch seine Zeit. Ich habs dann per SoundBuffer-Capturing versucht, aber die Effekte schlagen dann auf alles an, was rausgeht, und selbst wenns nur so nen blöder Ton ist wie "Sie haben Post".
Weiß jemand von euch, wie man eventuell so etwas hinbekommen kann, oder wo es vernünftige Guides gibt? In C# find ich da aufjedenfall nichts geeignetes. C++ außerhalb des .net-Bereichs ist für mich eher nen Fremdgebiet und das was ich dazu nur finde, ist eben in dem Verfahren geschrieben (und mir nicht so verständlich).
Weiterhin wäre es praktisch, auch dies auf andere Formate (möglichst viele wie auch u.a. wmv oder ogg) anzuwenden. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo riku79,
was Du benötigst ist ein Dekoder. Das heist ein Modul, dass Dir eine mp3, ogg, ... Datei in wav/pcm Daten dekodiert.
Leider kenne ich für .Net keine und habe auf die schnelle auch nichts brauchbares gefunden. Aber wenn Du einen hast, dann wäre das vorgehen folgendes:
1. Lege zwei Byte-Arrays an. (z.B. 1kB pro Array)
2. Dekodiere einen Teil der mp3 in Byte-Array 1 (bis es voll ist)
3. Übergebe Byte-Array 1 zur Wiedergabe an DirectSound
3. Dekodiere den nächsten Teil in Byte-Array 2
4. Übergebe Byte-Array 2 zur Wiedergabe an DirectSound
5. Weiter bei 2 bis die Datei vollständig abgespielt ist.
Ich hoffe es hilft Dir ein wenig weiter.
-
Nachdem mein PC leider nach 6 Jahren WinXP (wow) ohne ReInstall jetzt endgültig neu installiert werden musste, hat sich leider meine Antwort verzögert....
Du hast mich aufjedenfall mit den Arrays auf ne Idee gebracht. Nach einiger herumsucherei im Web bin ich dann auf 2 Sachen gekommen: NAudio und Mp3Sharp. Ich hab beides inkl. Source-Code und .dll bekommen. Letztendlich habe ich mich für Mp3Sharp entschieden da es im Gegenteil zu NAudio mehr mp3's abspielt (allerdings diese manchen oft leider mit der falschen Samplerate).
Nach etwas Umbau am Sourcecode (um auch den SecondaryBuffer zu kommen und Effekte drauf anzuwenden) läufts bis jetzt super.
Beim Übergeben der Effekte entsteht kein Knacken oder sonstwas und es läuft sehr CPU-sparsam. Selbst wenn ich (Extremtest) ihm 40 Veränderungen (25ms) von 32 Effekten (getestet als 31 Band EQ + 1 Flanger) zusende, wird der CPU gerade um max. 8% (bei nem AMD64 3GHz) ausgelastet.
Was die Sache mit dem 1024 Byte-Array angeht... viel zu klein, kann aber auch von dir eher ironisch/nur beispielhaft gemeint sein. Wenn ich mich recht erinnere, nutzen manche Soundkarten so um die 50ms Buffer. Im Waveformat wäre das aufjedenfall einiges mehr, aber egal.
Mp3Sharp arbeitet mit Stream-Technik (base System.IO.Stream / MemoryStream / BufferStream (habs noch nicht so weit durchgeschaut)). Durch NotifyEvents werden dann immer rechtzeitig die Streams wie Buffer gefüllt und die Effekte sogar dadrin bearbeitet. Der Buffer ist 1 Sekunde lang, jedoch frag ich mich, wie er in den bereits aktiven Buffer die veränderung auswirken lässt. Es ist aber egal, solangs klappt.
ich hab zwar ogg usw. noch nicht so ganz rausbekommen, aber das wichtigste ist schonmal mp3.
Für die, welche sich auch für sowas interessieren:
http://robburke.net/mle/mp3sharp/ (Mp3Sharp)
http://naudio.codeplex.com/ (NAudio)
Danke dir aufjedenfall vielmals. Der Tip hat mir sehr weitergeholfen.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage