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

Sammendrag

Denne oppdateringen tar for seg et problem med metadatakoding som fører til at flac-musikkfiler (Free Lossless Audio Codec) ikke kan spilles av hvis tittel, artist eller andre metadata endres. 

Årsak

Dette problemet kan oppstå når FLAC-filene inneholder en ID3-ramme før FLAC-toppteksten. ID3-rammen inneholder metadata, for eksempel tittel og artist. Flac-egenskapsbehandlingen antok at alle FLAC-filer startet med startkoden fLaC på 4 byte og ikke tok hensyn til ID3-rammen i begynnelsen av filen. ID3-rammen vil derfor bli overskrevet uten at startkoden fLaC gjengir filen som ikke kan spilles av.

Løsning

Hvis du vil forhindre dette problemet for fremtidige FLAC-musikkfiler, installerer du 25. mai 2021 – KB5003214 (OS-bygg 19041.1013, 19042.1013 og 19043.1013) Preview.

Hvis du vil reparere berørte FLAC-musikkfiler, kjører du følgende PowerShell-skript.

Viktig!: Dette skriptet gjenoppretter ikke tapte metadata som ble lagret i ID3-rammen. Filen kan imidlertid spilles av på nytt.

  1. Åpne Notisblokk.

  2. Kopier og lim inn følgende skript i notisblokken:

    # Copyright 2021 Microsoft

    # Dette skriptet reparerer en FLAC-fil som er skadet av Media Foundation i referanse til KB5003430.

    # Se KB5003430 for mer informasjon

    param(

    [parameter(Obligatorisk=$true,

    HelpMessage="Banen til FLAC-filen som er skadet av Media Foundation",

    ValueFromRemainingArguments=$true)]

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

    [Streng]$File

    )

    # Vi må sikkerhetskopiere gjeldende fil incase vi har eventuelle feil

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

    $Filename = Split-Path -Leaf -Resolve $File

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

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

    $BackupLocation = Join-Path $FileDirectory $Filename

    Write-Output «Reparasjonsverktøy for Microsoft FLAC. Dette verktøyet reparerer en FLAC-lydfil som ble skadet når du redigerte detaljene.»

    Write-Output «Berørt fil: $FullPath»

    Write-Output «En sikkerhetskopi av filen vil bli laget: $BackupLocation»

    Write-Output «Vil du fortsette?»

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

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

    {

    $blockType = $stream. ReadByte()

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

    $blockType = $blockType -band 0x7F

    hvis ($blockType -ne 0)

    {

    returner $false

    }

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

    hvis ($blockSize -lt 34)

    {

    returner $false

    }

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

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

    hvis ($minAudioBlockSize -lt 16 -eller $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 5HashByte = New-Object byte[] 16

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

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

    hvis ($sampleRate -eq 0)

    {

    returner $false

    }

    # Hvis du sender disse kontrollene, betyr det at vi sannsynligvis har en strøminformasjonsoverskrift og kan gjenoppbygge filen

    Write-Output «Filstrømsinformasjon»

    Write-Output «Eksempelfrekvens: $sampleRate»

    Write-Output «Lydkanaler: $channelCount»

    Write-Output «Eksempeldybde: $bitsPerSample»

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

    returner $true

    }

    hvis ($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 ($stream. ReadByte() -eq 0) {}

    # Vi må nå finne ut hvor en gyldig FLAC-metadataramme begynner

    # Vi peker sannsynligvis på den siste byten i størrelsesmedlemmet, slik at vi søker tilbake 4 byte og prøver på nytt

    $flacDataStartPosition = $stream. Posisjon - 4

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

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

    {

    $flacDataStartPosition = $flacDataStartPosition + 1

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

    }

    # Sett inn 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. Lukk()

    $fixedStream.Close()

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

    }

  3. Klikk LagreFil-menyen.

  4. Finn mappen der du vil lagre PowerShell-skriptet, i dialogboksen Lagre som.

  5. Skriv inn FixFlacFiles.ps1 i Filnavn-boksen, endre Filtype-boksen til Tekstdokumenter (*.txt), og klikk deretter Lagre.

  6. Finn PowerShell-skriptet du lagret i Windows Explorer.

  7. Høyreklikk skriptet, og klikk deretter Kjør med PowerShell.

  8. Når du blir bedt om det, skriver du inn filnavnet til FLAC-filen som ikke kan spilles av, og deretter trykker du ENTER.

Trenger du mer hjelp?

Vil du ha flere alternativer?

Utforsk abonnementsfordeler, bla gjennom opplæringskurs, finn ut hvordan du sikrer enheten og mer.

Fellesskap hjelper deg med å stille og svare på spørsmål, gi tilbakemelding og høre fra eksperter med stor kunnskap.