]> iEval git - audio-opusfile.git/blob - lib/Audio/Opusfile.pm
Bump version and update Changes
[audio-opusfile.git] / lib / Audio / Opusfile.pm
1 package Audio::Opusfile;
2
3 use 5.014000;
4 use strict;
5 use warnings;
6 use Carp;
7
8 use parent qw/Exporter/;
9 use AutoLoader;
10
11 my @constants =
12 qw/OPUS_CHANNEL_COUNT_MAX
13 OP_ABSOLUTE_GAIN
14 OP_DEC_FORMAT_FLOAT
15 OP_DEC_FORMAT_SHORT
16 OP_DEC_USE_DEFAULT
17 OP_EBADHEADER
18 OP_EBADLINK
19 OP_EBADPACKET
20 OP_EBADTIMESTAMP
21 OP_EFAULT
22 OP_EIMPL
23 OP_EINVAL
24 OP_ENOSEEK
25 OP_ENOTAUDIO
26 OP_ENOTFORMAT
27 OP_EOF
28 OP_EREAD
29 OP_EVERSION
30 OP_FALSE
31 OP_GET_SERVER_INFO_REQUEST
32 OP_HEADER_GAIN
33 OP_HOLE
34 OP_HTTP_PROXY_HOST_REQUEST
35 OP_HTTP_PROXY_PASS_REQUEST
36 OP_HTTP_PROXY_PORT_REQUEST
37 OP_HTTP_PROXY_USER_REQUEST
38 OP_PIC_FORMAT_GIF
39 OP_PIC_FORMAT_JPEG
40 OP_PIC_FORMAT_PNG
41 OP_PIC_FORMAT_UNKNOWN
42 OP_PIC_FORMAT_URL
43 OP_SSL_SKIP_CERTIFICATE_CHECK_REQUEST
44 OP_TRACK_GAIN/;
45
46 our @EXPORT_OK = @constants;
47 our @EXPORT = @constants;
48
49 our $VERSION = '0.003';
50
51 sub AUTOLOAD {
52 # This AUTOLOAD is used to 'autoload' constants from the constant()
53 # XS function.
54
55 my $constname;
56 our $AUTOLOAD;
57 ($constname = $AUTOLOAD) =~ s/.*:://;
58 croak "&Audio::Opusfile::constant not defined" if $constname eq 'constant';
59 my ($error, $val) = constant($constname);
60 if ($error) { croak $error; }
61 {
62 no strict 'refs';
63 # Fixed between 5.005_53 and 5.005_61
64 #XXX if ($] >= 5.00561) {
65 #XXX *$AUTOLOAD = sub () { $val };
66 #XXX }
67 #XXX else {
68 *$AUTOLOAD = sub { $val };
69 #XXX }
70 }
71 goto &$AUTOLOAD;
72 }
73
74 require XSLoader;
75 XSLoader::load('Audio::Opusfile', $VERSION);
76 require Audio::Opusfile::Tags;
77 require Audio::Opusfile::PictureTag;
78
79 # Preloaded methods go here.
80
81 sub new_from_file {
82 my ($class, $file) = @_;
83 open_file($file)
84 }
85
86 sub new_from_memory {
87 my ($class, $buf) = @_;
88 open_memory($buf)
89 }
90
91 1;
92 __END__
93
94 =encoding utf-8
95
96 =head1 NAME
97
98 Audio::Opusfile - Very incomplete interface to the libopusfile Ogg Opus library
99
100 =head1 SYNOPSIS
101
102 use Audio::Opusfile;
103 my $of = Audio::Opusfile->new_from_file('silence.opus');
104 my $tags = $of->tags;
105 say $tags->query('TITLE'); # Cellule
106
107 =head1 DESCRIPTION
108
109 Opus is a totally open, royalty-free, highly versatile audio codec.
110 Opus is unmatched for interactive speech and music transmission over
111 the Internet, but is also intended for storage and streaming
112 applications. It is standardized by the Internet Engineering Task
113 Force (IETF) as RFC 6716 which incorporated technology from Skype's
114 SILK codec and Xiph.Org's CELT codec.
115
116 libopusfile is a library for decoding and basic manipulation of Ogg
117 Opus files.
118
119 Audio::Opusfile is an interface to libopusfile. At the moment its only
120 function is reading metadata and tags from an Ogg Opus file or buffer.
121 Future versions will give access to a larger part of the libopusfile
122 API.
123
124 Expect the API to change in future versions.
125
126 =head1 METHODS
127
128 =over
129
130 =item Audio::Opusfile->B<new_from_file>(I<$file>)
131
132 Creates a new Audio::Opusfile object from an Ogg Opus file.
133
134 Dies if the given file does not exist or is not a valid Ogg Opus file.
135
136 =item Audio::Opusfile->B<new_from_memory>(I<$buffer>)
137
138 Creates a new Audio::Opusfile object from a buffer containing Ogg Opus
139 data.
140
141 Dies if the given buffer does not contain valid data.
142
143 =item Audio::Opusfile::test(I<$buffer>)
144
145 Returns true if the given buffer looks like the beginning of a valid
146 Ogg Opus file, false otherwise.
147
148 Dies if the given buffer does not have sufficient data to tell if it
149 is an Opus stream or if it looks like a Opus stream but parsing it
150 failed.
151
152 =item B<$of>->head
153
154 Returns an L<Audio::Opusfile::Head> object corresponding to the file.
155
156 =item B<$of>->tags
157
158 Returns an L<Audio::Opusfile::Tags> object corresponding to the file.
159
160 =item B<$of>->seekable
161
162 Returns whether or not the data source being read is seekable.
163
164 =item B<$of>->link_count
165
166 Returns the number of links in this chained stream. Always returns 1
167 for unseekable sources.
168
169 =item B<$of>->serialno([I<$link_index>])
170
171 Get the serial number of the given link in a (possibly-chained) Ogg
172 Opus stream. If the given index is greater than the total number of
173 links, this returns the serial number of the last link.
174
175 If the source is not seekable, I<$link_index> is negative, or
176 I<$link_index> is not given, then this function returns the serial
177 number of the current link.
178
179 =back
180
181 =head1 EXPORT
182
183 All constants are exported by default:
184
185 OPUS_CHANNEL_COUNT_MAX
186 OP_ABSOLUTE_GAIN
187 OP_DEC_FORMAT_FLOAT
188 OP_DEC_FORMAT_SHORT
189 OP_DEC_USE_DEFAULT
190 OP_EBADHEADER
191 OP_EBADLINK
192 OP_EBADPACKET
193 OP_EBADTIMESTAMP
194 OP_EFAULT
195 OP_EIMPL
196 OP_EINVAL
197 OP_ENOSEEK
198 OP_ENOTAUDIO
199 OP_ENOTFORMAT
200 OP_EOF
201 OP_EREAD
202 OP_EVERSION
203 OP_FALSE
204 OP_GET_SERVER_INFO_REQUEST
205 OP_HEADER_GAIN
206 OP_HOLE
207 OP_HTTP_PROXY_HOST_REQUEST
208 OP_HTTP_PROXY_PASS_REQUEST
209 OP_HTTP_PROXY_PORT_REQUEST
210 OP_HTTP_PROXY_USER_REQUEST
211 OP_PIC_FORMAT_GIF
212 OP_PIC_FORMAT_JPEG
213 OP_PIC_FORMAT_PNG
214 OP_PIC_FORMAT_UNKNOWN
215 OP_PIC_FORMAT_URL
216 OP_SSL_SKIP_CERTIFICATE_CHECK_REQUEST
217 OP_TRACK_GAIN
218
219
220 =head1 SEE ALSO
221
222 L<Audio::Opusfile::Tags>,
223 L<http://opus-codec.org/>,
224 L<http://opus-codec.org/docs/opusfile_api-0.7/index.html>
225
226 =head1 AUTHOR
227
228 Marius Gavrilescu, E<lt>marius@ieval.roE<gt>
229
230 =head1 COPYRIGHT AND LICENSE
231
232 Copyright (C) 2016 by Marius Gavrilescu
233
234 This library is free software; you can redistribute it and/or modify
235 it under the same terms as Perl itself, either Perl version 5.24.0 or,
236 at your option, any later version of Perl 5 you may have available.
237
238
239 =cut
This page took 0.059606 seconds and 4 git commands to generate.