BR5 Dateien in MP3

  • VB.NET

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

    BR5 Dateien in MP3

    Hey BR5 sind Musikdateien eines BMW Navis.

    Wenn man diese wieder zurückwandeln möchte in MP3 geht das mit folgendem Excel Makro

    VB.NET-Quellcode

    1. Option Explicit
    2. Sub sBMW()
    3. Dim strQuellPath As String
    4. Dim files() As String
    5. Dim i As Long
    6. Dim lngMax As Long
    7. ReDim files(0)
    8. strQuellPath = Cells(1, 1)
    9. If strQuellPath = "" Then
    10. MsgBox "Bitte Stammverzeichnis, z.B. D:\BMW in A1 eintragen!"
    11. Exit Sub
    12. End If
    13. lngMax = Cells(Rows.Count, 1).End(xlUp).Row
    14. If lngMax > 1 Then
    15. Range(Cells(2, 1), Cells(lngMax, 2)).ClearContents
    16. Range(Cells(2, 1), Cells(lngMax, 2)).ClearFormats
    17. End If
    18. Call sGetFiles(strQuellPath, files())
    19. For i = 1 To UBound(files)
    20. Cells(i + 1, 1) = files(i)
    21. Next i
    22. ActiveSheet.Columns(1).AutoFit
    23. For i = 1 To UBound(files)
    24. Cells(i + 1, 1).Interior.Color = vbYellow
    25. Call sBMW2MP3(files(i))
    26. DoEvents
    27. Next i
    28. End Sub
    29. Sub sGetFiles(ByVal strPath As String, files() As String)
    30. Dim i As Long
    31. Dim strFileName As String
    32. Dim Directories() As String
    33. ReDim Directories(0)
    34. If Left(strPath, 1) <> "\" Then strPath = strPath & "\"
    35. strFileName = Dir(strPath, vbDirectory)
    36. Do While strFileName <> ""
    37. If GetAttr(strPath & strFileName) And vbDirectory Then
    38. If strFileName <> "." And strFileName <> ".." Then
    39. ReDim Preserve Directories(UBound(Directories) + 1)
    40. Directories(UBound(Directories)) = strPath & strFileName
    41. End If
    42. ElseIf InStr(UCase(strFileName), ".BR") > 0 Then
    43. ReDim Preserve files(UBound(files) + 1)
    44. files(UBound(files)) = strPath & strFileName
    45. End If
    46. strFileName = Dir
    47. Loop
    48. For i = 1 To UBound(Directories)
    49. Call sGetFiles(Directories(i), files())
    50. Next i
    51. End Sub
    52. Sub sBMW2MP3(strQ)
    53. Dim b As Byte
    54. Dim strZ As String
    55. Dim qKanal As Byte
    56. Dim zKanal As Byte
    57. qKanal = FreeFile()
    58. zKanal = FreeFile() + 1
    59. strZ = Mid(strQ, 1, Len(strQ) - 3)
    60. Select Case UCase(Right(strQ, 3))
    61. Case "BR3"
    62. strZ = strZ & "MP4"
    63. Case "BR4"
    64. strZ = strZ & "MP3"
    65. Case "BR5"
    66. strZ = strZ & "MP3"
    67. End Select
    68. If Dir(strZ) = "" Then
    69. Open strQ For Binary Lock Read As #qKanal Len = 32767
    70. Open strZ For Binary Lock Write As #zKanal Len = 32767
    71. Do
    72. Get #qKanal, , b
    73. b = 255 - b
    74. If EOF(qKanal) Then Exit Do
    75. Put #zKanal, , b
    76. Loop
    77. Close (qKanal)
    78. Close (zKanal)
    79. End If
    80. End Sub


    lässt sich das ganze auch in vb.net realisieren?
    Du meinst VBA, nicht Excel.

    Kaze91 schrieb:

    in vb.net realisieren?
    Warum nicht. Hast Du mal eine BR5-Datei bei der Hand?
    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!
    Die Dateien werden ja lediglich byteweise invertiert, das müsste es sein:
    Konverter

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. Me.TextBox1.Text = "C:\Temp\sonst\xxx"
    4. End Sub
    5. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    6. sBMW()
    7. End Sub
    8. Sub sBMW()
    9. Dim strQuellPath As String
    10. Dim files As New List(Of IO.FileInfo)
    11. strQuellPath = TextBox1.Text ' Cells(1, 1)
    12. If strQuellPath = "" Then
    13. MsgBox("Bitte Stammverzeichnis, z.B. D:\BMW in A1 eintragen!")
    14. Exit Sub
    15. End If
    16. files = sGetFiles(strQuellPath)
    17. ListBox1.Items.Clear()
    18. ListBox1.Items.AddRange(files.ToArray)
    19. For i = 0 To files.Count - 1
    20. If files(i).Exists Then
    21. sBMW2MP3(files(i))
    22. End If
    23. Next i
    24. End Sub
    25. Private Function sGetFiles(path As String) As List(Of IO.FileInfo)
    26. Dim lfi As New List(Of IO.FileInfo)
    27. lfi.AddRange(New IO.DirectoryInfo(path).GetFiles("*.br?"))
    28. Return lfi
    29. End Function
    30. Sub sBMW2MP3(strQ As IO.FileInfo)
    31. Dim b As Byte
    32. Dim strZ As String
    33. Select Case strQ.Extension.ToUpper 'UCase(Right(strQ, 3))
    34. Case ".BR3"
    35. strZ = ".MP4"
    36. Case ".BR4"
    37. strZ = ".MP3"
    38. Case ".BR5"
    39. strZ = ".MP3"
    40. Case Else
    41. Return
    42. End Select
    43. Using fsR As New IO.FileStream(strQ.FullName, IO.FileMode.Open)
    44. Using br As New IO.BinaryReader(fsR)
    45. Using fsW As New IO.FileStream(strQ.FullName & strZ, IO.FileMode.OpenOrCreate)
    46. Using bw As New IO.BinaryWriter(fsW)
    47. For i As Long = 0 To fsR.Length - 1
    48. b = br.ReadByte
    49. b = Not b
    50. bw.Write(b)
    51. Next
    52. End Using
    53. End Using
    54. End Using
    55. End Using
    56. End Sub
    57. End Class
    isses aber wohl nicht:
    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!

    Kaze91 schrieb:

    WAV
    Nein.
    Ieine Header-Info stimmt wohl nicht:
    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!

    Kaze91 schrieb:

    hast du noch eine idee zum fixxen?
    Mach mal einen Binär-Vergleich je derselben Output-Datei.
    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!
    Also ich habs mal als WMA gespeichert , weil das eigentliche vba makro macht das auch, vlc spielt die datei auch ab ohne zu mekkern, anderen mediaplayer habe ich hier auf der arbeit leider nicht.

    hab die Dateien dann mal im hex verglichen und sie sind gleich.


    VG
    Als WMA läuft es sofort. :D
    -----

    Kaze91 schrieb:

    Also ich habs mal als WMA gespeichert , weil das eigentliche vba makro macht das auch
    Woran Du siehst und was sich immer wieder bestätigt:
    Die meisten Fehler werden bei der Spezifikation gemacht.
    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!