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 !

En promo à moins de 200 €, la Galaxy Tab A11+ vous offre le confort d’une grande tablette Samsung à petit prix

La Galaxy Tab A11+ est la plus grande des tablettes pas chères de Samsung. Elle a de quoi servir à toute la famille avec son écran de 11 pouces à…

BMW va réduire la facture de ses voitures électriques grâce à cette batterie moins chère

La batterie pèse lourd dans le prix d’une voiture électrique, et chaque constructeur cherche à en alléger la facture. BMW vient de confirmer l’arrivée d’une technologie plus économique sur sa…

Steam affiche le framerate moyen pour les jeux afin d’en finir avec les mauvaises surprises

Steam commence à renseigner le framerate moyen obtenu par les joueurs pour les titres compatibles avec le Steam Deck. La fonctionnalité sera étendue aux PC par la suite. Il y…

Nintendo Switch 2 : ne mettez pas à jour votre console si vous comptez la jailbreaker

Ce n’était qu’une question de temps avant que Nintendo ne patche la faille qui a permis de jailbreaker sa console, c’est désormais chose faite. La version 23.5.0 de son firmware…

L’iPhone 5C fait un comeback inattendu 13 ans plus tard, voici pourquoi la Gen Z l’adore

On pensait l’iPhone 5C mort et enterré, mais ç’aurait été mal connaître le puissant pouvoir de la nostalgie. Le smartphone s’est vu ressuscité cette année par les plus jeunes utilisateurs,…

Fitbit : réinitialiser votre ancienne montre connectée aura des conséquences irréversibles sur vos applications

Jusqu’à présent, certains propriétaires d’anciennes montres connectées Fitbit disposaient d’un avantage que les modèles les plus récents n’ont jamais eu : l’installation d’applications et de cadrans tiers. Google leur retire désormais….

Ford a mesuré 36 000 batteries de Mustang Mach-E après 5 ans, voici combien d’autonomie il leur reste

La dégradation des batteries reste la grande crainte au moment de passer à l’électrique. Ford vient de publier les relevés de santé de 36 000 Mustang Mach-E, cinq ans après…

Microsoft veut vous payer pour utiliser votre carte graphique quand vous dormez

Même Microsoft n’a apparemment pas assez de VRAM en stock, à tel point que la firme réfléchit désormais à utiliser celle des utilisateurs. Dans un brevet récemment publié, celle-ci décrit…

ALLPOWERS R600 : la station électrique portable de 600 W vous dépanne partout pour seulement 206 €

Une coupure de courant de quelques heures peut vite devenir agaçant, surtout quand vos appareils mobiles sont quasiment à court d’autonomie. La station électrique portable ALLPOWERS R600 peut vous sauver…

Les lunettes connectées de Samsung arrivent, cette mise à jour confirme leur sortie imminente

Samsung entre dans la dernière ligne droite avant la commercialisation de ses premières lunettes connectées. L’application Galaxy Wearable vient de recevoir une mise à jour en apparence anodine. Son code…