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 !

Amazon réduit de moitié le prix du Fire TV Stick 4K Select : ce petit dongle redonne un second souffle aux vieilles TV

Amazon propose actuellement le Fire TV Stick 4K Select à 26,99 € au lieu de 54,99 €, soit une réduction de plus de 50 % par rapport à son prix…

Galaxy A56 : ces 250 € de remise font fondre le prix du smartphone de Samsung, c’est une affaire !

À la base, le Galaxy A56 est le smartphone de milieu de gamme de Samsung. Mais grâce à une double promotion, vous pourrez le trouver à moins de 300 euros…

Gemini se met aussi aux bulles sur Android 17, de quoi ravir les adeptes du multitâche sur smartphone

Lors de sa conférence Google I/O, le géant de Mountain View a annoncé une petite révolution – notamment « agentique » – pour Gemini. Et l’entreprise poursuit ses efforts pour rendre son…

Smartphones : n’achetez surtout pas ces coques de protection, elles ne sont pas aussi efficaces que vous le pensez

Séduisantes sur le papier, les coques antibactériennes ne sont pas forcément les plus efficaces pour vous protéger contre les microbes. Cette bonne vieille méthode reste encore la meilleure option, en…

Cette exoplanète rôtie par son étoile fait avancer la science, malgré elle

Comme toute Jupiter chaude, l’exoplanète HD 80606 b voit sa température grimper dès qu’elle frôle son étoile. Mais cette géante gazeuse est en réalité un monde bien plus extrême que…

Pixel 10 Pro : le flagship de Google est à moins de 700 € avec un Google TV Streamer et un support de smartphone Pixelsnap offerts

Boulanger cumule les offres intéressantes sur le Google Pixel 10 Pro. Plus de 200 euros de réduction, 2 cadeaux, 6 mois d’assurances offerts, vous allez être gâté. Dans cet article,…

GTA 6 : on connaît enfin la date des précommandes et elle est imminente !

Treize ans : c’est le nombre d’années qu’il aura fallu pour que GTA 6 sorte enfin. Ce jeu est déjà, avant même sa sortie, un véritable phénomène mondial, au point qu’on…

Le DJI Mini 4K perd plus de 110 € : le drone ultra léger profite d’une remise de 37 %

Le DJI Mini 4K passe à moins de 190 € chez Amazon, grâce aux offres du Prime Day en avant-première. La baisse de prix est d’environ 37 % par rapport…

Porsche tranche enfin sur l’avenir de sa 911, et les puristes vont adorer

Depuis des années, les fans de la 911 tremblaient à l’idée de voir leur bolide culte passer à l’électrique. Le nouveau patron de Porsche vient enfin de les rassurer en…

Dreame H12 Pro Ultra : l’aspirateur laveur avec auto-nettoyage est à moitié prix chez Amazon

Amazon baisse fortement le prix du Dreame H12 Pro Ultra à l’approche du Prime Day. L’aspirateur laveur est actuellement à moitié prix, et passe à seulement 158 €, au lieu…