char VorbisfileUser::getData1(void) { if((pcmLeft == 0) && (bufferLeft == 0)) { // もう圧縮データも残ってない return 0 ; } if(bufferLeft == 0) { // バッファにデータが無いので取ってくる long readBytes ; readBytes = ov_read(&ovFile, extractBuf, bufferLength, 0, 2, 1, ¤tOVSection) ; if((readBytes == OV_HOLE) || (readBytes == OV_EBADLINK)) { MessageBox(NULL, "Ogg Vorbisファイルが壊れているようです。", "VorbisfileUser class error", MB_OK|MB_ICONEXCLAMATION) ; ov_clear(&ovFile) ; info = NULL ; throw 0 ; } if(readBytes == 0) { // 残りは無いらしい pcmLeft = 0 ; return 0 ; } pcmLeft -= readBytes ; if(pcmLeft <= 0) { pcmLeft = 0 ; } bufferLeft = readBytes ; bufferIndex = 0 ; } bufferLeft -- ; return extractBuf[bufferIndex++] ; } int VorbisfileUser::fillBuffer(char *fillbuffer, int fillbufferLength) { if((pcmLeft == 0) && (bufferLeft == 0)) { // もう圧縮データも残ってない ZeroMemory((LPVOID)fillbuffer, fillbufferLength) ; return 0 ; } int filledLength = 0 ; while(fillbufferLength > 0) { if(bufferLeft == 0) { // バッファにデータが無いので取ってくる long readBytes ; readBytes = ov_read(&ovFile, extractBuf, bufferLength, 0, 2, 1, ¤tOVSection) ; if((readBytes == OV_HOLE) || (readBytes == OV_EBADLINK)) { MessageBox(NULL, "Ogg Vorbisファイルが壊れているようです。", "VorbisfileUser class error", MB_OK|MB_ICONEXCLAMATION) ; ov_clear(&ovFile) ; info = NULL ; throw 0 ; } if(readBytes == 0) { // 残りは無いらしい pcmLeft = 0 ; ZeroMemory((LPVOID)&(fillbuffer[filledLength]), fillbufferLength) ; return filledLength ; } pcmLeft -= readBytes ; if(pcmLeft <= 0) { pcmLeft = 0 ; } bufferLeft = readBytes ; bufferIndex = 0 ; } if(bufferLeft <= fillbufferLength) { CopyMemory((LPVOID)&(fillbuffer[filledLength]), (LPCVOID)&(extractBuf[bufferIndex]), bufferLeft) ; filledLength += bufferLeft ; fillbufferLength -= bufferLeft ; bufferLeft = 0 ; bufferIndex = 0 ; } else { CopyMemory((LPVOID)&(fillbuffer[filledLength]), (LPCVOID)&(extractBuf[bufferIndex]), fillbufferLength) ; filledLength += fillbufferLength ; bufferLeft -= fillbufferLength ; bufferIndex += fillbufferLength ; fillbufferLength = 0 ; } } return filledLength ; }