2 from _vorbisfile
import *
13 class VorbisFileHoleError(StandardError):
16 class VorbisFile(object):
21 def open(self
, file=None):
22 if not self
.testing
and not file:
23 raise StandardException
, "Expected a file object or "\
24 "string, or test mode."
26 ret
= ov_test_open(self
.vf
)
27 # FIXME: check return value
29 if type(file) == types
.StringType
:
30 self
.vf
= ov_open(open(file))
32 self
.vf
= ov_open(file)
34 return self
.vf
!= None
39 if type(file) == types
.StringType
:
40 self
.vf
= ov_test(open(file))
42 self
.vf
= ov_test(file)
44 return self
.vf
!= None
47 return ov_clear(self
.vf
)
49 def bitrate(self
, link
=-1, instant
=0):
51 return ov_bitrate_instant(self
.vf
)
53 return ov_bitrate(self
.vf
, link
)
56 return ov_streams(self
.vf
)
59 return ov_seekable(self
.vf
)
61 def serialnumber(self
, link
=-1):
62 return ov_serialnumber(self
.vf
, link
)
64 def length(self
, link
=-1, mode
=MODE_TIME
):
66 return ov_raw_total(self
.vf
, link
)
67 elif mode
== MODE_PCM
:
68 return ov_pcm_total(self
.vf
, link
)
69 elif mode
== MODE_TIME
:
70 return ov_time_total(self
.vf
, link
)
72 raise StandardError, "Unknown mode requested"
74 def seek(self
, pos
, mode
=MODE_TIME
):
76 return ov_raw_seek(self
.vf
, pos
)
77 elif mode
== MODE_RAW | MODE_LAP
:
78 return ov_raw_seek_lap(self
.vf
, pos
)
79 elif mode
== MODE_PCM
:
80 return ov_pcm_seek(self
.vf
, pos
)
81 elif mode
== MODE_PCM | MODE_LAP
:
82 return ov_pcm_seek_lap(self
.vf
, pos
)
83 elif mode
== MODE_PCM | MODE_PAGE
:
84 return ov_pcm_seek_page(self
.vf
, pos
)
85 elif mode
== MODE_PCM | MODE_PAGE | MODE_LAP
:
86 return ov_pcm_seek_page_lap(self
.vf
, pos
)
87 elif mode
== MODE_TIME
:
88 return ov_time_seek(self
.vf
, pos
)
89 elif mode
== MODE_TIME | MODE_LAP
:
90 return ov_time_seek_lap(self
.vf
, pos
)
91 elif mode
== MODE_TIME | MODE_PAGE
:
92 return ov_time_seek_page(self
.vf
, pos
)
93 elif mode
== MODE_TIME | MODE_PAGE | MODE_LAP
:
94 return ov_time_seek_page_lap(self
.vf
, pos
)
96 raise StandardError, "Unknown mode requested"
98 def tell(self
, mode
=MODE_TIME
):
100 return ov_raw_tell(self
.vf
)
101 elif mode
== MODE_PCM
:
102 return ov_pcm_tell(self
.vf
)
103 elif mode
== MODE_TIME
:
104 return ov_time_tell(self
.vf
)
106 raise StandardError, "Unknown mode requested"
109 return ov_info(self
.vf
)
112 return ov_comment(self
.vf
)
114 def read(self
, num
, format
=FORMAT_INT
, wordsize
=2, signed
=1, bendian
=0):
115 if format
== FORMAT_FLOAT
:
116 samps
, data
, cs
= ov_read_float(self
.vf
, num
)
118 elif format
== FORMAT_INT
:
119 real_num
= num
* wordsize
* 2 # FIXME: get number channels
120 samps
, data
, cs
= ov_read(self
.vf
, real_num
, bendian
,
123 raise VorbisFileHoleError
, "vorbisfile error %d" % samps
126 raise StandardError, "Unknown format requested"
128 def halfrate(self
, flag
):
129 return ov_halfrate(self
.vf
, flag
)
131 def halfratable(self
):
132 return ov_halfrate(self
.vf
)