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
fstream NewWave; Archivo.open (Nombre, ios::in |ios::binary); // Archivo Original NewWave.open("filtrada.wav", ios::out | ios::binary); //Archivo Destino char *auxCopia; // Copia de la cabecera del archivo auxCopia = new char [44]; Archivo.read(auxCopia,44); NewWave.write(auxCopia,44); delete[] auxCopia; for (unsigned int i=0;i<(Subchunk2Size/((BitsPerSample/8)*NumChannels));i++) { //(((short(30000*Muestra.Filtrada1[i])>>8)&0xff)|((short(30000*Muestra.Filtrada1[i])<<8)&0xff00)) ///////AQUI ................ sprintf(Muestra.WriteSound,"%x",(((short(30000*Muestra.Filtrada1[i])>>8)&0xff)|((short(30000*Muestra.FIltrada1[i])<<8)&0xff00))); NewWave.write(Muestra.WriteSound,2); ////// .......................Y AQUI ESTA EL PROBLEMA sprintf(Muestra.WriteSound,"%x",(((short(30000*Muestra.Filtrada2[i])>>8)&0xff)|((short(30000*Muestra.Filtrada2[i])<<8)&0xff00))); NewWave.write(Muestra.WriteSound,2); }
El valor de Muestra.Filtradax esta acotado entre -1 y 1 , por eso lo multiplico por
30000.
Muchas gracias por su ayuda!.