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