Initial commit
[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.001';
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
78 # Preloaded methods go here.
79
80 sub new_from_file {
81 my ($class, $file) = @_;
82 open_file($file)
83 }
84
85 1;
86 __END__
87
88 =encoding utf-8
89
90 =head1 NAME
91
92 Audio::Opusfile - Very incomplete interface to the libopusfile Ogg Opus library
93
94 =head1 SYNOPSIS
95
96 use Audio::Opusfile;
97 my $of = Audio::Opusfile->new_from_file('silence.opus');
98 my $tags = $of->tags;
99 say $tags->query('TITLE'); # Cellule
100
101 =head1 DESCRIPTION
102
103 Opus is a totally open, royalty-free, highly versatile audio codec.
104 Opus is unmatched for interactive speech and music transmission over
105 the Internet, but is also intended for storage and streaming
106 applications. It is standardized by the Internet Engineering Task
107 Force (IETF) as RFC 6716 which incorporated technology from Skype's
108 SILK codec and Xiph.Org's CELT codec.
109
110 libopusfile is a library for decoding and basic manipulation of Ogg
111 Opus files.
112
113 Audio::Opusfile is an interface to libopusfile. At the moment its only
114 function is reading tags from an Ogg Opus file. Future versions will
115 give access to a larger part of the libopusfile API.
116
117 Expect the API to change in future versions.
118
119 =head1 METHODS
120
121 =over
122
123 =item Audio::Opusfile->B<new_from_file>(I<$file>)
124
125 Creates a new Audio::Opusfile object from an Ogg Opus file.
126
127 Dies if the given file does not exist or is not a valid Ogg Opus file.
128
129 =item B<$of>->tags
130
131 Returns an L<Audio::Opusfile::Tags> object corresponding to the file.
132
133 =back
134
135 =head1 EXPORT
136
137 All constants are exported by default:
138
139 OPUS_CHANNEL_COUNT_MAX
140 OP_ABSOLUTE_GAIN
141 OP_DEC_FORMAT_FLOAT
142 OP_DEC_FORMAT_SHORT
143 OP_DEC_USE_DEFAULT
144 OP_EBADHEADER
145 OP_EBADLINK
146 OP_EBADPACKET
147 OP_EBADTIMESTAMP
148 OP_EFAULT
149 OP_EIMPL
150 OP_EINVAL
151 OP_ENOSEEK
152 OP_ENOTAUDIO
153 OP_ENOTFORMAT
154 OP_EOF
155 OP_EREAD
156 OP_EVERSION
157 OP_FALSE
158 OP_GET_SERVER_INFO_REQUEST
159 OP_HEADER_GAIN
160 OP_HOLE
161 OP_HTTP_PROXY_HOST_REQUEST
162 OP_HTTP_PROXY_PASS_REQUEST
163 OP_HTTP_PROXY_PORT_REQUEST
164 OP_HTTP_PROXY_USER_REQUEST
165 OP_PIC_FORMAT_GIF
166 OP_PIC_FORMAT_JPEG
167 OP_PIC_FORMAT_PNG
168 OP_PIC_FORMAT_UNKNOWN
169 OP_PIC_FORMAT_URL
170 OP_SSL_SKIP_CERTIFICATE_CHECK_REQUEST
171 OP_TRACK_GAIN
172
173
174 =head1 SEE ALSO
175
176 L<Audio::Opusfile::Tags>,
177 L<http://opus-codec.org/>,
178 L<http://opus-codec.org/docs/opusfile_api-0.7/index.html>
179
180 =head1 AUTHOR
181
182 Marius Gavrilescu, E<lt>marius@ieval.roE<gt>
183
184 =head1 COPYRIGHT AND LICENSE
185
186 Copyright (C) 2016 by Marius Gavrilescu
187
188 This library is free software; you can redistribute it and/or modify
189 it under the same terms as Perl itself, either Perl version 5.24.0 or,
190 at your option, any later version of Perl 5 you may have available.
191
192
193 =cut
This page took 0.025233 seconds and 4 git commands to generate.