Ringkasan
Pembaruan ini mengatasi masalah pengodean metadata yang menyebabkan file musik Free Lossless Audio Codec (UNICODE) menjadi tidak dapat putar jika judul, artis, atau metadata lainnya diubah.
Penyebab
Masalah ini dapat terjadi ketika file ZIP berisi bingkai ID3 sebelum header GIF. Bingkai ID3 berisi metadata seperti judul dan artis. Penanganan properti GIF mengasumsikan bahwa semua file ZIP dimulai dengan fLaC kode mulai 4 byte dan tidak memperhitungkan bingkai ID3 di awal file. Oleh karena itu, bingkai ID3 akan ditimpa tanpa fLaC kode mulai merender file tidak dapat di putar.
Pemecahan Masalah
Untuk mencegah masalah ini untuk file musik ZIP yang akan datang, instal 25 Mei 2021—KB5003214 (OS Build 19041.1013, 19042.1013, dan Pratinjau 19043.1013).
Untuk memperbaiki file musik TXT yang terpengaruh, jalankan skrip PowerShell berikut ini.
Penting: Skrip ini tidak akan memulihkan metadata yang hilang yang disimpan di bingkai ID3. Namun, ini dapat membuat file dapat diputar lagi.
-
Buka Notepad.
-
Salin dan tempelkan skrip berikut ke dalam notepad:
# Copyright 2021 Microsoft
# Skrip ini akan memperbaiki file JPEG yang telah rusak oleh Media Foundation sebagai referensi ke KB5003430.
# Rujuk ke KB5003430 untuk informasi lebih lanjut
param(
[parameter(Wajib=$true,
HelpMessage="Jalur ke file GIF yang telah rusak oleh Media Foundation",
ValueFromRemainingA argumentments=$true)]
[ValidateScript({ -not [String]::IsNullOrEmpty($_) -and (Test-Path $_) })]
[String]$File
)
# Kami perlu mencadangkan file saat ini dalam huruf besar dan kami memiliki kesalahan
$FileDirectory = Split-Path -Resolve $File
$Filename = Split-Path -Daun -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 REPAIR Tool. Alat ini akan memperbaiki file audio JPEG yang rusak ketika mengedit detailnya."
Write-Output "File yang Terpengaruh: $FullPath"
Write-Output "Pencadangan file akan dibuat: $BackupLocation"
Write-Output "Apakah Anda ingin melanjutkan?"
$choice=$host.ui.PromptForChoice("Fixing SCRIPT", "Apakah Anda ingin melanjutkan", ('&Ya', '&Tidak'), 1)
fungsi 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 -atau $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
$MD 5HashBytes = New-Object byte[] 16
$stream. Read($MD 5HashBytes, 0, $MD 5HashBytes.Length)
$MD 5Hash = [Guid]($MD 5HashBytes)
if ($sampleRate -eq 0)
{
return $false
}
# Melewati pemeriksaan ini berarti bahwa kami mungkin memiliki header informasi aliran dan bisa menyusun ulang file
Write-Output "Informasi File Stream"
Write-Output "Sampel Tarif: $sampleRate"
Write-Output "Saluran Audio: $channelCount"
Write-Output "Kedalaman Sampel: $bitsPerSample"
Write-Output "Hash Sampel Audio MD5: $MD 5Hash"
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)
sambil ($stream. ReadByte() -eq 0) {}
# Kini kami perlu mencari tahu ke mana bingkai metadata METADATA METADATA VALID dimulai
# Kami kemungkinan menunjuk ke byte terakhir dari anggota ukuran sehingga kami akan mencari kembali 4 byte dan mencoba lagi
$flacDataStartPosition = $stream. Posisi - 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
}
-
Pada menu File, klik Simpan.
-
Dalam kotak dialog Simpan Sebagai, temukan folder tempat Anda ingin menyimpan skrip PowerShell.
-
Dalam kotak Nama file, ketik FixFlacFiles.ps1, ubah kotak Simpan sebagai tipe menjadi Dokumen Teks (*.txt) lalu klik Simpan.
-
Di Windows Explorer, temukan skrip PowerShell yang Anda simpan.
-
Klik kanan skrip lalu klik Jalankan dengan PowerShell.
-
Ketika diminta, ketikkan nama file XML yang tidak dapat ditampilkan, lalu tekan Enter.