1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
|
xmms-shn version 2.4.x
--------
Overview
--------
xmms-shn provides playback support for shorten (.shn) files in XMMS. Real-time
seeking support is provided for .shn files that have accompanying seek tables
generated by shorten 3.x. Otherwise, seeking is not supported.
See the "Shorten 3.x overview" section below for more information about this new
seek-enabled version of shorten.
-------
License
-------
xmms-shn is dual-licensed. The code taken from the sources of 'shorten' remains
under the shorten license (see doc/LICENSE.shorten), while the rest of the code
is GPL (see COPYING).
------------
Availability
------------
The latest version of this plugin can always be found at the sites below:
http://www.etree.org/shnutils/
http://shnutils.freeshell.org/
Please see the ChangeLog file for changes to this plugin since its creation.
------------
Dependencies
------------
As of version 2.0, xmms-shn no longer depends on an external shorten executable
to work, since the core shorten algorithm has been incorporated directly into
xmms-shn.
You should have XMMS 1.0.0 or newer, and GTK & GLIB 1.2.2 or newer. The
configure script will usually find these if you installed them from source.
However, if you installed any of the above via .rpm's, then you may need to tell
the configure script where to find them. To see what options are available,
type:
% ./configure --help
The applicable options are the following:
--with-xmms-prefix=PFX Prefix where XMMS is installed (optional)
--with-xmms-exec-prefix=PFX Exec prefix where XMMS is installed (optional)
--with-glib-prefix=PFX Prefix where GLIB is installed (optional)
--with-glib-exec-prefix=PFX Exec prefix where GLIB is installed (optional)
--disable-glibtest Do not try to compile and run a test GLIB program
--with-gtk-prefix=PFX Prefix where GTK is installed (optional)
--with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)
--disable-gtktest Do not try to compile and run a test GTK program
-----------------------------------
Building and installing this plugin
-----------------------------------
For instructions on how to build and install this plugin, please consult the
INSTALL file. It is usually as simple as the following:
% ./configure
% make
% su -c "make install"
Password: (give your root password here)
%
---------------------
Configuration options
---------------------
This section details the options that can be found in the plugin's configuration
window in XMMS, under Preferences -> Audio I/O Plugins -> SHN Player 2.4.x ->
Configure.
Error Display tab:
==================
Error display options:
----------------------
This option determines where any error messages go - to a popup window,
to standard error, or to the bit bucket. Pretty self-explanatory.
Seek Tables tab:
================
Alternate seek table file locations:
------------------------------------
These options allow you to specify alternate directores to search for .skt
(seek table) files. These directories will be searched after all other attempts
to locate a seek table for a given file have failed.
The "Relative seek table path" option allows you to specify a subdirectory
relative to the base directory of a given file, where seek tables may reside.
This is useful if you create seek table files for a group of .shn files, and
store them in a commonly-named subdirectory of that group.
The "Absolute seek table path" option allows you to specify an absolute directory
where seek tables may reside. This is useful if you create seek table files for
multiple groups of .shn files and store them in the same directory.
When searching for seek tables belonging to a file (e.g. '/mnt/shn/filename.shn'),
xmms-shn will do the following, in this order, until it either finds a seek table
or runs out of places to check for one:
1. look for a seek table appended to '/mnt/shn/filename.shn' (whether at the end,
or hidden behind an ID3v1 tag)
2. look for a seek table in '/mnt/shn/filename.skt'
3. look for a seek table in '/mnt/shn/relative_dir/filename.skt', where
'relative_dir' is the directory specified in the "Relative seek table path"
option
4. look for a seek table in '/absolute_dir/filename.skt', where 'absolute_dir'
is the directory specified in the "Absolute seek table path" option
Miscellaneous tab:
==================
Miscellaneous options:
----------------------
The "Swap audio bytes on output" option is useful in situations where every file
you play back is static. This is known to help on the following platforms:
+ Sun Ultra 10 and Ultra 30 both running Solaris 8
+ SGI Octane/Irix 6.5
The "Display debug info to stderr" option specifies whether to display debugging
messages to stderr. This is potentially useful for remote debugging, and also
just to see what's going on. Debug lines are always shown with a prefix of
"xmms-shn [debug]:".
Note that if "Display debug info to stderr" is enabled, and the error display
option is set to /dev/null, then all non-debug messages that normally would be
suppressed are displayed to stderr with a prefix of "xmms-shn [error]:".
The "Load text files in file information box" option specifies whether text files
found in the same or parent directory as the given file should be loaded into the
file information box. Each file found will be loaded in a separate tab. The tabs
will be labeled "Text file n", where n starts at 1 and increases with each new
text file.
The "Text file extensions" option lets you specify a comma-separated list of case-
sensitive file extensions that xmms-shn will recognize as text files. The default
list is "txt,nfo". This option is only useful if "Load text files in file
information box" is enabled.
Note:
Text file support is useful for quickly determining information about the given
file and/or the show it belongs to, assuming such information is contained within
the text files.
Text file location assumes some combination of the following two directory
structures: all text files and .shn files in the same directory, or text files
in a directory with all .shn files in subdirectories one level deep. This
pretty much covers all directory structures seen on live music servers and file-
sharing programs.
--------------------
File information box
--------------------
This section describes the output shown in the file information window, which
can be viewed by choosing 'File Inf.' from the 'Misc. Opt' button in the
playlist editor, or selecting 'View File Info' from XMMS's main popup menu.
Properties tab:
===============
Filename: Shows the full path to the .shn file being examined.
Length: Shows the length of the WAVE data in the file, in m:ss.nnn format.
If the WAVE data is CD-quality (see below for definition), then the length is
shown in m:ss.ff format, where ff is a number from 00 to 74 that best
approximates the number of frames (2352-byte blocks) remaining after m:ss.
Note on rounding: If the WAVE data is CD-quality, then its length is
rounded to the nearest frame. Otherwise, it is rounded
to the nearest millisecond.
Seekable: Shows whether a seek table was found for the given file.
Seek table revision: Shows the revision number of the seek tables, if
present. Note that it is possible for this field to contain a numeric value,
even when the file is not seekable - for example, xmms-shn might detect that
certain seek tables are unsupported or buggy, and disable seeking in those
files.
Compression ratio: Shows the compression ratio for the given file. This is
simply the file's actual size divided by its total size, as calculated from
the chunk size contained in the WAVE header. Note that if the given file is
truncated (or has junk appended to it), then the compression ratio will be
skewed accordingly.
CD-quality properties:
----------------------
CD-quality: Shows whether the given file is CD-quality. A file is considered
to be CD-quality if its header indicates 2 channels, 16 bits/sample, 44100
samples/second, and 176400 average bytes/second.
Cut on a sector boundary: If the given file is CD-quality, then this shows
whether the length of its WAVE data is a multiple of 2352 bytes (1/75 of a
second). Otherwise, "n/a" is displayed.
Sector misalignemt: If the file is CD-quality, then the sector misalignment
is simply the remainder when the data size is divided by 2352; i.e. it is the
number of bytes by which the audio data exceeds the previous sector boundary.
Long enough to be burned: If the given file is CD-quality, then this shows
whether the length of its WAVE data is long enough to be burned (705600 bytes,
or 3 seconds in length). Otherwise, "n/a" is displayed.
WAVE properties:
----------------
Non-canonical header: Shows whether the WAVE header is canonical. A header
is considered canonical if it is 44 bytes long (this is the smallest possible
size that a WAVE header can be).
Extra RIFF chunks: Shows whether there are any extra RIFF chunks following
the data chunk in the WAVE stream.
Possible problems:
------------------
File contains ID3v2 tag: Shows whether the file contains an ID3v2 tag, and
if so, how many bytes it occupies. This is not a problem for xmms-shn (it
was able to read the file after all), but could pose a problem for programs
that are not able to process files with ID3v2 tags.
Details tab:
============
This tab primarily shows the raw information taken from the WAVE header of the
given file. Each entry is self-explanatory.
Text file n tab(s):
===================
These tabs, if any, show the contents of all text files found in the same
directory or parent directory as the given file. The associated file name for
each tab is contained in the frame surrounding the text, and the full path to
the file being displayed is shown just above the text. You can control which
files are considered to be text files with the "Text file extensions" option in
the configuration window. Make sure to select the "Load text files in file
information box" option if you want to see these tabs.
--------------------
Shorten 3.x overview
--------------------
Wayne Stielau has extended shorten 2.3 to support the creation of seek tables.
Seek tables are simply descriptions of the internal state of the shorten
algorithm at specific points in the decompression. This allows a modified
shorten decoder to restore the decoder state of the shorten algorithm for a
point at (or very close to) the desired seek point. You can get the latest
version at any of the URLs below:
http://www.etree.org/shnutils/shorten/
http://shnutils.freeshell.org/shorten/
Seek tables may be appended to the .shn itself, or stored in a separate file
(usually with a suffix of '.skt'). xmms-shn supports both of these options.
The current implementation creates a seek table entry once every 25600 samples.
For 'CD-quality' WAVE data (44100 samples/sec), this provides a granularity of 1
seek table entry per 25600/44100 ~= 0.58 seconds, more than what is needed by
either XMMS or WinAmp.
At 80 bytes per seek table entry, you can expect the seek table to add about
0.1% to the size of the existing shortened file, for 'CD-quality' WAVE data.
So the seek table generated for 1 GB of already-shortened 'CD-quality' WAVE data
will fit on a floppy! Quite a deal, if you ask me. :-)
Best of all, shorten 3.x is fully backward compatible with version 2.3, meaning
that any files created by shorten 3.x can be processed by version 2.3 with no
problems.
The command line options for dealing with seek tables in shorten 3.x are:
-e erase seek table appended to input file *
-i inquire as to whether a seek table is appended to input file *
-k append seek table information to existing shorten file
-s generate seek table information in separate file [input file].skt
-S[name] generate seek table information in separate file given by [name]
-v 3 format version number (2: no seek info; 3: default) *
* only available in versions 3.2 and up
By default, any file shortened with version 3.x will automatically have seek
tables appended to it. In later versions (3.2 and up), you can disable this
with the -v2 switch.
** NOTE ON SEEKING IN FILES ENCODED WITH NON-DEFAULT OPTIONS **
Seek tables are unable to support all types of SHN files due to limitations in
their original design. The only files they can fully support are ones encoded
with the following values:
-c = 1 or 2 (number of channels, default is 1)
-p in the range [0 .. 3] (maximum LPC predictor order, default is 0)
-m in the range [0 .. 4] (number of block for mean estimation, default is 4)
If xmms-shn detects a file encoded with parameters that fall outside of these
ranges, then seeking is automatically disabled for that file.
----------
Known bugs
----------
I test this plugin aggressively until I can no longer make it crash. That does
not mean that there are no bugs. If you can crash it, I want to hear about it -
please report it to me at the address below. The xmms-shn webpage (see the
Availability section above) will always contain an up-to-date list of reported
bugs, so be sure to check that page before you send me a bug report.
Also, feel free to send me any questions, comments, feature requests, patches...
I always enjoy getting feedback.
Enjoy!
Jason Jordan <shnutils@freeshell.org>
==================
Document revision:
==================
$Id: README,v 1.27 2007/03/29 00:08:05 jason Exp $
|