Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/12/2010, 19:54
juan_castano
 
Fecha de Ingreso: diciembre-2010
Ubicación: Manizales
Mensajes: 1
Antigüedad: 14 años, 3 meses
Puntos: 0
Escritura de archivo .wav

Que tal!
Soy nuevo en el foro, se ve muy interesante :P.
Desde ya con toda la disposición para colaborar con lo que pueda.

Ahora... al grano.

Estoy escribiendo un programa en C++ usando Code::Blocks para filtrar un archivo .wav con un filtro FIR.

Ya esta casi listo (si quieren ver el codigo completo me pueden decir), solo tengo un problema hasta ahora, cuando voy a guardar los datos de nuevo en un .wav, el problema concretamente es con el formato little-endian, pues es con este formato con el que se guarda la información del sonido. Podrían indicarme más o menos en que me estoy equivocando?, aquí esta el fragmento del código:
Código c++:
Ver original
  1. fstream NewWave;
  2.         Archivo.open (Nombre,  ios::in |ios::binary); // Archivo Original
  3.         NewWave.open("filtrada.wav", ios::out | ios::binary); //Archivo Destino
  4.         char *auxCopia;
  5. // Copia de la cabecera del archivo
  6.         auxCopia = new char [44];
  7.         Archivo.read(auxCopia,44);
  8.         NewWave.write(auxCopia,44);
  9.         delete[] auxCopia;
  10.  
  11.         for (unsigned int i=0;i<(Subchunk2Size/((BitsPerSample/8)*NumChannels));i++)
  12.         {
  13.             //(((short(30000*Muestra.Filtrada1[i])>>8)&0xff)|((short(30000*Muestra.Filtrada1[i])<<8)&0xff00))
  14. ///////AQUI ................
  15.             sprintf(Muestra.WriteSound,"%x",(((short(30000*Muestra.Filtrada1[i])>>8)&0xff)|((short(30000*Muestra.FIltrada1[i])<<8)&0xff00)));
  16.             NewWave.write(Muestra.WriteSound,2);
  17. ////// .......................Y AQUI ESTA EL PROBLEMA
  18.             sprintf(Muestra.WriteSound,"%x",(((short(30000*Muestra.Filtrada2[i])>>8)&0xff)|((short(30000*Muestra.Filtrada2[i])<<8)&0xff00)));
  19.             NewWave.write(Muestra.WriteSound,2);
  20.         }

El valor de Muestra.Filtradax esta acotado entre -1 y 1 , por eso lo multiplico por

30000.

Muchas gracias por su ayuda!.

Última edición por juan_castano; 21/12/2010 a las 20:28 Razón: Highlight codigo