Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Escritura de archivo .wav

Estas en el tema de Escritura de archivo .wav en el foro de C/C++ en Foros del Web. 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... ...
  #1 (permalink)  
Antiguo 21/12/2010, 19:54
 
Fecha de Ingreso: diciembre-2010
Ubicación: Manizales
Mensajes: 1
Antigüedad: 13 años, 11 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

Etiquetas: escritura, wav
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:27.