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

Oversigt

Denne opdatering løser et problem med kodning af metadata, der medfører, at musikfiler uden tabulatorlyd (FLAC) bliver uafspilelige, hvis deres titel, kunstner eller andre metadata ændres. 

Årsag

Dette problem kan opstå, når FLAC-filerne indeholder en ID3-ramme før FLAC-overskriften. ID3-rammen indeholder metadata, f.eks. titel og kunstner. FLAC-egenskabsbehandleren antagede, at alle FLAC-filer startede med startkoden 4 byte fLaC og ikke tog højde for ID3-rammen i starten af filen. Derfor overskrives ID3-rammen, uden at startkoden fLaC gengiver filen uafspilbar.

Løsning

For at undgå dette problem for fremtidige FLAC-musikfiler skal du installere 25. maj 2021 – KB5003214 (OS Builds 19041.1013, 19042.1013 og 19043.1013) Preview.

For at reparere påvirkede FLAC-musikfiler skal du køre følgende PowerShell-script.

Vigtigt!: Dette script gendanner ikke de mistede metadata, der blev gemt i ID3-rammen. Men filen kan afspilles igen.

  1. Åbn Notesblok.

  2. Kopiér og indsæt følgende script i notesblok:

    # Copyright 2021 Microsoft

    # Dette script reparerer en FLAC-fil, der er blevet beskadiget af Media Foundation i reference til KB5003430.

    # Se KB5003430 for at få flere oplysninger

    param(

    [parameter(Mandatory=$true,

    HelpMessage="Stien til FLAC-filen, der er blevet beskadiget af Media Foundation",

    ValueFromRemainingArguments=$true)]

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

    [Streng]$File

    )

    # Vi er nødt til at sikkerhedskopiere den aktuelle fil, hvis der opstår fejl

    $FileDirectory = Split-Path -Løs $File

    $Filename = Split-Path -blad -løs $File

    $FullPath = Join-Path -Løs $FileDirectory $Filename

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

    $BackupLocation = Join-Path $FileDirectory $Filename

    Write-Output "Microsoft FLAC-reparationsværktøj. Dette værktøj reparerer en FLAC-lydfil, der blev beskadiget, når du redigerer oplysningerne."

    Write-Output "Berørt fil: $FullPath"

    Write-Output "Der oprettes en sikkerhedskopi af filen: $BackupLocation"

    Write-Output "Vil du fortsætte?"

    $choice=$host.ui.PromptForChoice("Fixing FLAC Script", "Do you wish to continue", ('&Yes', '&No'), 1)

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

    {

    $blockType = $stream. ReadByte()

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

    $blockType = $blockType -band 0x7F

    if ($blockType -ne 0)

    {

    returner $false

    }

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

    if ($blockSize -lt 34)

    {

    returner $false

    }

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

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

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

    {

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

    {

    returner $false

    }

    # Hvis du videregiver disse kontroller, betyder det, at vi sandsynligvis har en overskrift for streamoplysninger og kan genopbygge filen

    Write-Output "Filstream-oplysninger"

    Write-Output "Eksempelsats: $sampleRate"

    Write-Output "Lydkanaler: $channelCount"

    Write-Output "Prøve dybde: $bitsPerSample"

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

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

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

    # Vi er nu nødt til at finde ud af, hvor en gyldig FLAC-metadataramme begynder

    # Vi peger sandsynligvis på den sidste byte af medlemmets størrelse, så vi søger 4 byte tilbage og prøver igen

    $flacDataStartPosition = $stream. Position - 4

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

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

    {

    $flacDataStartPosition = $flacDataStartPosition + 1

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

    }

    # Indsæt startkoden

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

    $stream. CopyTo($fixedStream)

    $stream. Luk()

    $fixedStream.Close()

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

    }

  3. Klik på Gem i menuen Filer.

  4. I dialogboksen Gem som skal du finde den mappe, hvor du vil gemme PowerShell-scriptet.

  5. I feltet Filnavn skal du skriveFixFlacFiles.ps1 , ændre feltet Filtype til Tekstdokumenter (*.txt) og derefter klikke på Gem.

  6. Find Windows PowerShell-script, du gemte, i Stifinder.

  7. Højreklik på scriptet, og klik derefter på Kør med PowerShell.

  8. Når du bliver bedt om det, skal du skrive filnavnet på den ikke-afspillede FLAC-fil og derefter trykke på Enter.

Har du brug for mere hjælp?

Vil du have flere indstillinger?

Udforsk abonnementsfordele, gennemse kurser, få mere at vide om, hvordan du sikrer din enhed og meget mere.

Communities hjælper dig med at stille og besvare spørgsmål, give feedback og høre fra eksperter med omfattende viden.