Ogg Vorbisプログラム
■ このスレッドは過去ログ倉庫に格納されています
0512デフォルトの名無しさん
NGNGunsigned long offset;unsigned long size;FILE *file;
} CBDataStruct;
static size_t read_func(void *ptr, size_t size, size_t nmemb, void *datasource) {
return fread(ptr,size,nmemb,((CBDataStruct *)datasource)->file);
}
static int seek_func(void *datasource, ogg_int64_t offset, int whence) {
const CBDataStruct * const cbds = (CBDataStruct *)datasource;
switch (whence) {
case SEEK_SET:return fseek(cbds->file,cbds->offset + (long)offset,whence);
case SEEK_CUR:return fseek(cbds->file,(long)offset,whence);
case SEEK_END:return fseek(cbds->file,cbds->offset + cbds->size + (long)offset,SEEK_SET);
}
return -1;
}
static int close_func(void *datasource) {return fclose(((CBDataStruct *)datasource)->file);}
static long tell_func(void *datasource) {
return ftell(((CBDataStruct *)datasource)->file) - ((CBDataStruct *)datasource)->offset;
}
static ov_callbacks ovcbs = {read_func,seek_func,close_func,tell_func};
int main(void) {
FILE *file;long size;
if (!(file = fopen("test.ogg", "rb"))) return 1;
fseek(file,0,SEEK_END);size = ftell(file);fseek(file,0,SEEK_SET);
CBDataStruct cbds;
cbds.file = file;cbds.offset = 0;cbds.size = size;
OggVorbis_File ovFile;
if (ov_open_callbacks(&cbds,&ovFile,NULL,0,ovcbs) != 0)
{fclose(file);return 1;}
ov_clear(&ovFile);
return 0;
}
■ このスレッドは過去ログ倉庫に格納されています