00001 <html> 00002 00003 <head> 00004 <title>vorbisfile - Example Code</title> 00005 <link rel=stylesheet href="style.css" type="text/css"> 00006 </head> 00007 00008 <body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff"> 00009 <table border=0 width=100%> 00010 <tr> 00011 <td><p class=tiny>Vorbisfile documentation</p></td> 00012 <td align=right><p class=tiny>vorbisfile version 1.68 - 20030307</p></td> 00013 </tr> 00014 </table> 00015 00016 <h1>Example Code: seeking</h1> 00017 00018 <p> 00019 The following is a run-through of the seeking example program supplied 00020 with vorbisfile - <a href="seeking_test_c.html">seeking_test.c</a>. 00021 This program tests the vorbisfile <a href="ov_time_seek.html">ov_time_seek</a> function by seeking to random points within the file. 00022 00023 <p> 00024 First, relevant headers, including vorbis-specific "codec.h" and "vorbisfile.h" have to be included. 00025 00026 <br><br> 00027 <table border=0 width=100% color=black cellspacing=0 cellpadding=7> 00028 <tr bgcolor=#cccccc> 00029 <td> 00030 <pre><b> 00031 #include <stdlib.h> 00032 #include <stdio.h> 00033 #include "vorbis/codec.h" 00034 #include "vorbis/vorbisfile.h" 00035 #include "../lib/misc.h" 00036 </b></pre> 00037 </td> 00038 </tr> 00039 </table> 00040 00041 <p>Inside main(), we declare our primary OggVorbis_File structure. We also declare other helpful variables to track our progress within the file. 00042 <br><br> 00043 <table border=0 width=100% color=black cellspacing=0 cellpadding=7> 00044 <tr bgcolor=#cccccc> 00045 <td> 00046 <pre><b> 00047 int main(){ 00048 OggVorbis_File ov; 00049 int i; 00050 </b></pre> 00051 </td> 00052 </tr> 00053 </table> 00054 00055 <p><a href="ov_open.html">ov_open()</a> must be 00056 called to initialize the <a href="OggVorbis_File.html">OggVorbis_File</a> structure with default values. 00057 <a href="ov_open.html">ov_open()</a> also checks to ensure that we're reading Vorbis format and not something else. 00058 00059 <br><br> 00060 <table border=0 width=100% color=black cellspacing=0 cellpadding=7> 00061 <tr bgcolor=#cccccc> 00062 <td> 00063 <pre><b> 00064 if(ov_open(stdin,&ov,NULL,-1)<0){ 00065 printf("Could not open input as an OggVorbis file.\n\n"); 00066 exit(1); 00067 } 00068 00069 </b></pre> 00070 </td> 00071 </tr> 00072 </table> 00073 00074 <p> 00075 First we check to make sure the stream is seekable using <a href="ov_seekable.html">ov_seekable</a>. 00076 00077 <p>Then we seek to 100 random spots in the bitstream using <a href="ov_time_seek.html">ov_time_seek</a> with randomly generated values. 00078 00079 <br><br> 00080 <table border=0 width=100% color=black cellspacing=0 cellpadding=7> 00081 <tr bgcolor=#cccccc> 00082 <td> 00083 <pre><b> 00084 00085 /* print details about each logical bitstream in the input */ 00086 if(ov_seekable(&ov)){ 00087 double length=ov_time_total(&ov,-1); 00088 printf("testing seeking to random places in %g seconds....\n",length); 00089 for(i=0;i<100;i++){ 00090 double val=(double)rand()/RAND_MAX*length; 00091 ov_time_seek(&ov,val); 00092 printf("\r\t%d [%gs]... ",i,val); 00093 fflush(stdout); 00094 } 00095 00096 printf("\r \nOK.\n\n"); 00097 }else{ 00098 printf("Standard input was not seekable.\n"); 00099 } 00100 00101 </b></pre> 00102 </td> 00103 </tr> 00104 </table> 00105 <p> 00106 When we're done seeking, we need to call <a href="ov_clear.html">ov_clear()</a> to release the bitstream. 00107 00108 <br><br> 00109 <table border=0 width=100% color=black cellspacing=0 cellpadding=7> 00110 <tr bgcolor=#cccccc> 00111 <td> 00112 <pre><b> 00113 ov_clear(&ov); 00114 return 0; 00115 } 00116 </b></pre> 00117 </td> 00118 </tr> 00119 </table> 00120 00121 <p> 00122 The full source for seeking_test.c can be found with the vorbis 00123 distribution in <a href="seeking_test_c.html">seeking_test.c</a>. 00124 00125 <br><br> 00126 <hr noshade> 00127 <table border=0 width=100%> 00128 <tr valign=top> 00129 <td><p class=tiny>copyright © 2003 Xiph.org</p></td> 00130 <td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a><br><a href="mailto:team@vorbis.org">team@vorbis.org</a></p></td> 00131 </tr><tr> 00132 <td><p class=tiny>Vorbisfile documentation</p></td> 00133 <td align=right><p class=tiny>vorbisfile version 1.68 - 20030307</p></td> 00134 </tr> 00135 </table> 00136 00137 </body> 00138 00139 </html>