Iniciar sesión con Microsoft
Iniciar sesión o crear una cuenta
Hola:
Seleccione una cuenta diferente.
Tiene varias cuentas
Elija la cuenta con la que desea iniciar sesión.

Resumen

Esta actualización soluciona un problema de codificación de metadatos que hace que los archivos de música de Códec de audio sin pérdida (FLAC) no se pueden reproducir si se cambia su título, artista u otros metadatos. 

Causa

Este problema puede ocurrir cuando los archivos FLAC contienen un marco ID3 antes del encabezado FLAC. El marco ID3 contiene metadatos como título y artista. El controlador de propiedades FLAC supuso que todos los archivos FLAC se iniciaron con el código de inicio de 4 bytes fLaC y no tuvo en cuenta el marco ID3 al principio del archivo. Por lo tanto, el marco ID3 se sobrescribiría sin el código de inicio fLaC que hace que el archivo no se pueda jugar.

Resolución

Para evitar este problema para futuros archivos de música FLAC, instale la versión preliminar del 25 de mayo de 2021: KB5003214 (compilaciones del sistema operativo 19041.1013, 19042.1013 y 19043.1013).

Para reparar los archivos de música FLAC afectados, ejecute el siguiente script de PowerShell.

Importante: Este script no restaurará los metadatos perdidos almacenados en el marco ID3. Sin embargo, hace que el archivo se vuelva a reproducir.

  1. Abra el Bloc de notas.

  2. Copie y pegue el siguiente script en el bloc de notas:

    # Copyright 2021 Microsoft

    # Este script reparará un archivo FLAC dañado por Media Foundation en referencia a KB5003430.

    # Consulte KB5003430 para obtener más información

    param(

    [parámetro(Obligatorio=$true,

    HelpMessage="La ruta de acceso al archivo FLAC que ha sido dañada por Media Foundation",

    ValueFromRemainingArguments=$true)]

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

    [String]$File

    )

    # Tenemos que hacer una copia de seguridad del archivo actual en caso de que haya errores

    $FileDirectory = Split-Path -Resolver $File

    $Filename = Split-Path -Hoja -Resolver $File

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

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

    $BackupLocation = Join-Path $FileDirectory $Filename

    Write-Output "Herramienta de reparación DE MICROSOFT FLAC. Esta herramienta reparará un archivo de audio FLAC que se ha dañado al editar sus detalles".

    Write-Output "Archivo afectado: $FullPath"

    Write-Output "Se realizará una copia de seguridad del archivo: $BackupLocation"

    Write-Output "¿Desea continuar?"

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

    función ParseStreamInfoMetadataBlock([System.IO.FileStream]$stream)

    {

    $blockType = $stream. ReadByte()

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

    $blockType = $blockType -band 0x7F

    si ($blockType -ne 0)

    {

    devolver $false

    }

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

    si ($blockSize -lt 34)

    {

    devolver $false

    }

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

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

    si ($minAudioBlockSize -lt 16 -o $maxAudioBlockSize -lt 16)

    {

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

    si ($sampleRate -eq 0)

    {

    devolver $false

    }

    # Pasar estas comprobaciones significa que es probable que disponen de un encabezado de información de transmisión y que podemos reconstruir el archivo

    Write-Output "Información de transmisión de archivos"

    Write-Output "Tasa de muestra: $sampleRate"

    Write-Output "Canales de audio: $channelCount"

    Write-Output "Profundidad de muestra: $bitsPerSample"

    Write-Output "Hash de muestra de audio MD5: $MD 5Hash"

    devolver $true

    }

    si ($choice -eq 0)

    {

    Copy-Item $FullPath -Destination $BackupLocation -Force

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

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

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

    # Ahora tenemos que averiguar dónde comienza un marco de metadatos FLAC válido

    # Es probable que apuntemos al último byte del miembro de tamaño, por lo que volveremos a buscar 4 bytes y volveremos a intentar

    $flacDataStartPosition = $stream. Posición: 4

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

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

    {

    $flacDataStartPosition = $flacDataStartPosition + 1

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

    }

    # Insertar el código de inicio

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

    si (Ruta de acceso de prueba "$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. Cerrar()

    $fixedStream.Close()

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

    }

  3. En el menú Archivo haga clic en Guardar.

  4. En el cuadro de diálogo Guardar como, busque la carpeta en la que desea guardar el script de PowerShell.

  5. En el cuadro Nombre de archivo, escriba FixFlacFiles.ps1, cambie el cuadro Guardar como tipo a Documentos de texto (*.txt) y, a continuación, haga clic en Guardar.

  6. En Windows Explorador, busque el script de PowerShell que guardó.

  7. Haga clic con el botón derecho en el script y, a continuación, haga clic en Ejecutar con PowerShell.

  8. Cuando se le solicite, escriba el nombre de archivo del archivo FLAC que no se puede jugar y, después, presione Entrar.

¿Necesita más ayuda?

¿Quiere más opciones?

Explore las ventajas de las suscripciones, examine los cursos de aprendizaje, aprenda a proteger su dispositivo y mucho más.

Las comunidades le ayudan a formular y responder preguntas, enviar comentarios y leer a expertos con conocimientos extensos.

¿Le ha sido útil esta información?

¿Cuál es tu grado de satisfacción con la calidad del lenguaje?
¿Qué ha afectado a su experiencia?
Si presiona Enviar, sus comentarios se usarán para mejorar los productos y servicios de Microsoft. El administrador de TI podrá recopilar estos datos. Declaración de privacidad.

¡Gracias por sus comentarios!

×