Hey there I had implemented Speex encoding nicely in an application I was working on when I realized that I needed to change the API. I changed it, and the change somehow broke the speex encoding section of the code. The program writes SPX headers that other programs can read, but does not generate the rest of the file correctly. I have been through the guide "programming with speex", and I've been through the reference speexenc line by line, but I just can't figure out what's wrong with my code. I'm hoping that there's some glaring error that you guys will shout at me for missing. This method is called when enough data has accumulated in inputFrame, after the members have been initialized and the headers have been written: oggPacketCount++; speex_bits_reset(&speexBits); speex_encode_int(encoderState, inputFrame, &speexBits); int packetBytes = speex_bits_write(&speexBits, packetBuffer, PACKET_BUFFER_SIZE); oggPacket.packet = (unsigned char*)packetBuffer; oggPacket.bytes = packetBytes; oggPacket.b_o_s = 0; //this is not the beginning of the stream oggPacket.e_o_s = (lastFrame) ? 1 : 0; oggPacket.granulepos = (1 + oggPacketCount) * inputFrameSize - lookahead; oggPacket.packetno = 2 + oggPacketCount; ogg_stream_packetin(&oggStream, &oggPacket); while (((lastFrame) ? ogg_stream_flush(&oggStream, &oggPage) : ogg_stream_pageout(&oggStream,&oggPage)) != 0) { file.write((char*)oggPage.header,oggPage.header_len); file.write((char*)oggPage.body, oggPage.body_len); } I know this is a long shot, but any advice would be appreciated--I'm desperate! Thank you, Philip Bliss Disclaimer: http://www.peralex.com/disclaimer.html