Prihláste sa s kontom Microsoft
Prihláste sa alebo si vytvorte konto.
Dobrý deň,
Vyberte iné konto.
Máte viacero kont
Vyberte konto, s ktorým sa chcete prihlásiť.

Súhrn

Táto aktualizácia sa týka problému s kódovaním metaúdajov, ktorý spôsobuje, že hudobné súbory Free Lossless Audio Codec (FLAC) sa stanú neprehrateľnými v prípade zmeny ich názvu, interpreta alebo iných metaúdajov. 

Príčina

Tento problém sa môže vyskytnúť, keď súbory FLAC obsahujú rám ID3 pred hlavičkou FLAC. Rám ID3 obsahuje metaúdaje, ako napríklad názov a umelec. Obslužný program vlastnosti FLAC predpokladal, že všetky súbory FLAC sa začali kódom začiatku 4 bajtov fLaC a neberú do úvahy rám ID3 na začiatku súboru. Z tohto dôvodu sa rám ID3 prepíše bez prehrateho kódu začiatku, pri vykresľovaní súboru nie je možné prehrať.

Riešenie

Ak chcete zabrániť tomuto problému v budúcich hudobných súboroch FLAC, nainštalujte 25. mája 2021 – KB5003214 (zostavy OS 19041.1013, 19042.1013 a 19043.1013) Preview.

Ak chcete opraviť hudobné súbory FLAC, ktorých sa týka, spustite nasledujúci skript prostredia PowerShell.

Dôležité: Tento skript obnoví stratené metaúdaje, ktoré boli uložené v ráme ID3. Tým sa však súbor znova prehrá.

  1. Otvorte program Poznámkový blok.

  2. Skopírujte a prilepte nasledujúci skript do poznámkového bloku:

    # Autorské práva 2021 Microsoft

    # Tento skript opraví súbor FLAC, ktorý je poškodený program Media Foundation, s odkazom na KB5003430.

    # Ďalšie informácie nájdete v téme KB5003430

    param(

    [parameter(Povinné=$true;

    HelpMessage="Cesta k súboru FLAC, ktorý je poškodený aplikáciou Media Foundation",

    ValueFromRemainingArguments=$true)]

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

    [Reťazec]$File

    )

    # Musíme zálohovať aktuálny súbor pre všetky chyby

    $FileDirectory = Split-Path – vyriešiť $File

    $Filename = Split-Path -Listové riešenie $File

    $FullPath = Join-Path – vyriešiť $FileDirectory $Filename

    $Filename = [Reťazec]::Format("Backup_{0:yyyyMMdd_hhmmss}_{1}", [DátumAČas]::Teraz, $Filename)

    $BackupLocation = Join-Path $FileDirectory $Filename

    Write-Output "Microsoft FLAC Repair Tool. Tento nástroj opraví zvukový súbor FLAC, ktorý bol poškodený pri úprave jeho podrobností.

    Write-Output "Ovplyvnený súbor: $FullPath"

    Write-Output Sa vytvorí záloha súboru: $BackupLocation.

    Write-Output "Chcete pokračovať?"

    $choice=$host.ui.PromptForChoice("Fixing FLAC Script", "Do you wish to continue" (Chcete pokračovať?), ('&Áno', '&Nie'), 1)

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

    {

    $blockType = $stream. ReadByte()

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

    $blockType = $blockType -band 0x7F

    if ($blockType -ne 0)

    {

    vrátiť $false

    }

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

    if ($blockSize -lt 34)

    {

    vrátiť $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)

    {

    vrátiť $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átiť $false

    }

    # Prenesenie týchto kontrol znamená, že pravdepodobne máme hlavičku s informáciami o streame a môžeme opätovne zostaviť súbor

    Write-Output Informácie o streame súboru

    Write-Output "Vzorová sadzba: $sampleRate"

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

    Write-Output Ukážková hĺbka: $bitsPerSample

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

    vrátiť $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)

    zatiaľ čo ($stream. ReadByte() -eq 0) {}

    # Teraz musíme zistiť, kde sa začína platný rám metaúdajov FLAC

    # Pravdepodobne ukazovame na posledný bajt člena veľkosti, aby sme vrátili 4 bajty a zopakovali pokusy

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

    }

    # Vloženie kódu začatia

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

    if (Testovacia cesta "$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.Dĺžka)

    $stream. CopyTo($fixedStream)

    $stream. Close()

    $fixedStream.Close()

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

    }

  3. V ponuke Súbor kliknite na položku Uložiť.

  4. V dialógovom okne Uložiť ako vyhľadajte priečinok, do ktorého chcete uložiť skript prostredia PowerShell.

  5. Do poľa Názov súboru zadajte text FixFlacFiles.ps1 , zmeňte pole Uložiť vo formáte na Textové dokumenty (*.txt) a potom kliknite na tlačidlo Uložiť.

  6. V Windows Prieskumníkovi vyhľadajte skript prostredia PowerShell, ktorý ste uložili.

  7. Kliknite pravým tlačidlom myši na skript a potom kliknite na položku Spustiť pomocou prostredia PowerShell.

  8. Po zobrazení výzvy zadajte názov súboru, ktorý nie je možné prehrať, a stlačte kláves Enter.

Potrebujete ďalšiu pomoc?

Chcete ďalšie možnosti?

Môžete preskúmať výhody predplatného, prehľadávať školiace kurzy, naučiť sa zabezpečiť svoje zariadenie a ešte oveľa viac.

Komunity pomôžu s kladením otázok a odpovedaním na ne, s poskytovaním pripomienok a so získavaním informácií od odborníkov s bohatými znalosťami.

Boli tieto informácie užitočné?

Aká je podľa vás jazyková kvalita textu?
Čo sa vám páčilo, prípadne čo nie?
Stlačením tlačidla Odoslať sa vaše pripomienky použijú na zlepšenie produktov a služieb spoločnosti Microsoft. Váš správca IT bude môcť tieto údaje zhromažďovať. Vyhlásenie o ochrane osobných údajov.

Ďakujeme za vaše pripomienky!

×