Mercurial > hg > sv-dependency-builds
comparison src/libvorbis-1.3.3/examples/vorbisfile_example.c @ 1:05aa0afa9217
Bring in flac, ogg, vorbis
author | Chris Cannam |
---|---|
date | Tue, 19 Mar 2013 17:37:49 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:c7265573341e | 1:05aa0afa9217 |
---|---|
1 /******************************************************************** | |
2 * * | |
3 * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * | |
4 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * | |
5 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * | |
6 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * | |
7 * * | |
8 * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * | |
9 * by the Xiph.Org Foundation http://www.xiph.org/ * | |
10 * * | |
11 ******************************************************************** | |
12 | |
13 function: simple example decoder using vorbisfile | |
14 last mod: $Id: vorbisfile_example.c 16328 2009-07-24 01:51:10Z xiphmont $ | |
15 | |
16 ********************************************************************/ | |
17 | |
18 /* Takes a vorbis bitstream from stdin and writes raw stereo PCM to | |
19 stdout using vorbisfile. Using vorbisfile is much simpler than | |
20 dealing with libvorbis. */ | |
21 | |
22 #include <stdio.h> | |
23 #include <stdlib.h> | |
24 #include <math.h> | |
25 #include <vorbis/codec.h> | |
26 #include <vorbis/vorbisfile.h> | |
27 | |
28 #ifdef _WIN32 /* We need the following two to set stdin/stdout to binary */ | |
29 #include <io.h> | |
30 #include <fcntl.h> | |
31 #endif | |
32 | |
33 char pcmout[4096]; /* take 4k out of the data segment, not the stack */ | |
34 | |
35 int main(){ | |
36 OggVorbis_File vf; | |
37 int eof=0; | |
38 int current_section; | |
39 | |
40 #ifdef _WIN32 /* We need to set stdin/stdout to binary mode. Damn windows. */ | |
41 /* Beware the evil ifdef. We avoid these where we can, but this one we | |
42 cannot. Don't add any more, you'll probably go to hell if you do. */ | |
43 _setmode( _fileno( stdin ), _O_BINARY ); | |
44 _setmode( _fileno( stdout ), _O_BINARY ); | |
45 #endif | |
46 | |
47 if(ov_open_callbacks(stdin, &vf, NULL, 0, OV_CALLBACKS_NOCLOSE) < 0) { | |
48 fprintf(stderr,"Input does not appear to be an Ogg bitstream.\n"); | |
49 exit(1); | |
50 } | |
51 | |
52 /* Throw the comments plus a few lines about the bitstream we're | |
53 decoding */ | |
54 { | |
55 char **ptr=ov_comment(&vf,-1)->user_comments; | |
56 vorbis_info *vi=ov_info(&vf,-1); | |
57 while(*ptr){ | |
58 fprintf(stderr,"%s\n",*ptr); | |
59 ++ptr; | |
60 } | |
61 fprintf(stderr,"\nBitstream is %d channel, %ldHz\n",vi->channels,vi->rate); | |
62 fprintf(stderr,"\nDecoded length: %ld samples\n", | |
63 (long)ov_pcm_total(&vf,-1)); | |
64 fprintf(stderr,"Encoded by: %s\n\n",ov_comment(&vf,-1)->vendor); | |
65 } | |
66 | |
67 while(!eof){ | |
68 long ret=ov_read(&vf,pcmout,sizeof(pcmout),0,2,1,¤t_section); | |
69 if (ret == 0) { | |
70 /* EOF */ | |
71 eof=1; | |
72 } else if (ret < 0) { | |
73 if(ret==OV_EBADLINK){ | |
74 fprintf(stderr,"Corrupt bitstream section! Exiting.\n"); | |
75 exit(1); | |
76 } | |
77 | |
78 /* some other error in the stream. Not a problem, just reporting it in | |
79 case we (the app) cares. In this case, we don't. */ | |
80 } else { | |
81 /* we don't bother dealing with sample rate changes, etc, but | |
82 you'll have to*/ | |
83 fwrite(pcmout,1,ret,stdout); | |
84 } | |
85 } | |
86 | |
87 /* cleanup */ | |
88 ov_clear(&vf); | |
89 | |
90 fprintf(stderr,"Done.\n"); | |
91 return(0); | |
92 } |