Aufnahme Qualität Bass.Net

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Manawyrm.

    Aufnahme Qualität Bass.Net

    Hallo,

    nach langem such habe noch keine Lösung gefunden und hoffe das ich hier Hilfe bekomme.

    ich schreibe derzeit ein Programm das den Sound aufnimmt welcher aus den Boxen kommt auf. Soweit klappt aus alles, auch das umwandeln in MP3 klappt auch.

    Wenn ich die Datei abspiele hört es sich stumpf an, also nicht so klangvoll wie im original aus den Boxen kommt.

    Verwende die Bass.Net Bibliothek und lame zum umwandeln

    Was muss ich einstellen damit ich die Qualität verbessern kann. Die beste Lösung wäre wenn so nen Sound hätte wie von einer CD.


    Hoffe es kennst sich jemand aus und kann mir helfen.
    Hallo Waschbaer_1986,
    das sind exakt die einstellungen für die ich mich letztlich auch entschieden habe.

    VB.NET-Quellcode

    1. l.LAME_Mode = EncoderLAME.LAMEMode.JointStereo
    2. l.LAME_UseVBR = True
    3. l.LAME_VBRQuality = EncoderLAME.LAMEVBRQuality.VBR_Q0


    Ich habe auch alle möglichen varianten durchprobiert.
    Kannst ja mal mit

    VB.NET-Quellcode

    1. l.LAME_UseVBR = False
    2. l.LAME_Bitrate = CInt(EncoderLAME.BITRATE.kbps_320)
    3. l.LAME_Quality = EncoderLAME.LAMEQuality.Q0

    probieren.
    Meine Boxen geben damit allerdings keinen merklichen Qualitätssprung aus.
    Das einzige was sich merklich ändert ist die Dateigröße. :)

    Wenn Du Deine Aufnahme nicht konvertierst, also die erzeugte .wav behälst, dann haste die Qualität die du von der Soundkarte bekommst.
    Aber wer will schon solche rießigen Dateien verwalten. Obwohl, wenn Qualität dein Massstab ist, dann doch.

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

    Es geht auch verlustfrei ohne riesige Wavesound-dateien. Dafür gibt es zahlreiche verlustfreie Formate. Meine beiden absoluten Favoriten sind dabei: FLAC und WavPack. FLAC schafft z.b. je nach Musikstück eine Reduzierung der Dateigröße auf nahezu 30%. Das kann aber sehr stark variieren. Laut Hersteller liegt der Durchschnitt bei 60%. Bei WavPack weiß ich es leider nicht so genau. WavPack hat aber noch einen klaren Vorteil gegenüber FLAC. WavPack ist merklich schneller beim Encodieren, nicht aber bei dem Decodieren.

    Ich bezweifle aber, dass der starke Qualitätsverlust von LAME kommt.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    im Namespace Un4seen.Bass.Misc gibts diverse einstellungen für andere encoder.
    Unter anderem auch FLAC und WavPack.

    Schau dich mal in der Dokumentation um, steht einiges drin.
    Stichwort BaseEncoder Class.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class MyOwnEncoder Inherits BaseEncoder
    2. ' Constructor
    3. Public Sub New(channel As Integer) MyBase.New(channel)
    4. End Sub
    5. Public Overrides Function ToString() As String
    6. Return "My Encoder (BASS_CTYPE_STREAM_MP3)"
    7. End Function
    8. Public Overrides ReadOnly Property DefaultOutputExtension() As String
    9. Get
    10. Return ".mp3"
    11. End Get
    12. End Property
    13. Public Overrides ReadOnly Property EncoderType() As BASSChannelType
    14. Get
    15. Return BASSChannelType.BASS_CTYPE_STREAM_MP3
    16. End Get
    17. End Property
    18. Public Overrides ReadOnly Property SupportsSTDOUT() As Boolean
    19. Get
    20. Return True
    21. End Get
    22. End Property
    23. Public Overrides ReadOnly Property EncoderCommandLine() As String
    24. Get
    25. Return BuildEncoderCommandLine()
    26. End Get
    27. End Property
    28. Public Overrides ReadOnly Property EffectiveBitrate() As Integer
    29. Get
    30. Return My_Bitrate
    31. End Get
    32. End Property
    33. Public Overrides Function Start(proc As ENCODEPROC, user As IntPtr, paused As Boolean) As Boolean
    34. If EncoderHandle <> 0 OrElse (Not (proc Is Nothing) AndAlso Not SupportsSTDOUT) Then
    35. Return False
    36. End If
    37. ' start the encoder
    38. Dim flag As BASSEncode = BASSEncode.BASS_ENCODE_NOHEAD
    39. If Force16Bit Then
    40. flag = flag Or BASSEncode.BASS_ENCODE_FP_16BIT
    41. End If
    42. If paused Then
    43. flag = flag Or BASSEncode.BASS_ENCODE_PAUSE
    44. End If
    45. EncoderHandle = BassEnc.BASS_Encode_Start(ChannelHandle, EncoderCommandLine,
    46. flag, proc, user)
    47. End If
    48. If EncoderHandle = 0 Then
    49. Return False
    50. Else
    51. Return True
    52. End If
    53. End Function
    54. ' local members for setting individual parameters
    55. Public My_Bitrate As Integer = 128
    56. ' just an example here!
    57. Private Function BuildEncoderCommandLine() As String
    58. Dim enCI As New CultureInfo("en-US", False)
    59. Dim sb As New StringBuilder()
    60. ' the file name and path
    61. sb.Append(Path.Combine(EncoderDirectory, "myencoder.exe"))
    62. ' raw input?
    63. If InputFile Is Nothing Then ' STDIN: add the raw pcm header data
    64. sb.Append([String].Format(enCI, " -r -x -s {0:##0.0##} --bitwidth {1}",
    65. ChannelSampleRate / 1000F,(If ChannelBitwidth > 16 Then 16 Else ChannelBitwidth))) 'ToDo: Unsupported feature: conditional (?) operator.
    66. End If ' ...more options here...
    67. sb.Append([String].Format(enCI, " -b {0} -h", My_Bitrate))
    68. ' STDIN or filename
    69. If Not (InputFile Is Nothing) Then
    70. sb.Append((" """ + InputFile + """"))
    71. Else
    72. sb.Append(" -")
    73. End If ' STDOUT or filename
    74. If Not (OutputFile Is Nothing) Then
    75. sb.Append((" """ + OutputFile + """"))
    76. Else
    77. sb.Append(" -")
    78. End If
    79. Return sb.ToString()
    80. End Function
    81. End Class



    Spoiler anzeigen

    Remarks

    This class uses the BASS_CTYPE_STREAM_FLAC encoder type.
    "flac.exe" must be downloaded separately (e.g. from rarewares.org). FLAC also needs the "libmmd.dll", which is also available at rarewares.org.

    Make sure to set the FLAC_xxx flags before retrieving the EncoderCommandLine or calling Start(ENCODEPROC, IntPtr, Boolean).

    This implementation uses the automatic DSP system for encoding. Meaning the sending of sample data to the encoder is done automatically when you play the channel (BASS_ChannelPlay(Int32, Boolean)) or call BASS_ChannelGetData(Int32, IntPtr, Int32) (if it's a decoding channel). So there is no need to call BASS_Encode_Write(Int32, IntPtr, Int32) manually!

    If you simply want to encode a physical file please also take a look to the EncodeFile(String, String, BaseEncoder, BaseEncoder..::..ENCODEFILEPROC, Boolean, Boolean).

    FLAC 'cuesheets' and the 'skip' and 'until' properties are not supported in this implementation by default, but you might add them with the FLAC_CustomOptions parameter.

    Nö DirectX nicht.
    Ab Windows Vista gibts die bis jetzt neueste Technologie für Audio welche WASAPI beinhaltet. Google nach WASAPI Loopback capture.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Waschbaer_1986 schrieb:

    Habs etz mal ausprobiert aber die qualität is nicht wirklich besser geworden.
    Dir reicht also die Qualität von 320bps-MP3 nicht aus.
    Es gibt nur ganz wenige Menschen, die den Unterschied zwischen MP3/320 und WAV hören.
    In Blindvergleichstests gelang dies zielsicher nur Testpersonen mit einem starken Hörfehler.

    Wer z.B. den Frequenzbereich über 8kHz nur noch stark eingeschränkt hört, kann die psychoakustischen Effekte, die MP3 zugrunde liegen, nicht mehr ausnutzen.
    Solltest du zu dieser Gruppe gehören, helfen nur verlustfreie Formate wie WAV oder FLAC.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Wie ich bereits gesagt habe ist aber garantiert nicht MP3 das Problem. Vielmehr wird das Problem sein, dass Bass irgend nen Scheiß verwendet um die Daten aufzunehmen. Erkundige dich mal über google was man mit WASAPI Loopback capture machen kann. Es gibt schon fertige Wrapper und damit haste das recht schnell und verlustfrei.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.