Prisijunkite prie „Microsoft“
Prisijunkite arba sukurkite paskyrą.
Sveiki,
Pasirinkti kitą paskyrą.
Turite kelias paskyras
Pasirinkite paskyrą, kurią naudodami norite prisijungti.

Suvestinė

Šis naujinimas išsprendžia metaduomenų kodavimo problemą, dėl kurios nemokami garso kodeko (FLAC) muzikos failai tampa nepakartoti, jei pakeičiamas jų pavadinimas, atlikėjas ar kiti metaduomenys. 

Priežastis

Ši problema gali kilti, kai FLAC failuose yra ID3 rėmelis prieš FLAC antraštę. ID3 rėmelyje yra metaduomenų, pvz., pavadinimas ir atlikėjas. Flac ypatybių apdorojimo programa padarė prielaidą, kad visi FLAC failai prasidėjo nuo 4 byte pradžios kodo fLaC ir nebuvo atsižvelgta į ID3 kadrą failo pradžioje. Todėl ID3 kadras būtų perrašytas be paleidimo kodo fLaC, kuris neįrašo failo.

Sprendimas

Norėdami išvengti šios problemos būsimuose FLAC muzikos failuose, įdiekite 2021 m. gegužės 25 d. – KB5003214 (OS komponavimo versijos 19041.1013, 19042.1013 ir 19043.1013) Preview.

Norėdami atkurti paveiktus FLAC muzikos failus, vykdykite šį "PowerShell" scenarijų.

Svarbu: Šis scenarijus neatkurs prarastų metaduomenų, saugomų ID3 rėmelyje. Tačiau dėl to failas vėl bus leistinas.

  1. Atidarykite Užrašinė.

  2. Nukopijuokite ir įklijuokite šį scenarijų į užrašinę:

    # Copyright 2021 Microsoft

    # Šis scenarijus pataisys FLAC failą, kurį "Media Foundation" sugadins pagal KB5003430.

    # Daugiau informacijos žr. KB5003430

    param(

    [parametras(Privalomas=$true,

    HelpMessage="Kelias į FLAC failą, kuris buvo sugadintas "Media Foundation",

    ValueFromRemainingArguments=$true)]

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

    [Eilutė]$File

    )

    # Turime sukurti atsarginę dabartinio failo kopiją uždengę klaidas

    $FileDirectory = Split-Path -Resolve $File

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

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

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

    $BackupLocation = Join-Path $FileDirectory $Filename

    Write-Output "Microsoft FLAC Repair Tool" ("Microsoft FLAC" atkūrimo įrankis). Šis įrankis pataisys FLAC garso failą, kuris buvo sugadintas redaguojant jo išsamią informaciją."

    Write-Output "Affected File: $FullPath"

    Write-Output "Bus padaryta failo atsarginė kopija: $BackupLocation"

    Write-Output "Ar norite tęsti?"

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

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

    {

    $blockType = $stream. ReadByte()

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

    $blockType = $blockType juostos 0x7F

    jei ($blockType -ne 0)

    {

    grįžti $false

    }

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

    jei ($blockSize -lt 34)

    {

    grįžti $false

    }

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

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

    jei ($minAudioBlockSize -lt 16 -or $maxAudioBlockSize -lt 16)

    {

    grįž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 baitas[] 16

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

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

    jei ($sampleRate -eq 0)

    {

    grįžti $false

    }

    # Šių patikrų perdavimas reiškia, kad tikriausiai turime srauto informacijos antraštę ir galime atkurti failą

    Write-Output "Failo srauto informacija"

    Write-Output "Sample Rate: $sampleRate"

    Write-Output "Garso kanalai: $channelCount"

    Write-Output "Sample Depth: $bitsPerSample"

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

    grįžti $true

    }

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

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

    # Dabar reikia išsiaiškinti, kur prasideda galiojantis FLAC metaduomenų rėmelis

    # Tikėtina, kad pereisime prie paskutinio dydžio nario baito, kad ieškosime 4 baitų ir bandykite dar kartą

    $flacDataStartPosition = $stream. Pozicija – 4

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

    o (-not(ParseStreamInfoMetadataBlock($stream)))

    {

    $flacDataStartPosition = $flacDataStartPosition + 1

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

    }

    # Pradžios kodo įterpimas

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

    jei (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. Uždaryti()

    $fixedStream.Close()

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

    }

  3. Meniu Failas spustelėkite Įrašyti.

  4. Dialogo lange Įrašyti kaip raskite aplanką, kuriame norite įrašyti "PowerShell" scenarijų.

  5. Lauke Failo vardas įveskiteFixFlacFiles.ps1, pakeiskite lauką Įrašyti kaip tipą į Teksto dokumentai (*.txt), tada spustelėkite Įrašyti.

  6. "Windows Explorer" raskite įrašytą "PowerShell" scenarijų.

  7. Dešiniuoju pelės mygtuku spustelėkite scenarijų, tada spustelėkite Vykdyti naudojant "PowerShell".

  8. Kai būsite paraginti, įveskite nepakartojamo FLAC failo vardą ir paspauskite "Enter".

Reikia daugiau pagalbos?

Norite daugiau parinkčių?

Sužinokite apie prenumeratos pranašumus, peržiūrėkite mokymo kursus, sužinokite, kaip apsaugoti savo įrenginį ir kt.

Bendruomenės padeda užduoti klausimus ir į juos atsakyti, pateikti atsiliepimų ir išgirsti iš ekspertų, turinčių daug žinių.

Ar ši informacija buvo naudinga?

Ar esate patenkinti kalbos kokybe?
Kas turėjo įtakos jūsų įspūdžiams?
Paspaudus mygtuką Pateikti, jūsų atsiliepimai bus naudojami tobulinant „Microsoft“ produktus ir paslaugas. Jūsų IT administratorius galės rinkti šiuos duomenis. Privatumo patvirtinimas.

Dėkojame už jūsų atsiliepimą!

×