|
@@ -189,7 +189,28 @@ For my 21,000+ files, this generates 218,788,792 lines in "log.txt" and 240,727
|
|
|
* __taglib.asd:__ Contains build instructions for taglib library. An ASDF file.
|
|
* __taglib.asd:__ Contains build instructions for taglib library. An ASDF file.
|
|
|
* __utils.lisp:__ General utility functions/methods needed by this library.
|
|
* __utils.lisp:__ General utility functions/methods needed by this library.
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
|
|
+## Known gotchas
|
|
|
|
|
+
|
|
|
|
|
+* In previous versions of this library, if we ran into a Xing header with the number of frames is zero, I just set the duration
|
|
|
|
|
+ as 0. This was fast, but not really "nice." In new revs, I decided if I hit a bad Xing header, the correct thing to do is to
|
|
|
|
|
+ read every frame and calculate the duration/avg bit-rate that way. My calculations match those of iTunes, but it can __really__ slow
|
|
|
|
|
+ things down.
|
|
|
|
|
+* More info later...
|
|
|
|
|
+
|
|
|
|
|
+## Experimental Stuff
|
|
|
|
|
+
|
|
|
|
|
+I've recently added some (very) rudimentary multi-threading (see taglib-tests.lisp) using the CHANL package. First, the filesystem
|
|
|
|
|
+walker (main thread) walks the requested directory, adding each filename to an unbounded channel (*channel*). The main thread then sends
|
|
|
|
|
+*MAX-THREADS* *END-THREAD* symbols, creates *MAX-THREADS* worker threads who read from the channel, and then sits in a loop reading
|
|
|
|
|
+from *dead-channel* until it has done *MAX-THREADS* recv's.
|
|
|
|
|
+
|
|
|
|
|
+The worker threads parse the filename they retrieve from *channel* until they get the *END-THREAD* symbol, whereupon they write their thread
|
|
|
|
|
+id to *dead-channel* and return (ie exit). Here are some timings:
|
|
|
|
|
+
|
|
|
|
|
+| # Threads | Time (seconds) |
|
|
|
|
|
+| ----------- | -------------- |
|
|
|
|
|
+| 10 | ~28 |
|
|
|
|
|
+| 5 | ~18 |
|
|
|
|
|
+| 2 | ~17 |
|
|
|
|
|
+| 1 | ~25 |
|
|
|
|
|
|