Applies ToWindows 10 Enterprise, version 2004 Windows 10 Home and Pro, version 2004 Windows 10 Pro, version 2004 Windows 10 Enterprise and Education, version 2004 Windows 10 Pro Education, version 2004 Windows 10 Pro for Workstations, version 2004 Windows 10 Pro, version 20H2 Windows 10 Enterprise, version 20H2 Windows 10 Enterprise and Education, version 20H2 Windows 10 Home and Pro, version 20H2 Windows 10 Pro Education, version 20H2 Windows 10 Pro for Workstations, version 20H2

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.

  1. Buka Notepad.

  2. 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

    }

  3. Pada menu File, klik Simpan.

  4. Dalam kotak dialog Simpan Sebagai, temukan folder tempat Anda ingin menyimpan skrip PowerShell.

  5. Dalam kotak Nama file, ketik FixFlacFiles.ps1, ubah kotak Simpan sebagai tipe menjadi Dokumen Teks (*.txt) lalu klik Simpan.

  6. Di Windows Explorer, temukan skrip PowerShell yang Anda simpan.

  7. Klik kanan skrip lalu klik Jalankan dengan PowerShell.

  8. Ketika diminta, ketikkan nama file XML yang tidak dapat ditampilkan, lalu tekan Enter.

Perlu bantuan lainnya?

Ingin opsi lainnya?

Jelajahi manfaat langganan, telusuri kursus pelatihan, pelajari cara mengamankan perangkat Anda, dan banyak lagi.

Komunitas membantu Anda bertanya dan menjawab pertanyaan, memberikan umpan balik, dan mendengar dari para ahli yang memiliki pengetahuan yang luas.