Matlab - Duda acerca del tratamiento de archivos de sonido

 
Vista:

Duda acerca del tratamiento de archivos de sonido

Publicado por David (2 intervenciones) el 04/01/2012 18:01:30
Buenas tardes,

Os comento el problema. He implementado un programa en Matlab que tomando un fichero de audio aumenta el pitch de la canción progresivamente hasta un determinado valor que el propio usuario elige (por ejemplo, si la canción presenta una velocidad de 100 bpm y el usuario elige una variación de 20 bpm, el resultado será la propia canción con la velocidad variando linealmente y de forma progresiva de 100 bpm hasta 120 bpm al final.

La cuestión es que he conseguido optimizar bastante el coste computacional trabajando por fragmentos y liberando memoria en un momento determinado volcando el resultado correspondiente al fragmento asociado al disco duro. Al final de todo, el programa lee todos los fragmentos, los concatena y crea el archivo final, eliminando posteriormente todos los archivos fragmentados.

El problema es que esto último da problemas cuando la canción en cuestión presenta una duración superior a 4 minutos por problemas en la memoria de almacenamiento (tened en cuenta que por cada segundo hay 2 canales x 44100 muestras = 88200 datos por cada segundo). Tengo claro cómo resolver el problema. La idea sería que fuera leyendo fragmento por fragmento y que los fuera concatenando no todo en una matriz que se almacena en el espacio de trabajo sino directamente en el archivo wav que se va generando. El problema es que no sé cómo hacer esto. Tan sólo conozco la existencia de la función "wavwrite" que es la que utilizo para volcar la información de la matriz en un archivo wav, pero lo que me gustaría saber es si existe una función tal que teniendo un archivo wav ya existente volcar la información de una matriz en el mismo archivo agregando tal información al final del archivo wav ya existente (y no que lo sobrescriba), de modo que sólo sería necesario guardar en la memoria el contenido de un solo fragmento.

Sé que tiene que haber alguna forma, ya que no me parece muy lógico que la función "wavread" sí que permita leer y almacenar entera una canción de más de 4 minutos, pero que luego no pueda concatenar poco a poco la información que recoge de los fragmentos modificados (que es de hecho de menor tamaño si realizamos un aumento progresivo de la velocidad).

Un saludo y gracias por adelantado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Duda acerca del tratamiento de archivos de sonido

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 05/01/2012 04:20:45
hola David.
Buena pregunta!!.
Lo puedes hacer con bucle, ya sea con for o while.

Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Programador en Matlab
[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda acerca del tratamiento de archivos de sonido

Publicado por David (2 intervenciones) el 05/01/2012 13:09:24
Hola Jose,

Te agradezco la ayuda, pero siento no haberme expresado correctamente; me he enrollado demasiado explicando el programa que estoy haciendo pero no he dado una explicación suficiente de lo que quiero hacer.

Lo que me gustaría es saber si existe algún comando que te vuelque una matriz n x 2 (de audio) en un archivo wav sin sobreescribirlo. Es decir, si tenemos un archivo "nombre.wav" que ya contiene información (supongamos que el tamaño es m x 2, es decir, m muestras y 2 canales) poder volcar la información que se tiene en una determinada matriz n x 2 también asociada a un fragmento de audio en el mismo archivo "nombre.wav" sin sobrescribirlo (como haría la función "wavwrite"). Lo que me gustaría, pues, es que volcara dicha matriz en el archivo anterior de modo que el nuevo tamaño fuera (m+n) x 2, es decir, de m+n muestras y 2 canales, en la que de la muestra 1 hasta la m fuera el contenido que ya estaba en el archivo y de la muestra m+1 hasta la m+n fuera el nuevo contenido de la matriz volcado en el archivo wav.

Espero haberme expresado correctamente ahora.

Un cordial saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Duda acerca del tratamiento de archivos de sonido

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 05/01/2012 19:55:01
Hola David.
Si deseas enviame a mi correo tu programa, para verloy comprender mejor lo que quieres hacer.
Pero dame tiempo para revisarlo con calma.

Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Programador en Matlab
[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar