¿Cómo crear una matriz numpy desde un AudioSegment pydub?

Soy consciente de la siguiente pregunta: ¿Cómo crear un AudioSegment pydub usando una matriz numpy?

Mi pregunta es lo contrario. Si tengo un Pydub AudioSegment, ¿cómo puedo convertirlo en una matriz numpy?

Me gustaría usar filtros scipy y así sucesivamente. No me queda muy claro cuál es la estructura interna de los datos en bruto de AudioSegment.

Pydub tiene una facilidad para obtener los datos de audio como una matriz de muestras , es una instancia de array.array (no una matriz numpy) pero debería poder convertirla a una matriz numpy con relativa facilidad:

 from pydub import AudioSegment sound = AudioSegment.from_file("sound1.wav") # this is an array samples = sound.get_array_of_samples() 

Sin embargo, puede crear una variante numpy de la implementación. Ese método se implementa de manera bastante simple:

 def get_array_of_samples(self): """ returns the raw_data as an array of samples """ return array.array(self.array_type, self._data) 

También es posible crear un nuevo segmento de audio a partir de una matriz de muestras (¿modificada?):

 new_sound = sound._spawn(samples) 

Lo anterior es un poco hacky, fue escrito para uso interno dentro de la clase AudioSegment, pero principalmente determina qué tipo de datos de audio está utilizando (matriz de muestras, lista de muestras, bytes, bytestring, etc.). Es seguro de usar a pesar del prefijo de subrayado.

Puede obtener un array.array desde un AudioSegment luego convertirlo en un numpy.ndarray :

 from pydub import AudioSegment import numpy as np song = AudioSegment.from_mp3('song.mp3') samples = song.get_array_of_samples() samples = np.array(samples)