Windows 10 : un bug corrompt les fichiers FLAC audio, mais il y a une astuce et un patch

Les versions de Windows 10 2004 et ultérieures sont frappées par un bug qui corrompt les fichiers FLAC audio dès que leurs métadonnées sont modifiées. Microsoft reconnaît un problème en lien avec l'Explorateur de Fichiers Windows. Le correctif KB5003214 résout totalement le problème sur les PC affectés. 

flac audio windows 10 bug

Des utilisateurs de Windows 10 2004 et versions ultérieures ont rapporté un bug étrange qui survient avec certains fichiers FLAC. Après l'édition des métadonnées les fichiers sont corrompus – impossible de les lire quel que soit le programme, y compris dans VLC. Le problème est lié à un bug de l'Explorateur de Fichiers. Lorsque l'utilisateur édite les métadonnées d'un fichier FLAC, le programme ajoute de manière erronée des données avant les premiers bits qui permettent normalement aux programmes de reconnaître le fichier.

Du coup lors de l'ouverture aucun programme ne reconnaît la présence de données structurées selon le format FLAC et du coup la lecture ne se lance pas et un erreur apparaît. Microsoft a identifié la cause du problème et a publié un correctif KB5003214 qui corrige, en prime, d'autres bugs. Si vous avez corrompu quelques fichiers FLAC par mégarde, sachez également qu'une astuce est disponible. Microsoft vient en effet de publier un script PowerShell qui répare les fichiers corrompus. Notez néanmoins que le script ne répare pas les métadonnées.

Windows 10 : comment récupérer les fichiers FLAC audio corrompus

Pour cela, c'est relativement simple :

  • Ouvrez Notepad
  • Copiez-collez le code suivant :

# Copyright 2021 Microsoft
# This script will repair a FLAC file that has been corrupted by Media Foundation in reference to KB5003430.
# Refer to KB5003430 for further information
param(
[parameter(Mandatory=$true,
HelpMessage="The path to the FLAC file that has been corrupted by Media Foundation",
ValueFromRemainingArguments=$true)] [ValidateScript({ -not [String]::IsNullOrEmpty($_) -and (Test-Path $_) })] [String]$File
)
# We need to back up the current file incase we have any errors
$FileDirectory = Split-Path -Resolve $File
$Filename = Split-Path -Leaf -Resolve $File
$FullPath = Join-Path -Resolve $FileDirectory $Filename
$Filename = [String]::Format("Backup_{0:yyyyMMdd_hhmmss}_{1}", [DateTime]::Now, $Filename)
$BackupLocation = Join-Path $FileDirectory $Filename
Write-Output "Microsoft FLAC Repair Tool. This tool will repair a FLAC audio file that was corrupted when editing its details."
Write-Output "Affected File: $FullPath"
Write-Output "A backup of the file will be made: $BackupLocation"
Write-Output "Do you wish to continue?"
$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 -shr 7) -ne 0
$blockType = $blockType -band 0x7F
if ($blockType -ne 0)
{
return $false
}
$blockSize = (($stream.ReadByte() -shl 16) -bor ($stream.ReadByte() -shl 8) -bor $stream.ReadByte())
if ($blockSize -lt 34)
{
return $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)
{
return $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
$MD5HashBytes = New-Object byte[] 16
$stream.Read($MD5HashBytes, 0, $MD5HashBytes.Length)
$MD5Hash = [Guid]($MD5HashBytes)
if ($sampleRate -eq 0)
{
return $false
}
# Passing these checks means that we likely have a stream info header and can rebuild the file
Write-Output "File Stream Information"
Write-Output "Sample Rate: $sampleRate"
Write-Output "Audio Channels: $channelCount"
Write-Output "Sample Depth: $bitsPerSample"
Write-Output "MD5 Audio Sample Hash: $MD5Hash"
return $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) {}
# We now need to figure out where a valid FLAC metadata frame begins
# We are likely pointing to the last byte of the size member so we'll seek back 4 bytes and retry
$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)
}
# Insert the start code
$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
}

  • Enregistrez le fichier avec le nom “FixFlacFiles.ps1” en vérifiant que le type de document est bien “texte” dans Type
  • Retrouvez le fichier que vous avez enregistré et faites un clic droit dessus
  • Cliquez sur Exécuter avec PowerShell
  • Lorsque le script vous le demande, entrez le nom du fichier FLAC corrompu pour le réparer et appuyez sur Entrée

Lire également : Windows 10 – la mise à jour KB5003214 fait buguer la barre des tâches, comment corriger le problème

Vous avez été touché par le problème ? La méthode décrite pour rendre les fichiers corrompus de nouveau jouables a fonctionné ? Partagez votre retour dans les commentaires de cet article !


Réagissez à cet article !

Demandez nos derniers articles !

iPhone 14 Pro à moins de 450 € : du haut de gamme à prix cassé

L’iPhone 14 Pro devient beaucoup plus abordable grâce à une offre proposée par CertiDeal, le spécialiste français du reconditionné. Le smartphone passe ainsi à 449,99 €, contre 1 329 €…

Test Nothing Phone (4a) Pro : il visait le segment premium mais ses bras sont trop courts

Deux semaines après le Nothing Phone (4a), la version Pro est désormais disponible en France. S’appuyant sur un design qui met davantage en valeur l’aluminium, le Nothng Phone (4a) Pro…

Xiaomi améliore sa SU7 avec plus d’autonomie, du LiDAR et un prix agressif

Xiaomi revient avec une nouvelle SU7 nettement améliorée. La berline électrique gagne en autonomie, en puissance et en technologies. En quelques années, le marché des voitures électriques a fortement évolué….

Ne croyez pas aux promesses d’étanchéité des montres connectées, ces images le prouvent

Les montres connectées sont souvent présentées comme résistantes à l’eau. Pourtant, certaines situations peuvent rapidement les endommager, même pour les plus chères. Une simple baignade peut suffire à provoquer des…

SFR simplifie le transfert d’eSIM entre iPhone et smartphone Android, une première en France

Le transfert d’eSIM entre iPhone et smartphone Android est une opération compliquée, qui doit nécessiter l’intervention du service client de l’opérateur. Ce n’est plus le cas chez SFR, pour les…

AliExpress casse les prix pour son anniversaire : voici les offres qui valent le coup

Pour célébrer son anniversaire, AliExpress lance une vague de promotions sur l’ensemble de son site, et notamment sur nombreux produits high-tech. Smartphones, tablettes, PC, casques et écouteurs, objets connectés : pendant…

Cette fonctionnalité des Google Pixel est un must-have, et pourtant personne ne la connaît

Les Google Pixel offrent de nombreuses fonctionnalités exclusives. Et si certaines sont bien connues des utilisateurs, d’autres restent ignorées par une grande majorité. C’est le cas de ce raccourci, pourtant…

Le Xiaomi Electric Air Compressor 2 chute à 32 € : -47 % sur le compresseur portable ultra pratique

Discret, mais puissant, le compresseur d’air électrique portable de Xiaomi est à un super prix à l’occasion des offres anniversaire d’AliExpress. Grâce à une réduction de 47%, il passe à…

20 ans après sa sortie, la PS3 reçoit une mise à jour : vous devez l’installer pour ne pas bloquer la console

Contre toute attente, Sony déploie une nouvelle mise à jour pour sa PS3. Celle-ci est en fait nécessaire pour que la console reste capable de lire les disques Blu-ray. Au…

Bon plan : pour moins de 115 €, la Redmi Pad 2 est l’une des meilleures tablettes pas chères du moment

L’anniversaire d’AliExpress continue de faire chuter les prix, et cette fois c’est la Redmi Pad 2 qui fait l’objet d’une belle réduction sur le site du géant de la vente…