Перейти к основному контенту
Поддержка
Войдите с помощью учетной записи Майкрософт
Войдите или создайте учетную запись.
Здравствуйте,
Выберите другую учетную запись.
У вас несколько учетных записей
Выберите учетную запись, с помощью которой нужно войти.

Аннотация

Это обновление адресована проблема с кодированием метаданных, из-за которой музыкальные файлы free Lossless Audio Codec (FLAC) становятся недоступными при смене их названия, исполнителя или других метаданных. 

Причина

Эта проблема может возникать, если ВК-файлы содержат рамку ID3 перед заглавным флажком. Рамка ID3 содержит метаданные, такие как название и исполнителя. Обработец свойств FLAC предполагает, что все flaC-файлы начинаются с 4-byte start code fLaC и не учитывают фрейм ID3 в начале файла. Таким образом, рамка ID3 будет перезаписана без запуска кода fLaC, из-за чего файл будет недозаписан.

Решение

Чтобы предотвратить эту проблему для будущих музыкальных файлов FLAC, установите предварительную версию от 25 мая 2021 г. — KB5003214 (сборки ОС 19041.1013, 19042.1013 и 19043.1013).

Чтобы восстановить затронутые музыкальные файлы FLAC, запустите следующий сценарий PowerShell:

Важно: Этот сценарий не восстановит потерянные метаданные, хранимые в рамке ID3. Однако при этом файл можно будет снова проиграть.

  1. Откройте приложение «Блокнот».

  2. Скопируйте и вкопируйте следующий сценарий в блокнот:

    # (Майкрософт) 2021

    # Этот сценарий будет восстанавливать FLAC-файл, поврежденный media Foundation со ссылкой на KB5003430.

    # Дополнительные сведения можно найти в KB5003430

    параметр(

    [parameter(Mandatory=$true,

    HelpMessage="Путь к файлу FLAC, который был поврежден media Foundation",

    ValueFromRemainingArguments=$true)]

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

    [String]$File

    )

    # Нам нужно сделать архивную хранимую текущую папку с файлом, у нас есть ошибки

    $FileDirectory = Split-Path -Разрешить $File

    $Filename = Split-Path -Лист -Разрешить $File

    $FullPath = Join-Path -Разрешить $FileDirectory $Filename

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

    $BackupLocation = Join-Path $FileDirectory $Filename

    Write-Output "Средство восстановления флажков (Майкрософт). Это средство восстановление звукового файла FLAC, который был поврежден при редактировании сведений".

    Write-Output "Затронутый файл: $FullPath"

    Write-Output "Будет выполнена резервная копия файла: $BackupLocation"

    Write-Output "Вы хотите продолжить?"

    $choice=$host.ui.PromptForChoice("Исправление сценария FLAC", "Вы хотите продолжить", ('&Да', '&Нет'), 1)

    функция ParseStreamInfoMetadataBlock([System.IO.FileStream]$stream)

    {

    $blockType = $stream. ReadByte()

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

    $blockType = $blockType -band 0x7F

    если ($blockType -ne 0)

    {

    возврат $false

    }

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

    if ($blockSize -lt 34)

    {

    возврат $false

    }

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

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

    если ($minAudioBlockSize -lt 16 -или $maxAudioBlockSize -lt 16)

    {

    возврат $false

    }

    $minFrameSize = (($stream. ReadByte() -shl 16) -hl ($stream. ReadByte() -shl 8) -$stream. ReadByte())

    $maxFrameSize = (($stream. ReadByte() -shl 16) -hl ($stream. ReadByte() -shl 8) -$stream. ReadByte())

    $sampleInfo = (($stream. ReadByte() -shl 24) -hl ($stream. ReadByte() -shl 16) -hl ($stream. ReadByte() -shl 8) -$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) -hl ($stream. ReadByte() -shl 16) -hl ($stream. ReadByte() -shl 8) -$stream. ReadByte())

    $sampleCount = (([UInt64]$sampleInfo -band 0xF) -shl 32) -hl $sampleCount

    $MD 5HashBytes = New-Object byte[] 16

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

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

    if ($sampleRate -eq 0)

    {

    возврат $false

    }

    # Прохождение этих проверок означает, что, скорее всего, у нас есть заглавная информация о потоке и мы можем перестроить файл

    Write-Output "Сведения о потоке файлов"

    Write-Output "Пример ставки: $sampleRate"

    Write-Output "Аудиоканалы: $channelCount"

    Write-Output "Пример глубины: $bitsPerSample"

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

    возврат $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)

    пока ($stream. ReadByte() -eq 0) {}

    # Теперь нужно выяснить, где начинается допустимый фрейм метаданных FLAC

    # Скорее всего, мы указываем на последний byte члена размера, поэтому отберем 4 и еще раз поищем

    $flacDataStartPosition = $stream. Положение — 4

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

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

    {

    $flacDataStartPosition = $flacDataStartPosition + 1

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

    }

    # Вставьте исходный код

    $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. В меню Файл выберите команду Сохранить.

  4. В диалоговом окне Сохранить как найдите папку, в которой вы хотите сохранить сценарий PowerShell.

  5. В поле Имя файла введите FixFlacFiles.ps1, измените поле Тип файла на Текстовые документы (*.txt) и нажмите кнопку Сохранить.

  6. В Windows проводнике найдите сохраненный сценарий PowerShell.

  7. Щелкните сценарий правой кнопкой мыши и выберите выполнить с помощью PowerShell.

  8. При вводе запроса введите имя файла, который не будет виден для воспроизведения, и нажмите ввод.

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?
После нажатия кнопки "Отправить" ваш отзыв будет использован для улучшения продуктов и служб Майкрософт. Эти данные будут доступны для сбора ИТ-администратору. Заявление о конфиденциальности.

Спасибо за ваш отзыв!

×