tengo este problema, debería que el usuario no necesita estar autenticado para cargar el audio,

wavejs.js?ver=2.0.12.1957520211:24  Error al cargar el audio: Error: Network response was not ok
    at wavejs.js?ver=2.0.12.1957520211:7:19
(anónimo) @ wavejs.js?ver=2.0.12.1957520211:24
Promise.catch
window.loadAudio @ wavejs.js?ver=2.0.12.1957520211:24
(anónimo) @ (índice):6090
wavejs.js?ver=2.0.12.1957520211:2 
        
        
        GET https://2upra.com/wp-json/custom/v1/get-audio?audio_id=232027 401 (Unauthorized)

el script

window.loadAudio = function(postId, audioUrl) {
    fetch(audioUrl, {
        credentials: 'include'  // Incluir las cookies de sesión en la solicitud
    })
    .then(response => {
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        return response.blob(); // Convertir el audio en un Blob
    })
    .then(blob => {
        const audioUrl = URL.createObjectURL(blob); // Crear una URL de objeto para el Blob
        const container = document.getElementById(`waveform-${postId}`);
        const wavesurfer = WaveSurfer.create({
            container: container,
            waveColor: '#D9DCFF',
            progressColor: '#4353FF',
            backend: 'MediaElement',
            barWidth: 3,
            height: 128,
        });
        wavesurfer.load(audioUrl); // Cargar la URL del Blob en WaveSurfer
    })
    .catch(error => console.error('Error al cargar el audio:', error));
};

php

// Función para obtener la URL segura del audio
function get_secure_audio_url($audio_id)
{
    return site_url('/wp-json/custom/v1/get-audio?audio_id=' . urlencode($audio_id));
}

// Registro del endpoint REST
add_action('rest_api_init', function () {
    register_rest_route('custom/v1', '/get-audio', array(
        'methods' => 'GET',
        'callback' => 'serve_audio_endpoint',
        'args' => array(
            'audio_id' => array(
                'required' => true,
                'validate_callback' => function ($param) {
                    return is_numeric($param);
                }
            ),
        ),
        'permission_callback' => function() {
            // Verificar que el usuario está logeado
            if (is_user_logged_in()) {
                return true;
            } else {
                // Retorna error 401 si el usuario no está logeado
                return new WP_Error('rest_forbidden', 'Necesitas estar logeado para acceder a este recurso.', array('status' => 401));
            }
        }
    ));
});

// Función para servir el audio de manera segura
function serve_audio_endpoint($data)
{
    $audio_id = $data['audio_id'];
    $audio_url = wp_get_attachment_url($audio_id);

    // Verificar que el archivo existe y es accesible
    if ($audio_url && file_exists(get_attached_file($audio_id))) {

        // Evitar la cacheación del archivo de audio
        header('Cache-Control: no-store, no-cache, must-revalidate');
        header('Pragma: no-cache');
        header('Expires: 0');
        
        // Configurar encabezados para la descarga del archivo
        header('Content-Type: ' . get_post_mime_type($audio_id));
        header('Content-Disposition: inline; filename="' . basename($audio_url) . '"');

        // Leer y enviar el archivo al cliente
        readfile(get_attached_file($audio_id));
        exit;
    } else {
        return new WP_Error('no_audio', 'Archivo de audio no encontrado.', array('status' => 404));
    }
}

// Función para cargar el audio en el frontend
function wave($audio_url, $audio_id_lite, $post_id)
{
    if ($audio_url) :
        $wave = get_post_meta($post_id, 'waveform_image_url', true);
        $waveCargada = get_post_meta($post_id, 'waveCargada', true);
        $secure_audio_url = get_secure_audio_url($audio_id_lite); // Usando la URL segura
    ?>
        <div id="waveform-<?php echo $post_id; ?>"
             class="waveform-container without-image"
             postIDWave="<?php echo $post_id; ?>"
             data-wave-cargada="<?php echo $waveCargada ? 'true' : 'false'; ?>">
            <div class="waveform-background" style="background-image: url('<?php echo esc_url($wave); ?>');"></div>
            <div class="waveform-message"></div>
            <div class="waveform-loading" style="display: none;">Cargando...</div>
        </div>
        <script>
            document.addEventListener('DOMContentLoaded', function () {
                loadAudio('<?php echo esc_js($post_id); ?>', '<?php echo esc_url($secure_audio_url); ?>');
            });
        </script>
    <?php endif;
}