Autor Tema: Duda acerca de Matlab

0 Usuarios y 1 Visitante están viendo este tema.

04 Enero, 2012, 05:41 pm
Leído 1276 veces

Lm4

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 28
  • Karma: +0/-0
  • Sexo: Masculino
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, 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 te 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.

26 Noviembre, 2012, 01:53 am
Respuesta #1

cesarlpb

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 39
  • Karma: +0/-0
  • Sexo: Masculino
¿Has mirado la lista de funciones completa que tiene Matlab para estas historias?
Googleando un poco he visto algunos posts que tratan cosas de audio con Matlab pero no hay nada que esté relacionado con lo que planteas.
Suelen ser cosas del estilo "mi código no va, ayudadme".
Tal vez si intentas postear en foros de programación tengas suerte.
Saludos