I want to share this Generic Class I've did to convert some files in my PC using CoreConverter executable.

I preffer to use the executable instead dmcScriptingLib because @Spoon saids me that the dll has no way to check for a conversion progress, but in a GUI application this is very important to manage.

My class has two basic events, one for capture the percent done and the other to return error/standard messages.

Also I've added support to use some DSP Effects (they are DSP Effects which do not need to parse special parametters to it, I can't manage for example the "move file" plugin because needs to input a location, but if you want predefine the location then you can manage it)

By the moment I've only integrated the necessary parametters to convert files using mP3 (Lame) (cbr/abr but not vbr), Wav uncompressed, and WindowsMediaAudio 9.2, you can easy extend/improve this Class by adding more specific codec parametters.

This Class is Free to use, free to share.

Sure this could help much .NET developer people,
and maybe authors or moderators would add this sample to the developer help section.

Thanks for read!

Code:
    *Region " CoreConverter Helper "
     
     
     
    ' [ CoreConverter Helper ]
    '
    ' // By Elektro H@cker
    '
    '
    ' Instructions:
    '
    ' 1. Add the "CoreConverter.exe" into the project,
    '    together with the dbPoweramp Effects and Codec folders.
    '
    ' Examples :
    '
    ' -------------------
    ' CONVERT FILE TO MP3
    ' -------------------
    ' CoreConverter.Convert_To_MP3("C:\Input.wav", "C:\Output.mp3", _
    '                              CoreConverter.Lame_Bitrate.kbps_320, _
    '                              CoreConverter.Lame_Bitrate_Mode.cbr, _
    '                              CoreConverter.Lame_Profile.SLOW, _
    '                              CoreConverter.Lame_Quality.Q0_Maximum, _
    '                              CoreConverter.Lame_Khz.Same_As_Source, _
    '                              CoreConverter.Lame_Channels.auto, _
    '                              { _
    '                                CoreConverter.DSP_Effects.Delete_Output_File_on_Error, _
    '                                CoreConverter.DSP_Effects.Recycle_Source_File_After_Conversion _
    '                              }, _
    '                              False, _
    '                              CoreConverter.Priority.normal)
    '
    ' -------------------
    ' CONVERT FILE TO WAV
    ' -------------------
    ' CoreConverter.Convert_To_WAV_Uncompressed("C:\Input.mp3", "C:\Output.wav", _
    '                                           CoreConverter.WAV_Uncompressed_Bitrate.Same_As_Source, _
    '                                           CoreConverter.WAV_Uncompressed_Khz.Same_As_Source, _
    '                                           CoreConverter.WAV_Uncompressed_Channels.Same_As_Source, , False)
    '
    ' -------------------
    ' CONVERT FILE TO WMA
    ' -------------------
    ' CoreConverter.Convert_To_WMA("C:\Input.mp3", "C:\Output.wma", _
    '                              CoreConverter.WMA_9_2_BitRates.Kbps_128, _
    '                              CoreConverter.WMA_9_2_Khz.Khz_44100, _
    '                              CoreConverter.WMA_9_2_Channels.stereo, , False)
    '
    ' ------
    ' EVENTS
    ' ------
    ' Public WithEvents Converter As New CoreConverter()
    '
    ' Sub Converter_Progress(Progress As Integer, e As EventArgs) Handles Converter.PercentDone
    '     ProgressBar1.Maximum = 59
    '     ProgressBar1.Step = 1
    '     ProgressBar1.PerformStep()
    ' End Sub
    '
    ' Sub Converter_Message(Message As String, e As EventArgs) Handles Converter.Exited
    '     ProgressBar1.Value = 0
    '     MessageBox.Show(Message)
    ' End Sub
     
     
     
    Public Class CoreConverter : Implements IDisposable
     
    *Region " Variables "
     
       ' <summary>
       ' Gets or sets CoreConverter.exe executable path.
       ' </summary>
       Public Shared CoreConverter_Location As String = ".\CoreConverter.exe"
     
       ' Stores the CoreConverter process progress
       Private Shared CurrentProgress As Integer = 0
     
       ' Stores the CoreConverter process StandarOutput
       Private Shared StandardOutput As String = String.Empty
     
       ' Stores the CoreConverter process ErrorOutput
       Private Shared ErrorOutput As String = String.Empty
     
       ' Stores the next output character
       Private Shared OutputCharacter As Char = Nothing
     
       ' Stores the DSP Effects formatted string
       Private Shared Effects As String = String.Empty
     
    *End Region
     
    *Region " Events "
     
       ' <summary>
       ' Event raised when conversion progress changes.
       ' </summary>
       Public Shared Event PercentDone As EventHandler(Of PercentDoneEventArgs)
       Public Class PercentDoneEventArgs : Inherits EventArgs
           Public Property Progress As Integer
       End Class
     
       ' <summary>
       ' Event raised when CoreConverter process has exited.
       ' </summary>
       Public Shared Event Exited As EventHandler(Of ExitedEventArgs)
       Public Class ExitedEventArgs : Inherits EventArgs
           Public Property Message As String
       End Class
     
    *End Region
     
    *Region " Process Info "
     
       ' CoreConverter Process Information.
       Private Shared CoreConverter As New Process() With { _
           .StartInfo = New ProcessStartInfo With { _
           .CreateNoWindow = True, _
           .UseShellExecute = False, _
           .RedirectStandardError = True, _
           .RedirectStandardOutput = True, _
           .StandardErrorEncoding = System.Text.Encoding.Unicode, _
           .StandardOutputEncoding = System.Text.Encoding.Unicode}}
     
    *End Region
     
    *Region " CoreConverter Enumerations "
     
       ' Priority level of CoreConverter.exe
       Enum Priority
           idle
           low
           normal
           high
       End Enum
     
       ' DSP Effects
       Public Enum DSP_Effects
           Delete_Output_File_on_Error ' Delete failed conversion (not deletes source file).
           Delete_Source_File_After_Conversion ' Delete source file after conversion.
           Recycle_Source_File_After_Conversion ' Send source file to recycle bin after conversion.
           Karaoke_Remove_Voice ' Remove voice from file.
           Karaoke_Remove_Instrument ' Remove instruments from file.
           Reverse ' Reverse complete audio file.
           Write_Silence ' Write silence at start of file.
       End Enum
     
    *End Region
     
    *Region " Codec Enumerations "
     
    *Region " MP3 Lame "
     
       Enum Lame_Bitrate
           kbps_8 = 8
           kbps_16 = 16
           kbps_24 = 24
           kbps_32 = 32
           kbps_40 = 40
           kbps_48 = 48
           kbps_56 = 56
           kbps_64 = 64
           kbps_80 = 80
           kbps_96 = 96
           kbps_112 = 112
           kbps_128 = 128
           kbps_144 = 144
           kbps_160 = 160
           kbps_192 = 192
           kbps_224 = 224
           kbps_256 = 256
           kbps_320 = 320
       End Enum
     
       Enum Lame_Bitrate_Mode
           cbr
           abr
       End Enum
     
       Enum Lame_Profile
           NORMAL
           FAST
           SLOW
       End Enum
     
       Enum Lame_Quality
           Q0_Maximum = 0
           Q1 = 1
           Q2 = 2
           Q3 = 3
           Q4 = 4
           Q5 = 5
           Q6 = 6
           Q7 = 7
           Q8 = 8
           Q9_Minimum = 9
       End Enum
     
       Enum Lame_Khz
           Same_As_Source
           khz_8000 = 8000
           khz_11025 = 11025
           khz_12000 = 12000
           khz_16000 = 16000
           khz_22050 = 22050
           khz_24000 = 24000
           khz_32000 = 32000
           khz_44100 = 44100
           khz_48000 = 48000
       End Enum
     
       Enum Lame_Channels
           auto
           mono
           stereo
           joint_stereo
           forced_joint_stereo
           forced_stereo
           dual_channels
       End Enum
     
     
    *End Region
     
    *Region " WAV Uncompressed "
     
       Enum WAV_Uncompressed_Bitrate
           Same_As_Source
           bits_8 = 8
           bits_16 = 16
           bits_24 = 24
           bits_32 = 32
       End Enum
     
       Enum WAV_Uncompressed_Khz
           Same_As_Source
           khz_8000 = 8000
           khz_11025 = 11025
           khz_12000 = 12000
           khz_16000 = 16000
           khz_22050 = 22050
           khz_24000 = 24000
           khz_32000 = 32000
           khz_44100 = 44100
           khz_48000 = 48000
           khz_96000 = 96000
           khz_192000 = 192000
       End Enum
     
       Enum WAV_Uncompressed_Channels
           Same_As_Source
           Channels_1_Mono = 1
           Channels_2_Stereo = 2
           Channels_3 = 3
           Channels_4_Quadraphonic = 4
           Channels_5_Surround = 5
           Channels_6_Surround_DVD = 6
           Channels_7 = 7
           Channels_8_Theater = 8
       End Enum
     
    *End Region
     
    *Region " WMA 9.2 "
     
       Enum WMA_9_2_BitRates
           Kbps_12 = 12
           Kbps_16 = 16
           Kbps_20 = 20
           Kbps_22 = 22
           Kbps_24 = 24
           Kbps_32 = 32
           Kbps_40 = 40
           Kbps_48 = 48
           Kbps_64 = 64
           Kbps_80 = 80
           Kbps_96 = 96
           Kbps_128 = 128
           Kbps_160 = 160
           Kbps_192 = 192
           Kbps_256 = 256
           Kbps_320 = 320
       End Enum
     
       Enum WMA_9_2_Khz
           Khz_8000 = 8
           Khz_16000 = 16
           Khz_22050 = 22
           Khz_32000 = 32
           Khz_44100 = 44
           Khz_48000 = 48
       End Enum
     
       Enum WMA_9_2_Channels
           mono
           stereo
       End Enum
     
    *End Region
     
    *End Region
     
    *Region " Codec Procedures "
     
    *Region " MP3 Lame "
     
       ' <summary>
       ' Converts a file to MP3 using Lame codec.
       ' </summary>
       Public Shared Sub Convert_To_MP3(ByVal In_File As String, _
                                ByVal Out_File As String, _
                                ByVal Bitrate As Lame_Bitrate, _
                                ByVal Bitrate_Mode As Lame_Bitrate_Mode, _
                                ByVal Encoding_Profile As Lame_Profile, _
                                ByVal Quality As Lame_Quality, _
                                ByVal Khz As Lame_Khz, _
                                ByVal Channels As Lame_Channels, _
                                Optional ByVal DSP_Effects() As DSP_Effects = Nothing, _
                                Optional ByVal Update_Tag As Boolean = True, _
                                Optional ByVal Priority As Priority = Priority.normal, _
                                Optional ByVal Processor As Short = 1)
     
           Get_Effects(DSP_Effects)
     
           Set_Main_Parametters("mp3 (Lame)", In_File, Out_File, If(Not Update_Tag, "-noidtag", ""), Effects, Priority.ToString, Processor.ToString)
     
           CoreConverter.StartInfo.Arguments &= _
           String.Format("-b {0} --{1} -encoding=""{2}"" -freq=""{3}"" -channels=""{4}"" --noreplaygain --extracli=""-q {5}""", _
                         CInt(Bitrate), _
                         Bitrate_Mode.ToString, _
                         Encoding_Profile.ToString, _
                         If(Khz = Lame_Khz.Same_As_Source, "", CInt(Khz)), _
                         If(Channels = Lame_Channels.auto, "", Channels), _
                         CInt(Quality))
     
           Run_CoreConverter()
     
       End Sub
     
    *End Region
     
    *Region " WAV Uncompressed "
     
       ' <summary>
       ' Converts a file to WAV
       ' </summary>
       Public Shared Sub Convert_To_WAV_Uncompressed(ByVal In_File As String, _
                                    ByVal Out_File As String, _
                                    ByVal Bitrate As WAV_Uncompressed_Bitrate, _
                                    ByVal Khz As WAV_Uncompressed_Khz, _
                                    ByVal Channels As WAV_Uncompressed_Channels, _
                                    Optional ByVal DSP_Effects() As DSP_Effects = Nothing, _
                                    Optional ByVal Update_Tag As Boolean = True, _
                                    Optional ByVal Priority As Priority = Priority.normal, _
                                    Optional ByVal Processor As Short = 1)
     
           Get_Effects(DSP_Effects)
     
           Set_Main_Parametters("Wave", In_File, Out_File, If(Not Update_Tag, "-noidtag", ""), Effects, Priority.ToString, Processor.ToString)
     
           CoreConverter.StartInfo.Arguments &= _
           String.Format("-compression=""PCM"" -bits=""{0}"" -freq=""{1}"" -channels=""{2}""", _
                         If(Bitrate = WAV_Uncompressed_Bitrate.Same_As_Source, "", CInt(Bitrate)), _
                         If(Khz = WAV_Uncompressed_Khz.Same_As_Source, "", CInt(Khz)), _
                         If(Channels = WAV_Uncompressed_Channels.Same_As_Source, "", CInt(Channels)))
     
           Run_CoreConverter()
     
       End Sub
     
    *End Region
     
    *Region " WMA 9.2 "
     
       ' <summary>
       ' Converts a file to WMA 9.2
       ' </summary>
       Public Shared Sub Convert_To_WMA(ByVal In_File As String, _
                                    ByVal Out_File As String, _
                                    ByVal Bitrate As WMA_9_2_BitRates, _
                                    ByVal Khz As WMA_9_2_Khz, _
                                    ByVal Channels As WMA_9_2_Channels, _
                                    Optional ByVal DSP_Effects() As DSP_Effects = Nothing, _
                                    Optional ByVal Update_Tag As Boolean = True, _
                                    Optional ByVal Priority As Priority = Priority.normal, _
                                    Optional ByVal Processor As Short = 1)
     
           Get_Effects(DSP_Effects)
     
           Set_Main_Parametters("Windows Media Audio 10", In_File, Out_File, If(Not Update_Tag, "-noidtag", ""), Effects, Priority.ToString, Processor.ToString)
     
           CoreConverter.StartInfo.Arguments &= _
           String.Format("-codec=""Windows Media Audio 9.2"" -settings=""{0} kbps, {1} kHz, {2} CBR""",
                         CInt(Bitrate), _
                         CInt(Khz), _
                         Channels.ToString)
     
           Run_CoreConverter()
     
       End Sub
     
    *End Region
     
    *End Region
     
    *Region " Run Converter Procedure "
     
       Private Shared Sub Run_CoreConverter()
     
           CoreConverter.StartInfo.FileName = CoreConverter_Location
           CoreConverter.Start()
     
           While Not CoreConverter.HasExited
     
               OutputCharacter = ChrW(CoreConverter.StandardOutput.Read)
     
               If OutputCharacter = "*" Then
                   CurrentProgress += 1 ' Maximum value is 59, so a ProgressBar Maximum property value would be 59.
                   RaiseEvent PercentDone(CurrentProgress, Nothing)
               End If
     
               If CurrentProgress = 59 Then
                   ' I store the last line(s) 'cause it has interesting information:
                   ' Example message: Conversion completed in 30 seconds x44 realtime encoding
                   StandardOutput = CoreConverter.StandardOutput.ReadToEnd.Trim
               End If
     
           End While
     
           ' Stores the Error Message (If any)
           ErrorOutput = CoreConverter.StandardError.ReadToEnd
     
           Select Case CoreConverter.ExitCode
     
               Case 0 : RaiseEvent Exited(StandardOutput, Nothing) ' Return StandardOutput
               Case Else : RaiseEvent Exited(ErrorOutput, Nothing) ' Return ErrordOutput
     
           End Select
     
           CurrentProgress = Nothing
           OutputCharacter = Nothing
           StandardOutput = Nothing
           ErrorOutput = Nothing
           Effects = Nothing
           CoreConverter.Close()
     
       End Sub
     
    *End Region
     
    *Region " Miscellaneous functions "
     
       ' <summary>
       ' Checks if CoreConverter process is avaliable.
       ' </summary>
       Public Shared Function Is_Avaliable() As Boolean
           Return IO.File.Exists(CoreConverter_Location)
       End Function
     
       ' Set the constant parametters of CoreConverter process
       Private Shared Sub Set_Main_Parametters(ByVal Codec_Name As String, _
                                               ByVal In_File As String, _
                                               ByVal Out_File As String, _
                                               ByVal Update_Tag As String, _
                                               ByVal Effects As String, _
                                               ByVal Priority As String, _
                                               ByVal Processor As String)
     
           CoreConverter.StartInfo.Arguments = _
           String.Format("-infile=""{0}"" -outfile=""{1}"" -convert_to=""{2}"" {3} {4} -priority=""{5}"" -processor=""{6}"" ", _
                         In_File, Out_File, Codec_Name, Update_Tag, Effects, Priority, Processor)
     
       End Sub
     
       ' Returns all joined DSP Effects formatted string
       Private Shared Function Get_Effects(ByVal DSP_Effects() As DSP_Effects) As String
     
           If DSP_Effects Is Nothing Then Return Nothing
     
           For Effect As Integer = 0 To DSP_Effects.Length - 1
               Effects &= String.Format(" -dspeffect{0}={1}", _
                                        Effect + 1, _
                                        Format_DSP_Effect(DSP_Effects(Effect).ToString))
           Next Effect
     
           Return Effects
     
       End Function
     
       ' Returns a DSP Effect formatted string
       Private Shared Function Format_DSP_Effect(ByVal Effect As String)
     
           Select Case Effect
               Case "Reverse" : Return """Reverse"""
               Case "Delete_Output_File_on_Error" : Return """Delete Destination File on Error="""
               Case "Recycle_Source_File_After_Conversion" : Return """Delete Source File=-recycle"""
               Case "Delete_Source_File_After_Conversion" : Return """Delete Source File="""
               Case "Karaoke_Remove_Voice" : Return """Karaoke (Voice_ Instrument Removal)="""
               Case "Karaoke_Remove_Instrument" : Return """Karaoke (Voice_ Instrument Removal)=-i"""
               Case "Write_Silence" : Return """Write Silence=-lengthms={qt}2000{qt}""" ' 2 seconds
               Case Else : Return String.Empty
           End Select
     
       End Function
     
    *End Region
     
    *Region " Dispose Objects "
     
       Public Sub Dispose() Implements IDisposable.Dispose
           ' CoreConverter_Location = Nothing ' Do not change if want to preserve a custom location.
           OutputCharacter = Nothing
           StandardOutput = Nothing
           ErrorOutput = Nothing
           CurrentProgress = Nothing
           Effects = Nothing
           CoreConverter.Close()
           GC.SuppressFinalize(Me)
       End Sub
     
    *End Region
     
    End Class
     
    *End Region