"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Lame_enc.dll für Audio-Konvertierung in C# verwenden

Stahl 28.07.2008 - 16:06 11139 19
Posts

Stahl

Big d00d
Avatar
Registered: Jan 2005
Location: Wien
Posts: 211
Hi Leute!

Ich muss für die FH ein Programm schreiben, dass mit Hilfe der Lame.dll eine Audio-Konvertierung von wave in mp3 und mp3 in wave ermöglicht.

Jetzt such ich schon seit 3 Tagen nach einer Anleitung oder Funktions-Erklärung für die Lame.dll und finde nur fertig ausprogrammierte Sachen, die ich großteils leider nicht verstehe :rolleyes:

Hat wer von euch vll. einen Link zu einer Erklärung wie ich die Lame.dll richtig einbinden und ansprechen kann?

MfG Stahl

3mind

mimimi
Avatar
Registered: Sep 2004
Location: 1030
Posts: 1588
hm, in wie weit sind kenntnisse mit c# / visual studio vorhanden?

die .dll am besten zum restlichen sourcecode packen und dann rechtsclick aufs projekt im VS und "add reference..." - und dann glaub ich browse und halt auswählen.

als nächstes im sourcecode ein using mit entsprechenden namespace hinzufügen.

ab dann stehen dir alle methoden der .dll zur verfügung.

Stahl

Big d00d
Avatar
Registered: Jan 2005
Location: Wien
Posts: 211
Hab zwei Semester C# gelernt bis jetzt. Das soll sowas wie ein Abschlussprojekt für den Bachelor sein. Hab zwar noch 2 Semester bis dahin, nur wird in den 2 Semestern kein Programmieren mehr unterrichtet.

Ich hab jetzt die DLL zum Projekt hinzugefügt. Der Namespace bereitet mit noch Probleme. Wenn ich mit "using lame_enc;" den Namespace hinzu,fügen will schreibt er mir immer das er es nicht erkennt.

Danke für die schnelle Hilfe :)

3mind

mimimi
Avatar
Registered: Sep 2004
Location: 1030
Posts: 1588
gib mal link für die .dll dann versuch ichs gschwind bei mir.

ist die lame_enc.dll überhaupt ein valides .net-assembly ?
Bearbeitet von 3mind am 28.07.2008, 18:05

vanHell

Tauren Marine
Registered: May 2004
Location: Hell
Posts: 1017
lame_enc.dll wird höchst warscheinlich in C geschrieben sein und nicht in C#.

3mind

mimimi
Avatar
Registered: Sep 2004
Location: 1030
Posts: 1588
ja, hab ich mir jetzt mittlerweile auch schon gedacht, deshalb wunderts mich auch etwas wie er es im .net-projekt als reference hinzufügen konnte.

ica

hmm
Avatar
Registered: Jul 2002
Location: Graz
Posts: 9818
das soll ein abschlussprojekt für den bakk sein?

hier ein link. zwar in vb aber das sollte nicht das problem sein.

http://www.vbaccelerator.com/home/v...AME/article.asp

Stahl

Big d00d
Avatar
Registered: Jan 2005
Location: Wien
Posts: 211
Ja, irgendwie solls sowas in der Art sein. Ist unser letztes Programm was wir da schreiben müssen und auch das umfangreichste.

@ 3mind: Sorry, das ich ich erst jetzt wieder meld. Hab dann gestern leider keine Zeit mehr gehabt. Der Link zur DLL ist ...

http://www.free-codecs.com/Lame_Encoder_download.htm

Der nachfolgende Link führt zum Sourcecode. Leider hab ichs noch nicht geschafft den zu öffen.

http://sourceforge.net/project/show...hp?group_id=290


MfG Stahl

3mind

mimimi
Avatar
Registered: Sep 2004
Location: 1030
Posts: 1588
ok. also da die .dll scheinbar nicht als .net assembly vorliegt ist das einbinden via reference nicht so einfach möglich.

es gibt ein projekt das trotzdem in c# mit der .dll arbeiten kann (mittels [DllImport "..."]), das ganze ist jedoch dann nicht mehr so ganz trivial - aber ich denke für einen bachelor-studenten sollte es möglich sein das ganze bald zu verstehen.

link: http://www.codeproject.com/KB/audio...Compressor.aspx

musst dich für den download des project-source lediglich registrieren. ich hab's mir kurz angeschaut, sollte ganz gut als "denkanstoss" passen.

hth

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Zitat von Stahl
Der nachfolgende Link führt zum Sourcecode. Leider hab ichs noch nicht geschafft den zu öffen.

tar xzf lame-3.98b8.tar.gz

Alternativ mit dem GUI-Frontend deiner Wahl (7-Zip kanns glaub ich).

Da ist dann auch gleich der kommentierte Source zur DLL und ein kleines Beispielprogramm in C++ drin.

semteX

begehrt die rostschaufel
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14592
zum thema C dll in .NET: die einser streberlösung wär ein .NET wrapper, ansonsten sollt DLLImport den job aber auch erledigen (wieso auch ned)

Stahl

Big d00d
Avatar
Registered: Jan 2005
Location: Wien
Posts: 211
Danke für die Hilfe Leute :)

Ja auf diese Sache mit dem DllImport bin ich auch schon gekommen. Hierbei ist nur das Problem, dass man die Funktionen die man aus der DLL verwenden möchte kennen muss, was bei mir nicht der Fall ist. Mir fehlt einfach irgendwie eine anständige Dokumentation zu dem angeblich sehr genialen Ding :)

Die tar.gz hab ich schon mal it Winrar öffnen und entpacken können. Anschließend wollt ich das Projekt mit Visual C# öffnen und da hat er mir dann nur gesagt das ers nicht aufmachen kann und es war nur das Grundgerüst des Projektes zu erkennen, jedoch kein Code.

Werd mir mal 7-zip holen und es damit versuchen.

Nochmals Danke!

3mind

mimimi
Avatar
Registered: Sep 2004
Location: 1030
Posts: 1588
am zip liegts nicht. du brauchst vermutlich visual c++ 6.0 oder ähnliches um das projekt richtig öffnen zu können. ich glaub mich auch zu erinnern dass eine solution für 7.1 inkludiert ist, oder?
das müsste dann visual studio 2003 sein oder so.

3mind

mimimi
Avatar
Registered: Sep 2004
Location: 1030
Posts: 1588
nachtrag: hier ein auszug über methoden der lame_enc und wie diese mittels dllimport eingebunden werden können:

source hab ich eh schon weiter oben verlinkt.

Code:
/// <summary>
    /// This function should be called after encoding the last chunk in order to flush 
    /// the encoder. It writes any encoded data that still might be left inside the 
    /// encoder to the output buffer. This function should NOT be called unless 
    /// you have encoded all of the chunks in your stream.
    /// </summary>
    /// <param name="hbeStream">Handle of the stream.</param>
    /// <param name="pOutput">Where to write the encoded data. This buffer should be 
    /// at least of the minimum size returned by beInitStream().</param>
    /// <param name="pdwOutput">Returns number of bytes of encoded data written.</param>
    /// <returns>On success: BE_ERR_SUCCESSFUL</returns>
    [DllImport("Lame_enc.dll")]
    public static extern uint beDeinitStream(uint hbeStream, [In, Out] byte[] pOutput, ref uint pdwOutput);
    /// <summary>
    /// Last function to be called when finished encoding a stream. 
    /// Should unlike beDeinitStream() also be called if the encoding is canceled.
    /// </summary>
    /// <param name="hbeStream">Handle of the stream.</param>
    /// <returns>On success: BE_ERR_SUCCESSFUL</returns>
    [DllImport("Lame_enc.dll")]
    public static extern uint beCloseStream(uint hbeStream);
    /// <summary>
    /// Returns information like version numbers (both of the DLL and encoding engine), 
    /// release date and URL for lame_enc's homepage. 
    /// All this information should be made available to the user of your product 
    /// through a dialog box or something similar.
    /// </summary>
    /// <param name="pbeVersion"Where version number, release date and URL for homepage 
    /// is returned.</param>
    [DllImport("Lame_enc.dll")]
    public static extern void beVersion([Out] BE_VERSION pbeVersion);
    [DllImport("Lame_enc.dll", CharSet=CharSet.Ansi)]
    public static extern void beWriteVBRHeader(string pszMP3FileName);
    [DllImport("Lame_enc.dll")]
    public static extern uint	beEncodeChunkFloatS16NI(uint hbeStream, uint nSamples, [In]float[] buffer_l, [In]float[] buffer_r, [In, Out]byte[] pOutput, ref uint pdwOutput);
    [DllImport("Lame_enc.dll")]
    public static extern uint	beFlushNoGap(uint hbeStream, [In, Out]byte[] pOutput, ref uint pdwOutput);
    [DllImport("Lame_enc.dll", CharSet=CharSet.Ansi)]
    public static extern uint	beWriteInfoTag(uint hbeStream, string lpszFileName);

Stahl

Big d00d
Avatar
Registered: Jan 2005
Location: Wien
Posts: 211
Ich glaub ich weis jetzt in welcher Sprache die dll geschrieben wurde. Ist es möglich, dass sie in Visual Basic geschrieben wurde? Wenn man nach .vcproj googelt findet man u.a. folgenden Eintrag

http://filext.com/file-extension/VCPROJ

Dort führt einen ein Link weiter auf die MS-Homepage in den Visual Basic Bereich. Werd mal versuchen mir das VS C 2008 von der Microsoft Homepage zu downloaden.

MfG

Edit: Hab mich bei Codeproject angemeldet und das Projekt gedownloadet. Werds mir vermutlich heute in der Nacht noch anschauen.
Bearbeitet von Stahl am 29.07.2008, 19:51
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz