Yhteenveto

Tämä päivitys korjaa metatietojen koodausongelman, jonka vuoksi FLAC (Free Lossless Audio Codec) -musiikkitiedostot eivät ole toistamattomia, jos niiden otsikkoa, esittäjää tai muita metatietoja muutetaan. 

Syy

Tämä ongelma saattaa ilmetä, kun FLAC-tiedostoissa on ID3-kehys ennen FLAC-otsikkoa. ID3-kehys sisältää metatietoja, kuten otsikon ja esittäjän. FLAC-ominaisuuskäsittelijä olettaa, että kaikki FLAC-tiedostot aloitettiin 4 tavun aloituskoodilla mutta eivät ottaneet huomioon ID3-kehystä tiedoston alussa. Sen vuoksi ID3-kehys korvattiin ilman, että aloituskoodi hahmonnettiin niin, että tiedostoa ei voi toistaa.

Ratkaisu

Voit estää tämän ongelman tulevissa FLAC-musiikkitiedostoissa asentamalla 25. toukokuuta 2021 – KB5003214 (käyttöjärjestelmän koontiversiot 19041.1013, 19042.1013 ja 19043.1013) Preview.

Jos haluat korjata FLAC-musiikkitiedostot, joita ongelma koskee, suorita seuraava PowerShell-komentosarja.

Tärkeää: Tämä komentosarja ei palauta kadonneet metatiedot, jotka on tallennettu ID3-kehykseen. Se kuitenkin tekee tiedostosta toistettavan uudelleen.

  1. Avaa Muistio.

  2. Kopioi ja liitä seuraava komentosarja muistioon:

    # Copyright 2021 Microsoft

    # Tämä komentosarja korjaa FLAC-tiedoston, jonka Media Foundation on vioittunut KB5003430-viittauksessa.

    # Katso lisätietoja artikkelista KB5003430

    param(

    [parameter(Mandatory=$true,

    HelpMessage="Media Foundationin vioittuneen FLAC-tiedoston polku",

    ValueFromRemainingArguments=$true)]

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

    [Merkkijono]$File

    )

    # Nykyisen tiedoston korjaaminen on varmuuskopioittava, jos virheitä ilmenee

    $FileDirectory = Split-Path -Ratkaise $File

    $Filename = Split-Path -lehti -ratkaise $File

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

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

    $BackupLocation = Join-Path $FileDirectory $Filename

    Write-Output "Microsoft FLAC Repair Tool. Tämä työkalu korjaa FLAC-äänitiedoston, joka vioittui muokattaessa sen tietoja."

    Write-Output "Ongelmallinen tiedosto: $FullPath"

    Write-Output "Tiedostosta tehdään varmuuskopio: $BackupLocation"

    Write-Output "Haluatko jatkaa?"

    $choice=$host.ui.PromptForChoice("Fixing FLAC Script", "Do you wish to continue", ('&Yes', '&No'), 1)

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

    {

    $blockType = $stream. ReadByte()

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

    $blockType = $blockType -band 0x7F

    if ($blockType -ne 0)

    {

    palauta $false

    }

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

    if ($blockSize -lt 34)

    {

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

    {

    palauta $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 tavu[] 16

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

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

    if ($sampleRate -eq 0)

    {

    palauta $false

    }

    # Ohita nämä tarkistukset tarkoittaa, että meillä on todennäköisesti stream info header ja voimme rakentaa tiedoston uudelleen

    Write-Output "Tiedostovirtatiedot"

    Write-Output "Otosnopeus: $sampleRate"

    Write-Output äänikanavat: $channelCount

    Write-Output "Sample Depth: $bitsPerSample"

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

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

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

    # Meidän on nyt selvitettävä, mistä kelvollinen FLAC-metatietokehys alkaa

    # Osoitamme todennäköisesti kokojäsenen viimeistä tavua, joten etsimme neljä tavua ja yritämme uudelleen

    $flacDataStartPosition = $stream. Sijainti – 4

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

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

    {

    $flacDataStartPosition = $flacDataStartPosition + 1

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

    }

    # Lisää aloituskoodi

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

    if (Testipolku "$FullPath.tmp")

    {

    Remove-Item "$FullPath.tmp"

    }

    $fixedStream = [System.IO.File]::Open("$FullPath.tmp", [System.IO.FileMode]::CreateNew)

    [tavu[]]$startCode = [merkki[]]('f', 'L', 'a', 'C');

    $fixedStream.Kirjoitus($startCode, 0, $startCode.Pituus)

    $stream. KopioiTo($fixedStream)

    $stream. Close()

    $fixedStream.Close()

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

    }

  3. Valitse Tiedosto-valikossaTallenna.

  4. Etsi Tallenna nimellä -valintaikkunasta kansio, johon haluat tallentaa PowerShell-komentosarjan.

  5. Kirjoita Tiedostonimi-ruutuunFixFlacFiles.ps1, muuta Tallennusmuoto-ruuduksi Tekstiasiakirjat (*.txt) ja valitse sitten Tallenna.

  6. Etsi Windows Resurssienhallinnassa PowerShell-komentosarja, jonka tallensit.

  7. Napsauta komentosarjaa hiiren kakkospainikkeella ja valitse suorita PowerShellin avulla.

  8. Kirjoita pyydettäessä toistamattoman FLAC-tiedoston tiedostonimi ja paina sitten Enter-näppäintä.

Tarvitsetko lisäohjeita?

Kehitä taitojasi
Tutustu koulutusmateriaaliin
Saat uudet ominaisuudet ensimmäisten joukossa
Liity Microsoft Insider-käyttäjille

Oliko näistä tiedoista hyötyä?

Kuinka tyytyväinen olet käännöksen laatuun?
Mikä vaikutti kokemukseesi?

Kiitos palautteesta!

×