Applies ToWindows 10 Enterprise, version 2004 Windows 10 Home and Pro, version 2004 Windows 10 Pro, version 2004 Windows 10 Enterprise and Education, version 2004 Windows 10 Pro Education, version 2004 Windows 10 Pro for Workstations, version 2004 Windows 10 Pro, version 20H2 Windows 10 Enterprise, version 20H2 Windows 10 Enterprise and Education, version 20H2 Windows 10 Home and Pro, version 20H2 Windows 10 Pro Education, version 20H2 Windows 10 Pro for Workstations, version 20H2

Összefoglalás

Ez a frissítés egy metaadat-kódolási problémát javít, amelynek következtében a szabad veszteségmentes audiokodekek (FLAC) zenefájlok lejátszhatatlanná válnak, ha címük, előadójuk vagy más metaadataik megváltoznak. 

A probléma oka

Ez a probléma akkor fordulhat elő, ha a FLAC-fájlok a FLAC fejléc előtt egy ID3 kerettel ékezetet tartalmaznak. Az ID3-keret metaadatokat, például címet és előadót tartalmaz. A FLAC tulajdonságkezelője azt feltételezte, hogy minden FLAC-fájl a 4 bájtos fLaC kóddal indult el, és nem vette figyelembe az ID3 keretet a fájl elején. Ezért az ID3-keret felülíródik az fLaC indítási kód nélkül, így a fájl nem lesz lejátszható.

Megoldás

A jövőbeli FLAC-zenefájlokra vonatkozó probléma megelőzéséhez telepítse a 2021. május 25. – KB5003214 (az operációs rendszer 19041.1013-as, 19042.1013-as és 19043.1013-as buildjét) –előzetes verzió.

Az érintett FLAC-zenefájlok javításához futtassa az alábbi PowerShell-parancsprogramot.

Fontos: Ez a parancsfájl nem fogja visszaállítani az ID3 keretben tárolt elveszett metaadatokat. A fájl azonban ismét lejátszható lesz.

  1. Nyissa meg a Jegyzettömb alkalmazást.

  2. Másolja és illessze be az alábbi parancsfájlt a jegyzettömbbe:

    # Copyright 2021 Microsoft

    # Ez a parancsprogram kijavítja a MEDIA Foundation által a KB5003430-re való hivatkozással sérült FLAC-fájlt.

    # További információért lásd: KB5003430

    paraméter(

    [parameter(Mandatory=$true;

    HelpMessage="A Media Foundation által sérült FLAC-fájl elérési útja"

    ValueFromRemainingArguments=$true)]

    [ValidateScript({ -not [String]::IsNullOrEmpty($_) -and (Test-Path $_) })]

    [Karakterlánc]$File

    )

    # Biztonsági mentése az aktuális fájlról a hibák miatt

    $FileDirectory = Split-Path -Resolve $File

    $Filename = Split-Path -Levél -Feloldása $File

    $FullPath = Join-Path -Resolve $FileDirectory $Filename

    $Filename = [Karakterlánc]::Format("Backup_{0:yyyyMMdd_hhmmss}_{1}", [DateTime]::Now, $Filename)

    $BackupLocation = Join-Path $FileDirectory $Filename

    Write-Output "Microsoft FLAC javítóeszköz. Ez az eszköz kijavítja a FLAC hangfájlt, amely a részletek szerkesztésekor sérült."

    Write-Output "Érintett fájl: $FullPath"

    Write-Output "A fájlról biztonsági másolat készül: $BackupLocation"

    Write-Output a "Szeretné folytatni?" kérdést.

    $choice=$host.ui.PromptForChoice("A FLAC-parancsprogram rögzítése", "Kíván folytatni", ('&Igen', '&No'), 1)

    function ParseStreamInfoMetadataBlock([System.IO.FileStream]$stream)

    {

    $blockType = $stream. ReadByte()

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

    $blockType = $blockType -band 0x7F

    if ($blockType -ne 0)

    {

    vissza $false

    }

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

    if ($blockSize -lt 34)

    {

    vissza $false

    }

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

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

    if ($minAudioBlockSize -lt 16 -vagy $maxAudioBlockSize -lt 16)

    {

    vissza $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)

    {

    vissza $false

    }

    # Ezeknek az ellenőrzéseknek az átadása azt jelenti, hogy valószínűleg van egy adatfolyam-adatfejléc, és újraépíthetjük a fájlt

    Write-Output "Fájladatfolyam-információk"

    Write-Output "Mintadíj: $sampleRate"

    Write-Output "Hangcsatornák: $channelCount"

    Write-Output "Mintamélység: $bitsPerSample"

    Write-Output "MD5 Audio Sample Hash: $MD 5Hash" (MD5 hangminta kivonat): $MD 5Hash"

    vissza $true

    }

    if ($choice -eq 0)

    {

    Copy-Item $FullPath -Destination $BackupLocation -Force

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

    $stream. Keresés(4; [System.IO.SeekOrigin]::Begin)

    ($stream. ReadByte() -eq 0) {}

    # Most ki kell derítenünk, hol kezdődik egy érvényes FLAC metaadatkeret

    # Valószínűleg a méret tag utolsó bájtjára mutatunk, ezért vissza fogunk keresni 4 bájtot, és újra próbálkozunk

    $flacDataStartPosition = $stream. Pozíció – 4

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

    while (-not(ParseStreamInfoMetadataBlock($stream)))

    {

    $flacDataStartPosition = $flacDataStartPosition + 1

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

    }

    # A start kód beszúrása

    $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)

    [bájt[]]$startCode = [char[]]('f', 'L', 'a', 'C');

    $fixedStream.Write($startCode; 0; $startCode.Length)

    $stream. CopyTo($fixedStream)

    $stream. Close()

    $fixedStream.Close()

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

    }

  3. Kattintson a Fájl menü Mentés parancsára.

  4. A Mentés másként párbeszédpanelen keresse meg azt a mappát, amelybe menteni szeretné a PowerShell-parancsprogramot.

  5. A Fájlnév mezőbe írja be a FixFlacFiles.ps1szöveget, a Fájltípus mezőben módosítsa a Szövegdokumentumok (*.txt) szöveget, majd kattintson a Mentés gombra.

  6. A Windows Explorerben keresse meg a mentett PowerShell-parancsprogramot.

  7. Kattintson a jobb gombbal a parancsfájlra, és válassza a Futtatás PowerShell használatával parancsot.

  8. Amikor a rendszer kéri, írja be a nem lejátszható FLAC-fájl nevét, majd nyomja le az Enter billentyűt.

További segítségre van szüksége?

További lehetőségeket szeretne?

Fedezze fel az előfizetés előnyeit, böngésszen az oktatóanyagok között, ismerje meg, hogyan teheti biztonságossá eszközét, és így tovább.

A közösségek segítségével kérdéseket tehet fel és válaszolhat meg, visszajelzést adhat, és részletes ismeretekkel rendelkező szakértőktől hallhat.