Μετάβαση στο κύριο περιεχόμενο
Υποστήριξη
Είσοδος με Microsoft
Είσοδος ή δημιουργία λογαριασμού.
Γεια σας,
Επιλέξτε διαφορετικό λογαριασμό.
Έχετε πολλούς λογαριασμούς
Επιλέξτε τον λογαριασμό με τον οποίο θέλετε να εισέλθετε.

Σύνοψη

Αυτή η ενημέρωση αντιμετωπίζει ένα πρόβλημα κωδικοποίησης μετα-δεδομένων που έχει ως αποτέλεσμα τα αρχεία μουσικής Free Lossless Audio Codec (FLAC) να μην μπορούν να αναπαρατρατούν εάν αλλάξει ο τίτλος, ο καλλιτέχνης ή άλλα μετα-δεδομένα τους. 

Αιτία

Αυτό το πρόβλημα μπορεί να προκύψει όταν τα αρχεία FLAC περιέχουν ένα πλαίσιο ID3 πριν από την κεφαλίδα FLAC. Το πλαίσιο ID3 περιέχει μετα-δεδομένα, όπως ο τίτλος και ο καλλιτέχνης. Ο δείκτης χειρισμού ιδιοτήτων FLAC υπέθεσε ότι όλα τα αρχεία FLAC ξεκίνησαν με τον κωδικό έναρξης των 4 byte fLaC και δεν λαμβάνουν υπόψη το πλαίσιο ID3 στην αρχή του αρχείου. Επομένως, το πλαίσιο ID3 θα αντικατασταθεί χωρίς να είναι δυνατή η αναπαραγωγή του αρχείου από τον κωδικό έναρξης fLaC.

Επίλυση

Για να αποτρέψετε αυτό το πρόβλημα για μελλοντικά αρχεία μουσικής FLAC, εγκαταστήστε την έκδοση 25 Μαΐου 2021— KB5003214 (19041.1013, 19042.1013 και 19043.1013) Προεπισκόπηση.

Για να επιδιορθώσετε αρχεία μουσικής FLAC που επηρεάζονται, εκτελέστε την ακόλουθη δέσμη ενεργειών του PowerShell.

Σημαντικό: Αυτή η δέσμη ενεργειών δεν θα επαναφέρει τα χαμένα μετα-δεδομένα που ήταν αποθηκευμένα στο πλαίσιο ID3. Ωστόσο, κάνει ξανά δυνατή την αναπαραγωγή του αρχείου.

  1. Ανοίξτε το Σημειωματάριο.

  2. Αντιγράψτε και επικολλήστε την ακόλουθη δέσμη ενεργειών στο σημειωματάριο:

    # Copyright 2021 Microsoft

    # Αυτή η δέσμη ενεργειών θα επιδιορθώσει ένα αρχείο FLAC που έχει καταστραφεί από το Media Foundation σε αναφορά στο KB5003430.

    # Ανατρέξτε στο KB5003430 για περισσότερες πληροφορίες

    param(

    [parameter(Mandatory=$true;

    HelpMessage="Η διαδρομή προς το αρχείο FLAC που έχει καταστραφεί από το Media Foundation",

    ValueFromRemainingArguments=$true)]

    [ValidateScript({ -not [Συμβολοσειρά]::IsNullOrEmpty($_) -and (Test-Path $_) })]

    [Συμβολοσειρά]$File

    )

    # We need to back up the current file incase we have any errors

    $FileDirectory = Split-Path -Επίλυση $File

    $Filename = Split-Path -Φύλλο -Επίλυση $File

    $FullPath = Join-Path -Επίλυση $FileDirectory $Filename

    $Filename = [Συμβολοσειρά]::Format("Backup_{0:yyyyMMdd_hhmmss}_{1}", [DateTime]::Now, $Filename)

    $BackupLocation = Join-Path $FileDirectory $Filename

    Write-Output "Εργαλείο επιδιόρθωσης FLAC της Microsoft. Αυτό το εργαλείο θα επιδιορθώσει ένα αρχείο ήχου FLAC που ήταν κατεστραμμένο κατά την επεξεργασία των λεπτομερειών του".

    Write-Output "Αρχείο που επηρεάζεται: $FullPath"

    Write-Output "Θα γίνει ένα αντίγραφο ασφαλείας του αρχείου: $BackupLocation"

    Write-Output "Θέλετε να συνεχίσετε;"

    $choice=$host.ui.PromptForChoice("Διόρθωση δέσμης ενεργειών FLAC", "Θέλετε να συνεχίσετε", ('&Ναι', '&Όχι'), 1)

    parseStreamInfoMetadataBlock([System.IO.FileStream]$stream)

    {

    $blockType = $stream. ReadByte()

    $lastBlock = ($blockType -shr 7) -ne 0

    $blockType = $blockType -band 0x7F

    if ($blockType -ne 0)

    {

    επιστροφή $false

    }

    $blockSize = (($stream. ReadByte() -shl 16) -bor ($stream. ReadByte() -shl 8) -bor $stream. ReadByte())

    if ($blockSize -lt 34)

    {

    επιστροφή $false

    }

    $minAudioBlockSize = ($stream. ReadByte() -shl 8) -bor $stream. ReadByte()

    $maxAudioBlockSize = ($stream. ReadByte() -shl 8) -bor $stream. ReadByte()

    εάν ($minAudioBlockSize -lt 16 -ή $maxAudioBlockSize -lt 16)

    {

    επιστροφή $false

    }

    $minFrameSize = (($stream. ReadByte() -shl 16) -bor ($stream. ReadByte() -shl 8) -bor $stream. ReadByte())

    $maxFrameSize = (($stream. ReadByte() -shl 16) -bor ($stream. ReadByte() -shl 8) -bor $stream. ReadByte())

    $sampleInfo = (($stream. ReadByte() -shl 24) -bor ($stream. ReadByte() -shl 16) -bor ($stream. ReadByte() -shl 8) -bor $stream. ReadByte())

    $sampleRate = $sampleInfo -shr 12

    $channelCount = (($sampleInfo -shr 9) -band 0x7) + 1

    $bitsPerSample = (($sampleInfo -shr 4) -band 0x1F) + 1

    [UInt64]$sampleCount = (($stream. ReadByte() -shl 24) -bor ($stream. ReadByte() -shl 16) -bor ($stream. ReadByte() -shl 8) -bor $stream. ReadByte())

    $sampleCount = (([UInt64]$sampleInfo -band 0xF) -shl 32) -bor $sampleCount

    $MD 5HashBytes = New-Object byte[] 16

    $stream. Read($MD 5HashBytes, 0, $MD 5HashBytes.Length)

    $MD 5Hash = [Guid]($MD 5HashBytes)

    if ($sampleRate -eq 0)

    {

    επιστροφή $false

    }

    # Η επιτυχία αυτών των ελέγχων σημαίνει ότι πιθανότατα έχουμε μια κεφαλίδα πληροφοριών ροής και μπορεί να αναδημιουργήσει το αρχείο

    Write-Output "Πληροφορίες ροής αρχείων"

    Write-Output "Ρυθμός δείγματος: $sampleRate"

    Write-Output "Κανάλια ήχου: $channelCount"

    Write-Output "Βάθος δείγματος: $bitsPerSample"

    Write-Output "MD5 Audio Sample Hash: $MD 5Hash"

    επιστροφή $true

    }

    if ($choice -eq 0)

    {

    Copy-Item $FullPath -Destination $BackupLocation -Force

    $stream = [System.IO.File]::Open($FullPath; [System.IO.FileMode]::Open)

    $stream. Seek(4; [System.IO.SeekOrigin]::Begin)

    ενώ ($stream. ReadByte() -eq 0) {}

    #We now need to figure out where a valid FLAC metadata frame begins

    # Πιθανότατα θα τοποθετήστε το δείκτη του μεγέθους στο τελευταίο byte του μέλους μεγέθους, επομένως θα αναζητήσουμε 4 byte και θα προσπαθήσουμε ξανά

    $flacDataStartPosition = $stream. Θέση - 4

    $stream. Seek($flacDataStartPosition; [System.IO.SeekOrigin]::Begin)

    ενώ (-not(ParseStreamInfoMetadataBlock($stream))

    {

    $flacDataStartPosition = $flacDataStartPosition + 1

    $stream. Seek($flacDataStartPosition; [System.IO.SeekOrigin]::Begin)

    }

    # Εισαγωγή του κωδικού έναρξης

    $stream. Seek($flacDataStartPosition; [System.IO.SeekOrigin]::Begin)

    if (Test-Path "$FullPath.tmp")

    {

    Remove-Item "$FullPath.tmp"

    }

    $fixedStream = [System.IO.File]::Open("$FullPath.tmp", [System.IO.FileMode]::CreateNew)

    [byte[]]$startCode = [char[]]('f', 'L', 'a', 'C');

    $fixedStream.Write($startCode; 0; $startCode.Μήκος)

    $stream. CopyTo($fixedStream)

    $stream. Close()

    $fixedStream.Close()

    Move-Item -Force "$FullPath.tmp" $FullPath

    }

  3. Στο μενού "Αρχείο", κάντε κλικ στην επιλογή "Αποθήκευση".

  4. Στο παράθυρο διαλόγου "Αποθήκευση ως", εντοπίστε το φάκελο στον οποίο θέλετε να αποθηκεύσετε τη δέσμη ενεργειών του PowerShell.

  5. Στο πλαίσιο "Όνομα αρχείου", πληκτρολογήστε FixFlacFiles.ps1, αλλάξτε το πλαίσιο "Αποθήκευση ως τύπου" σε "Έγγραφα κειμένου" (*.txt) και, στη συνέχεια, κάντε κλικ στην επιλογή "Αποθήκευση".

  6. Στην Windows, εντοπίστε τη δέσμη ενεργειών του PowerShell που έχετε αποθηκεύσει.

  7. Κάντε δεξί κλικ στη δέσμη ενεργειών και, στη συνέχεια, κάντε κλικ στην επιλογή "Εκτέλεση με το PowerShell".

  8. Όταν σας ζητηθεί, πληκτρολογήστε το όνομα αρχείου του αρχείου FLAC χωρίς δυνατότητα αναπαραγωγής και, στη συνέχεια, πατήστε το πλήκτρο Enter.

Χρειάζεστε περισσότερη βοήθεια;

Θέλετε περισσότερες επιλογές;

Εξερευνήστε τα πλεονεκτήματα της συνδρομής, περιηγηθείτε σε εκπαιδευτικά σεμινάρια, μάθετε πώς μπορείτε να προστατεύσετε τη συσκευή σας και πολλά άλλα.

Οι κοινότητες σάς βοηθούν να κάνετε και να απαντάτε σε ερωτήσεις, να δίνετε σχόλια και να ακούτε από ειδικούς με πλούσια γνώση.

Σας βοήθησαν αυτές οι πληροφορίες;

Πόσο ικανοποιημένοι είστε με τη γλωσσική ποιότητα;
Τι επηρέασε την εμπειρία σας;
Πατώντας "Υποβολή" τα σχόλια σας θα χρησιμοποιηθούν για τη βελτίωση των προϊόντων και των υπηρεσιών της Microsoft. Ο διαχειριστής IT θα έχει τη δυνατότητα να συλλέξει αυτά τα δεδομένα. Δήλωση προστασίας προσωπικών δεδομένων.

Σας ευχαριστούμε για τα σχόλιά σας!

×