Přihlásit se pomocí účtu Microsoft
Přihlaste se nebo si vytvořte účet.
Dobrý den! Zdravíme uživatele
Select a different account.
Máte více účtů.
Zvolte účet, pomocí kterého se chcete přihlásit.

Shrnutí

Tato aktualizace řeší problém s kódováním metadat, který způsobuje, že hudební soubory free lossless audio codec (FLAC) se nehrají, pokud se změní jejich název, interpret nebo jiná metadata. 

Příčina

K tomuto problému může dojít, když soubory FLAC obsahují rámeček ID3 před záhlavím FLAC. Rámeček ID3 obsahuje metadata, jako je název a interpret. Obslužná rutina vlastnosti FLAC předpokládá, že všechny soubory FLAC začaly se 4 byte počátečním kódem fLaC a nezohlední rámec ID3 na začátku souboru. Proto by se rámec ID3 přepsal bez počátečního kódu fLaC, který by soubor přehrál.

Řešení

Abyste tomuto problému zabránili u budoucích hudebních souborů FLAC, nainstalujte si 25. května 2021 – KB5003214 (buildy operačního systému 19041.1013, 19042.1013 a 19043.1013) Preview.

Pokud chcete opravit ovlivněné hudební soubory FLAC, spusťte následující skript PowerShellu.

Důležité informace: Tento skript obnoví ztracená metadata uložená v rámci ID3. Soubor ale bude znovu možné přehrát.

  1. Otevřete Poznámkový blok.

  2. Zkopírujte a vložte následující skript do poznámkového bloku:

    # Copyright 2021 Microsoft

    # Tento skript opraví soubor FLAC, který je v odkazu na KB5003430 poškozený společností Media Foundation.

    # Další informace najdete v článku KB5003430.

    param(

    [parameter(Mandatory=$true;

    HelpMessage="Cesta k souboru FLAC, který je poškozený pomocí Media Foundation",

    ValueFromRemainingArguments=$true)]

    [ValidateScript({ -not [String]::IsNullOrEmpty($_) -and (Test-Path $_) })]

    [String]$File

    )

    # Musíme zálohovat aktuální soubor v případě, že máme nějaké chyby.

    $FileDirectory = Split-Path -Vyřešit $File

    $Filename = Split-Path -Leaf -Resolve $File

    $FullPath = Join-Path -Vyřešit $FileDirectory $Filename

    $Filename = [String]::Format("Backup_{0:yyyyMMdd_hhmmss}_{1}", [Datum a čas]::Teď, $Filename)

    $BackupLocation = Join-Path $FileDirectory $Filename

    Write-Output "Nástroj pro opravu Microsoft FLAC. Tento nástroj opraví zvukový soubor FLAC, který byl při úpravách jeho podrobností poškozený."

    Write-Output "Ovlivněný soubor: $FullPath"

    Write-Output "Bude provedena záloha souboru: $BackupLocation"

    Write-Output "Chcete pokračovat?"

    $choice=$host.ui.PromptForChoice("Oprava skriptu FLAC", "Chcete pokračovat", ('&Ano', '&Ne'), 1)

    funkce ParseStreamInfoMetadataBlock([System.IO.FileStream]$stream)

    {

    $blockType = $stream. ReadByte()

    $lastBlock = ($blockType -shr 7) -ne 0

    $blockType = $blockType -band 0x7F

    if ($blockType -ne 0)

    {

    vrátit $false

    }

    $blockSize = (($stream. ReadByte() -shl 16) -bor ($stream. ReadByte() -shl 8) -bor $stream. ReadByte())

    if ($blockSize -lt 34)

    {

    vrátit $false

    }

    $minAudioBlockSize = ($stream. ReadByte() -shl 8) -bor $stream. ReadByte()

    $maxAudioBlockSize = ($stream. ReadByte() -shl 8) -bor $stream. ReadByte()

    if ($minAudioBlockSize -lt 16 - nebo $maxAudioBlockSize -lt 16)

    {

    vrátit $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 bajt[] 16

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

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

    if ($sampleRate -eq 0)

    {

    vrátit $false

    }

    # Předání těchto kontrol znamená, že pravděpodobně máme záhlaví s informacemi o datovém proudu a můžeme soubor znovu sestavit.

    Write-Output "File Stream Information" (Informace o datovém proudu souborů)

    Write-Output "Vzorkovací frekvence: $sampleRate"

    Write-Output "Zvukové kanály: $channelCount"

    Write-Output "Ukázka hloubky: $bitsPerSample"

    Write-Output "MD5 Audio Sample Hash: $MD 5Hash"

    vrátit $true

    }

    if ($choice -eq 0)

    {

    Copy-Item $FullPath -Destination $BackupLocation -Force

    $stream = [System.IO.File]::Open($FullPath; [System.IO.FileMode]::Open)

    $stream. Hledání(4, [System.IO.SeekOrigin]::Begin)

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

    # Teď musíme zjistit, kde začíná platný rámec metadat FLAC.

    # Pravděpodobně nasedáme na poslední bajt člena velikosti, takže vyhledáme 4 bajty a zopakujeme to

    $flacDataStartPosition = $stream. Pozice – 4

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

    while (-not(ParseStreamInfoMetadataBlock($stream)))

    {

    $flacDataStartPosition = $flacDataStartPosition + 1

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

    }

    # Vložení počátečního kódu

    $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. Zavřít()

    $fixedStream.Close()

    Move-Item -Force "$FullPath.tmp" $FullPath

    }

  3. V nabídce Soubor klikněte na Uložit.

  4. V dialogovém okně Uložit jako vyhledejte složku, do které chcete uložit skript PowerShellu.

  5. Do pole Název souboru zadejte FixFlacFiles.ps1, změňte pole Uložit jako typ na Textové dokumenty (*.txt) a potom klikněte na Uložit.

  6. V Windows Exploreru najděte skript PowerShellu, který jste uložili.

  7. Klikněte pravým tlačítkem myši na skript a potom klikněte na Spustit s PowerShellem.

  8. Po zobrazení výzvy zadejte název souboru souboru FLAC, který se nehraje, a stiskněte Enter.

Potřebujete další pomoc?

Rozšiřte své znalosti a dovednosti

Projít školení >

Získejte nové funkce jako první

ZAPOJTE SE DO PROGRAMU MICROSOFT 365 INSIDER

Byly tyto informace užitečné?

Jak jste spokojeni s kvalitou jazyka?
Co ovlivnilo váš názor?

Děkujeme vám za zpětnou vazbu.

×