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

Rezime

Ova ispravka rešava problem sa kodingom metapodataka koji izaziva da muzičke datoteke bez gubitka (FLAC) postanu neupotrebljive ako se promene njihov naslov, izvođač ili drugi metapodaci. 

Uzrok

Do ovog problema može doći kada FLAC datoteke sadrže ID3 okvir pre zaglavlja FLAC. Okvir ID3 sadrži metapodatake kao što su naslov i izvođači. Rukovalac svojstvom FLAC pretpostavio je da su sve FLAC datoteke započete pomoću početnog koda od 4 bajta fLaC i da nisu uzimale u obzir okvir ID3 na početku datoteke. Stoga, ID3 okvir bi bio zamenen bez početnog koda fLaC-a koji ne može da se igra.

Rezolucija

Da biste sprečili ovaj problem za buduće flaC muzičke datoteke, instalirajte 25. maj 2021. – KB5003214 (izdanja operativnog sistema 19041.1013, 19042.1013 i 19043.1013) Preview.

Da biste popravili FLAC muzičke datoteke, pokrenite sledeću PowerShell skriptu.

Važno: Ova skripta neće vratiti izgubljene metapodatake uskladištene u ID3 okviru. Međutim, to ponovo čini da datoteka može da se reprodukuje.

  1. Otvorite Beležnica.

  2. Kopirajte i nalepite sledeću skriptu u beležnicu:

    # Copyright 2021 Microsoft

    # Ova skripta će popraviti FLAC datoteku koju je media Foundation oštećen u referenci za KB5003430.

    # Pogledajte KB5003430 da biste dobili dodatne informacije

    param(

    [parameter(Obavezno=$true,

    HelpMessage="Putanja do FLAC datoteke koju je oštećeno u programu Media Foundation",

    ValueFromRemainingArguments=$true)]

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

    [Niska]$File

    )

    # Moramo da vratimo trenutnu inkasu datoteci bez grešaka.

    $FileDirectory = Split-Path -Reši $File

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

    $FullPath = Join-Path -Reši $FileDirectory $Filename

    $Filename = [Niska]::Format("Backup_{0:yyyyMMdd_hhmmss}_{1}", [DateTime]::Now, $Filename)

    $BackupLocation = Join-Path $FileDirectory $Filename

    Write-Output "Microsoft FLAC alatka za popravku. Ova alatka popravlja AUDIO datoteku FLAC koja je oštećena prilikom uređivanja detalja."

    Write-Output "Datoteka na koju ovo utiče: $FullPath"

    Write-Output "Pravi se rezervna kopija datoteke: $BackupLocation"

    Write-Output "Želite li da nastavite?"

    $choice=$host.ui.PromptForChoice("Popravljanje FLAC skripte", "Želite li da nastavite", ('&Da', '&Ne'), 1)

    funkcija 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 -or $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

    }

    # Ako prođete ove provere, to znači da verovatno imamo zaglavlje sa informacijama o toku i da možemo da obnovimo datoteku

    Write-Output "Informacije o toku datoteke"

    Write-Output "Uzorak stope: $sampleRate"

    Write-Output "Audio Channels: $channelCount"

    Write-Output "Dubina uzorka: $bitsPerSample"

    Write-Output "MD5 hash: $MD 5Hash"

    return $true

    }

    if ($choice -eq 0)

    {

    Copy-Item $FullPath -odredište $BackupLocation -Sila

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

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

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

    # Sada treba da otkrijemo gde počinje važeći okvir FLAC metapodataka

    # Verovatno upućivamo na poslednji bajt veličine člana tako da ćemo potražiti 4 bajta i ponovo potražiti

    $flacDataStartPosition = $stream. Pozicija - 4

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

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

    {

    $flacDataStartPosition = $flacDataStartPosition + 1

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

    }

    # Umetanje početnog koda

    $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. U meniju Datoteka izaberite stavku Sačuvaj.

  4. U dijalogu Sačuvaj kao pronađite fasciklu u kojoj želite da sačuvate PowerShell skriptu.

  5. U polju Ime datoteke otkucajte FixFlacFiles.ps1 i promenite polje Sačuvaj kao tip u Tekstualni dokumenti (*.txt), a zatim kliknite na dugme Sačuvaj.

  6. U Windows pronađite Sačuvanu PowerShell skriptu.

  7. Kliknite desnim tasterom miša na skriptu i izaberite stavku Pokreni sa programom PowerShell.

  8. Kada se to od vas zatraži, otkucajte ime datoteke koja nije reprodukcija FLAC datoteka, a zatim pritisnite taster Enter.

Da li vam je potrebna dodatna pomoć?

Želite još opcija?

Istražite pogodnosti pretplate, pregledajte kurseve za obuku, saznajte kako da obezbedite uređaj i još mnogo toga.

Zajednice vam pomažu da postavljate pitanja i odgovarate na pitanja, dajete povratne informacije i čujete mišljenje od stručnjaka sa bogatim znanjem.