es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El comando “pyplot.savefig()” se detiene después de unos pocos archivos y muestra el siguiente error: [Error 13] permiso denegado.

He estado intentando obtener los coeficientes cepstrales en frecuencia mel (MFCC) de archivos .wav utilizando la biblioteca librosa y guardar el gráfico como .jpg. Después de ejecutar algunos archivos, el programa se detiene y obtengo el error

"PermissionError: [Errno 13] Permiso denegado:
'C:/Users/shaur/csye7105/audio_data/mfccs_3sec/Speaker0034_019_chunk7.jpg'

Aquí está mi código para generar los MFCC:

def generar_mfcc(directorio_inicial, directorio_final, num_coeficientes):
    for archivo in os.listdir(os.path.join(directorio_inicial, nombre_carpeta_archivo_audio)):
        ruta_archivo = directorio_inicial + '/' + nombre_carpeta_archivo_audio + '/' + archivo
        prefijo_imagen_mfcc = os.path.splitext(os.path.basename(archivo))[0]
        y, sr = librosa.load(ruta_archivo)
        mfccs = librosa.feature.mfcc(y, n_mfcc=num_coeficientes, sr=sr)
        plt.figure(figsize=(25, 10))
        librosa.display.specshow(mfccs, x_axis='time', sr=sr)
        fig = plt.gcf()
        for i, mfccs in enumerate(mfccs):

        fig.savefig(directorio_final + "/" + prefijo_imagen_mfcc + '.jpg')
Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica un problema de permisos al intentar guardar el gráfico como un archivo “.jpg”. Parece que el programa no tiene los permisos necesarios para crear el archivo en el directorio especificado.

    Para resolver el problema, puedes intentar cambiar los permisos del directorio de destino para permitir que el programa escriba en él. Puedes hacer esto haciendo clic derecho en el directorio y seleccionando “Propiedades”, luego ve a la pestaña “Seguridad” y agrega los permisos necesarios.

    Alternativamente, puedes intentar ejecutar el programa con privilegios de administrador para evitar el problema de permisos.

    Otro enfoque sería verificar si el archivo ya existe antes de intentar crearlo, y manejar cualquier error que pueda surgir durante la creación del archivo. Esto se puede hacer utilizando la función os.path.isfile() para verificar si el archivo ya existe, y el bloque try..except para manejar cualquier error. Aquí tienes un ejemplo:

    def generar_mfcc(directorio_inicial, directorio_final, numero_de_coeficientes):
        for archivo in os.listdir(os.path.join(directorio_inicial, nombre_carpeta_archivos_de_audio)):
            ruta_archivo = directorio_inicial + '/' + nombre_carpeta_archivos_de_audio + '/' + archivo
            prefijo_imagen_mfcc = os.path.splitext(os.path.basename(archivo))[0]
            y, sr = librosa.load(ruta_archivo)
            mfccs = librosa.feature.mfcc(y, n_mfcc=numero_de_coeficientes, sr=sr)
            plt.figure(figsize=(25, 10))
            librosa.display.specshow(mfccs, x_axis='time', sr=sr)
            figura = plt.gcf()
            for i, mfccs in enumerate(mfccs):
                try:
                    nombre_archivo = directorio_final + "/" + prefijo_imagen_mfcc + '.jpg'
                    if not os.path.isfile(nombre_archivo):
                        figura.savefig(nombre_archivo)
                except Exception as e:
                    print(f"Error al guardar {nombre_archivo}: {e}")
    

    Este código verifica si el archivo con el mismo nombre ya existe en el directorio de destino y solo guarda el gráfico si no existe. Si hay algún error durante el proceso de guardado del archivo, se capturará e imprimirá en la consola.

Comments are closed.