1<html> 2 3<head> 4<title>vorbisfile - Example Code</title> 5<link rel=stylesheet href="style.css" type="text/css"> 6</head> 7 8<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff"> 9<table border=0 width=100%> 10<tr> 11<td><p class=tiny>Vorbisfile documentation</p></td> 12<td align=right><p class=tiny>vorbisfile version 1.2.0 - 20070723</p></td> 13</tr> 14</table> 15 16<h1>Example Code: seeking</h1> 17 18<p> 19The following is a run-through of the seeking example program supplied 20with vorbisfile - <a href="seeking_test_c.html">seeking_test.c</a>. 21This program tests the vorbisfile <a href="ov_time_seek.html">ov_time_seek</a> function by seeking to random points within the file. 22 23<p> 24First, relevant headers, including vorbis-specific "codec.h" and "vorbisfile.h" have to be included. 25 26<br><br> 27<table border=0 width=100% color=black cellspacing=0 cellpadding=7> 28<tr bgcolor=#cccccc> 29 <td> 30<pre><b> 31#include <stdlib.h> 32#include <stdio.h> 33#include "vorbis/codec.h" 34#include "vorbis/vorbisfile.h" 35</b></pre> 36 </td> 37</tr> 38</table> 39 40<p>Inside main(), we declare our primary OggVorbis_File structure. We also declare other helpful variables to track our progress within the file. 41<br><br> 42<table border=0 width=100% color=black cellspacing=0 cellpadding=7> 43<tr bgcolor=#cccccc> 44 <td> 45<pre><b> 46int main(){ 47 OggVorbis_File ov; 48 int i; 49</b></pre> 50 </td> 51</tr> 52</table> 53 54<p>This example takes its input on stdin which is in 'text' mode by default under Windows; this will corrupt the input data unless set to binary mode. This applies only to Windows. 55<br><br> 56<table border=0 width=100% color=black cellspacing=0 cellpadding=7> 57<tr bgcolor=#cccccc> 58 <td> 59<pre><b> 60#ifdef _WIN32 /* We need to set stdin to binary mode under Windows */ 61 _setmode( _fileno( stdin ), _O_BINARY ); 62#endif 63</b></pre> 64 </td> 65</tr> 66</table> 67 68<p><a href="ov_open_callbacks.html">ov_open()</a> must be 69called to initialize the <a href="OggVorbis_File.html">OggVorbis_File</a> structure with default values. 70<a href="ov_open_callbacks.html">ov_open_callbacks()</a> also checks to ensure that we're reading Vorbis format and not something else. 71 72<br><br> 73<table border=0 width=100% color=black cellspacing=0 cellpadding=7> 74<tr bgcolor=#cccccc> 75 <td> 76<pre><b> 77 if(ov_open_callbacks(stdin,&ov,NULL,-1, OV_CALLBACKS_NOCLOSE)<0){ 78 printf("Could not open input as an OggVorbis file.\n\n"); 79 exit(1); 80 } 81 82</b></pre> 83 </td> 84</tr> 85</table> 86 87<p> 88First we check to make sure the stream is seekable using <a href="ov_seekable.html">ov_seekable</a>. 89 90<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. 91 92<br><br> 93<table border=0 width=100% color=black cellspacing=0 cellpadding=7> 94<tr bgcolor=#cccccc> 95 <td> 96<pre><b> 97 98 /* print details about each logical bitstream in the input */ 99 if(ov_seekable(&ov)){ 100 double length=ov_time_total(&ov,-1); 101 printf("testing seeking to random places in %g seconds....\n",length); 102 for(i=0;i<100;i++){ 103 double val=(double)rand()/RAND_MAX*length; 104 ov_time_seek(&ov,val); 105 printf("\r\t%d [%gs]... ",i,val); 106 fflush(stdout); 107 } 108 109 printf("\r \nOK.\n\n"); 110 }else{ 111 printf("Standard input was not seekable.\n"); 112 } 113 114</b></pre> 115 </td> 116</tr> 117</table> 118<p> 119When we're done seeking, we need to call <a href="ov_clear.html">ov_clear()</a> to release the bitstream. 120 121<br><br> 122<table border=0 width=100% color=black cellspacing=0 cellpadding=7> 123<tr bgcolor=#cccccc> 124 <td> 125<pre><b> 126 ov_clear(&ov); 127 return 0; 128} 129</b></pre> 130 </td> 131</tr> 132</table> 133 134<p> 135The full source for seeking_test.c can be found with the vorbis 136distribution in <a href="seeking_test_c.html">seeking_test.c</a>. 137 138<br><br> 139<hr noshade> 140<table border=0 width=100%> 141<tr valign=top> 142<td><p class=tiny>copyright © 2007 Xiph.org</p></td> 143<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> 144</tr><tr> 145<td><p class=tiny>Vorbisfile documentation</p></td> 146<td align=right><p class=tiny>vorbisfile version 1.2.0 - 20070723</p></td> 147</tr> 148</table> 149 150</body> 151 152</html> 153