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

Özet

Bu güncelleştirme, Ücretsiz Kayıpsız Ses Codec Bileşeni (FLAC) müzik dosyalarının başlığı, sanatçı veya diğer meta verileri değiştirilirse oynatılamaz hale dönüşen meta veri kodlama sorununa neden olan bir meta veri kodlama sorununa yöneliktir. 

Neden

Bu sorun, FLAC dosyaları FLAC üst bilgiden önce bir ID3 çerçevesi içeriyorsa oluşabilir. ID3 çerçevesi başlık ve sanatçı gibi meta veriler içerir. FLAC özellik işleyicisi, tüm FLAC dosyalarının 4 bayte başlangıç kodu fLaC ile başladığı varsayılır ve dosyanın başındaki ID3 çerçevesini dikkate almaz. Bu nedenle, fLaC başlatma kodu dosyayı oynatılamaz olarak oluşturmadan ID3 çerçevesinin üzerine yazılır.

Çözüm

Gelecekte FLAC müzik dosyalarında bu sorunu önlemek için 25 Mayıs 2021—KB5003214 (19041.1013, 19042.1013 ve 19043.1013 işletim sistemi derlemeleri) Preview'ıyükleyin.

Etkilenen FLAC müzik dosyalarını onarmak için aşağıdaki PowerShell betiği çalıştırın.

Önemli: Bu betik, ID3 çerçevesinde depolanan kayıp meta verileri geri yüklemez. Ancak bu dosya yeniden oynatılabilir hale geliyor.

  1. Not Defteri'ni açın.

  2. Aşağıdaki betiği kopyalayıp not defterine yapıştırın:

    # Telif Hakkı 2021 Microsoft

    # Bu betik, KB5003430'a başvuru olarak Media Foundation tarafından bozulan bir FLAC dosyasını onarır.

    # Daha fazla bilgi için KB5003430

    param(

    [parameter(Mandatory=$true,

    HelpMessage="Media Foundation tarafından bozuk olan FLAC dosyasının yolu",

    ValueFromRemainingArguments=$true)]

    [ValidateScript({ -not [Dize]::IsNullOrEmpty($_) -and (Test-Yol $_) })]

    [Dize]$File

    )

    # Herhangi bir hatamız olduğu için geçerli dosyayı bir şekilde ihtiyacımız var

    $FileDirectory = Split-Path -Resolve $File

    $Filename = Split-Path -Yaprak -Çözümle $File

    $FullPath = Join-Path -Resolve $FileDirectory $Filename

    $Filename = [Dize]::Biçim("Backup_{0:yyyyMMdd_hhmmss}_{1}", [DateTime]::Now, $Filename)

    $BackupLocation = Join-Path $FileDirectory $Filename

    Write-Output "Microsoft FLAC Onarım Aracı. Bu araç, ayrıntılarını düzenlerken bozulan bir FLAC ses dosyasını onarır."

    Write-Output "Etkilenen Dosya: $FullPath"

    Write-Output "Dosyanın yedeği yapılacak: Yer aç" $BackupLocation

    Write-Output "Devam etmek mi istediğiniz?" sorusunu yanıtla

    $choice=$host.ui.PromptForChoice("FLAC Betiği Düzeltme", "Devam etmek mi &", ('&', '&Hayır'), 1)

    işlev 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 - veya $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 bayt[] 16

    $stream. Read($MD 5HashBytes, 0, $MD 5HashBytes.Length)

    $MD 5Hash = [Guid]($MD 5HashBytes)

    if ($sampleRate -eq 0)

    {

    return $false

    }

    # Bu denetimleri geçmek büyük olasılıkla bir akış bilgi başlığımız olduğu ve dosyayı yeniden oluşturabileceğimizi anlamına gelir

    Write-Output Akışı Bilgileri"

    Write-Output "Örnek Oran: $sampleRate"

    Write-Output "Ses Kanalları: Ses $channelCount"

    Write-Output "Örnek Derinlik: $bitsPerSample"

    Write-Output "MD5 Ses Örnek Karma: $MD 5Hash"

    geri $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)

    ($stream. ReadByte() -eq 0) {}

    # Artık geçerli bir FLAC meta veri çerçevesinin nereden başladığını anlamamız gerekiyor

    # Büyük olasılıkla boyut üyesinin son bayt'unu işaret ediyor ve bu nedenle 4 bayt geri dönüp yeniden deneyin

    $flacDataStartPosition = $stream. Konum - 4

    $stream. Seek($flacDataStartPosition, [System.IO.SeekOrigin]::Begin)

    while (-not(ParseStreamInfoMetadataBlock($stream))

    {

    $flacDataStartPosition = $flacDataStartPosition + 1

    $stream. Seek($flacDataStartPosition, [System.IO.SeekOrigin]::Begin)

    }

    # Başlangıç kodunu girin

    $stream. Seek($flacDataStartPosition, [System.IO.SeekOrigin]::Begin)

    if (Test-Yolu "$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. Dosya menüsünde Kaydet'etıklayın.

  4. Farklı Kaydet iletişim kutusunda, PowerShell betiklerini kaydetmek istediğiniz klasörü bulun.

  5. Dosya adı kutusuna, Dosya adı FixFlacFiles.ps1yazın, Farklı kaydet kutusunu Metin Belgeleri (*.txt) olarak yazın ve Kaydet'e tıklayın.

  6. Windows Explorer'da, kayıtlı powershell betiği bulun.

  7. Betike sağ tıklayın ve ardından PowerShell ile Çalıştır'a tıklayın.

  8. Sorulsa, oynatılamaz FLAC dosyasının dosya adını yazın ve Enter tuşuna basın.

Daha fazla yardıma mı ihtiyacınız var?

Daha fazla seçenek mi istiyorsunuz?

Abonelik avantajlarını keşfedin, eğitim kurslarına göz atın, cihazınızın güvenliğini nasıl sağlayacağınızı öğrenin ve daha fazlasını yapın.

Topluluklar, soru sormanıza ve soruları yanıtlamanıza, geri bildirimde bulunmanıza ve zengin bilgiye sahip uzmanlardan bilgi almanıza yardımcı olur.