Zusammenfassung
Dieses Update behebt ein Problem mit der Metadatencodierung, das dazu führt, dass FLAC-Musikdateien (Free Lossless Audio Codec) nicht mehr abgespielt werden können, wenn Titel, Interpret oder andere Metadaten geändert werden.
Ursache
Dieses Problem kann auftreten, wenn die FLAC-Dateien einen ID3-Frame vor dem FLAC-Header enthalten. Der ID3-Frame enthält Metadaten wie Titel und Interpret. Der FLAC-Eigenschaftshandler hat angenommen, dass alle FLAC-Dateien mit dem 4-Byte-Startcode fLaC gestartet wurden und den ID3-Frame am Anfang der Datei nicht berücksichtigt haben. Daher würde der ID3-Frame überschrieben, ohne dass der Startcode-fLaC die Datei nicht wiedergabefähig macht.
Fehlerbehebung
Um dieses Problem bei zukünftigen FLAC-Musikdateien zu vermeiden, installieren Sie Preview vom 25. Mai 2021 – KB5003214 (BS-Builds 19041.1013, 19042.1013 und 19043.1013).
Um betroffene FLAC-Musikdateien zu reparieren, führen Sie das folgende PowerShell-Skript aus.
Wichtig: Mit diesem Skript werden die verlorenen Metadaten, die im ID3-Frame gespeichert wurden, nicht wiederhergestellt. Die Datei kann jedoch wieder abspielbar werden.
- 
              Öffnen Sie Microsoft Editor. 
- 
              Kopieren Sie das folgende Skript, und fügen Sie es in Editor ein: # Copyright 2021 Microsoft # Dieses Skript repariert eine FLAC-Datei, die von Media Foundation in Bezug auf KB5003430 beschädigt wurde. # Weitere Informationen finden Sie unter KB5003430. Parameter( [parameter(mandatory=$true, HelpMessage="Der Pfad zu der FLAC-Datei, die von Media Foundation beschädigt wurde", ValueFromRemainingArguments=$true)] [ValidateScript({ -not [String]::IsNullOrEmpty($_) -and (Test-Path $_) })] [Zeichenfolge]$File ) # Wir müssen die aktuelle Datei sichern, wenn Fehler auftreten. $FileDirectory = Split-Path -Resolve-$File $Filename = Split-Path -Leaf -Resolve-$File $FullPath = Join-Path -Resolve-$FileDirectory $Filename $Filename = [Zeichenfolge]::Format("Backup_{0:yyyyMMdd_hhmmss}_{1}"; [DateTime]::Now, $Filename) $BackupLocation = Join-Path $FileDirectory $Filename Write-Output "Microsoft FLAC Repair Tool. Dieses Tool repariert eine FLAC-Audiodatei, die beim Bearbeiten der Details beschädigt wurde." Write-Output "Betroffene Datei: $FullPath" Write-Output "Eine Sicherung der Datei wird erstellt: $BackupLocation" Write-Output "Möchten Sie den Fortsetzen fortsetzen?" $choice=$host.ui.PromptForChoice("FlaC Script", "Do you wish to continue", ('&Yes', '&No'), 1) -Funktion ParseStreamInfoMetadataBlock([System.IO.FileStream]$stream) { $blockType = $stream. ReadByte() $lastBlock = ($blockType -shr 7) -ne 0 $blockType = $blockType -band 0x7F if ($blockType -ne 0) { Rückgabe $false } $blockSize = (($stream. ReadByte() -shl 16) -bor ($stream. ReadByte() -shl 8) -bor $stream. ReadByte()) if ($blockSize -lt 34) { Rückgabe $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) { Rückgabe $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) { Rückgabe $false } # Das Übergeben dieser Prüfungen bedeutet, dass wir wahrscheinlich über einen Datenstrominformationsheader verfügen und die Datei neu erstellen können. Write-Output "Dateidatenstrominformationen" Write-Output "Beispielrate: $sampleRate" Write-Output "Audiokanäle: $channelCount" Write-Output "Beispieltiefe: $bitsPerSample" Write-Output "MD5-Audiobeispielhash: $MD 5Hash" Rückgabe $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) while ($stream. ReadByte() -eq 0) {} # Wir müssen nun herausfinden, wo ein gültiger FLAC-Metadatenframe beginnt. # Wir verweisen wahrscheinlich auf das letzte Byte des Size-Members, also werden 4 Bytes gesucht und es erneut versuchen. $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) } # Einfügen des Startcodes $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. Close() $fixedStream.Close() Move-Item -Force "$FullPath.tmp" $FullPath } 
- 
              Klicken Sie im Menü Datei auf Speichern. 
- 
              Suchen Sie im Dialogfeld Speichern unter den Ordner, in dem Sie das PowerShell-Skript speichern möchten. 
- 
              Geben Sie im Feld DateinameFixFlacFiles.ps1ein, ändern Sie das Feld Dateityp in Textdokumente (*.txt), und klicken Sie dann auf Speichern. 
- 
              Suchen Windows im Explorer nach dem gespeicherten PowerShell-Skript. 
- 
              Klicken Sie mit der rechten Maustaste auf das Skript, und klicken Sie dann auf Mit PowerShell ausführen. 
- 
              Wenn Sie dazu aufgefordert werden, geben Sie den Dateinamen der nicht wiederzugebende FLAC-Datei ein, und drücken Sie dann die EINGABETASTE. 
 
                         
				 
				