The Big Digitization Of Cassette Tapes

The Big Digitization Of Cassette Tapes

Today I finally finished digitizing all of my techno and house cassette tapes. It took me a little bit over two months. Here are some statistics: 290 “a” sides278 “b” sides (sometimes the tapes broke after the first side)12 tapes which unusable41 tapes which turned out to be copies of CDs which are available to buy5 tapes were copies of stuff I have also on CDs which are not available to buy8 tapes had unreadable labels 249 GB in 16 bit 48khz WAVE filesthe whole list I probably still have some tapes flying around somewhere and my girlfriend also has some, but the vast majority of my music is digitized now. The music is mainly mixed techno and house DJ sets, from my friends like DJ Gomez, Motik and Nitin. A lot of sets are recorded from radio like HR3/HRXXL and Hithouse Stuttgart and in clubs around Stuttgart and Cologne. The most popular DJs are Sven Vaeth, Roland Casper, Richie Hawtin, DJ Hello, Dag, and Laurent Garnier. I used my little python tapetransfer script, which I wrote for this purpose. It basically waits until there is music and then records until there is a longer break, which is perfect for DJ mixes and rubbish for normal music CDs. I recorded everything with the same level, which means that some tapes are really quite now, but the alternative would have been to play every tape twice. If it turns out that some tapes are too quite I will record them again in 32bit and normalize. I probably write another script to find out the level of each wav file. In the end it didn’t take me as long as I expected, I usually managed to do one tape before work and maybe three in the evening and a bit more on the weekend. All that is left now is converting them to flac and mp3. The files have to be tagged and named more consistent. Another idea is to also scan pictures of all the tapes and add this to the music files. And listening to all of them again, but I already found some real gems.

July 5, 2009 · 2 min · Christof Damian

my first python website

api.bicingwatch.com has now been up for two weeks. It is a small site with just a handful of html views and some JSON views. I also use python now to scrape the bicing.com website and store the results in a mysql database. This does not include the data I had already collected over the last year, which I will import soon. Today I also enabled disqus commenting on the station pages. I originally planned to write this myself, but this is way quicker and I can always change to the django commenting system later. Overall I am very happy with python and pretty used to the syntax now. I really like the internal dicts and arrays, much better than the php version and on the same level as Perl. I also like the way errors are handled, which is always with exceptions. In Perl and PHP these are very much optional and are not used a lot. What I don’t like is the quality of some of the libraries, they clearly have to do some catching up to do with CPAN.

November 26, 2008 · 1 min · Christof Damian

tapetransfer

Even though my good tape decks are broken at the moment I have started on the software to transfer my techno and house mix tapes to the computer. I have written the software before in C++. It basically waits for a sound on the input and then writes the music to a file until it notices a long quiet section at the end of the tape and stops writing. The software was using threads and used the lame lib to do on the fly mp3 encoding, to make it even quicker to digitize tape. It also notified the user of any buffer underflows and clipped samples. This software is more than five years old now and all the libraries have changed and I can’t be bothered to fix it all. As I want to learn python anyway I decided to rewrite it in python and see how good I can make it. Documentation for the (multiple) alsa bindings for python is pretty bad, so I googled around and found kissrec , which is a very simple command line audio recorder with a timer and VU meter. It is GPL, so I have started with that, but I probably rewrite the whole thing to make it (in my eyes) nicer code. You can find the whole thing at http://tapetransfer.googlecode.com/ , but please don’t look to closely - it is rather ugly at the moment.

October 31, 2008 · 2 min · Christof Damian

comparing class syntax in C++, Java, PHP, Perl and Python

As I recently started learning Python one of the things I noticed which I didn’t like is the class syntax. So I wrote some minimal hello world programs in the languages I recently used to show the difference: C++ hello.cc#include class Hello { private: char value; public: Hello(char newvalue) { value = newvalue; } public: void hello() { std::cout « this->value; } }; int main() { Hello hello(“hello\n"); hello.hello(); } I like the C++ syntax, it is the language which introduced me to OOP and it it clearly states what bits are what without too wordy syntax. Java: hello.java class Hello { private String value; public Hello (String newvalue) { this.value = newvalue; } public void hello(){ System.out.println(this.value); } } class main { public static void main(String args[]){ Hello hello = new Hello (“hello”); hello.hello (); } } Also very nice, a bit clearer than C++. PHP: hello.php «/span>?php class Hello { private $value; function __construct($newvalue) { $this->value = $newvalue; } function hello() { echo $this->value; } } $hello = new Hello(“hello\n"); $hello->hello(); From the dynamic languages this one is the clearest. Except of the __construct() constructor, where I prefer the ClassName() syntax (which still works in PHP5) Perl: hello.pl package Hello; sub new { my ($class,$newvalue) = @_; bless { newvalue => $newvalue }, $class; } sub hello { my $this = shift; print $this->{newvalue}; } package main; $main::hello = new Hello(“hello\n"); $main::hello->hello(); I always hated objects (and functions) in Perl, there is no parameter syntax for functions or methods. Most of it is not enforced and you can use functions in objects in thousands different ways. Python: hello.py class Hello: _value = ”" def init(self,newvalue): self._value = newvalue def hello(self): print self._value; hello = Hello(“hello”) hello.hello() A lot clearer than Perl, but also a lot of convention instead of forced syntax. I got used to the indention by now. But I hate that I have to specify “self” as the first parameters, the init syntax and the underscore prefixing of private or protected variables. At least it has proper function parameters.

September 29, 2008 · 2 min · Christof Damian

learning something new

I decided that it is about time to learn something new. For some reason I decided on python and django. It might have something to do with the google app engine and because fedora uses a lot of python. I made up a small project, which is easy to start, but can grow into something bigger later. At my day job I use mainly php, including the cakephp framework. One thing which I am always missing is a proper ORM. I used to do a lot of perl coding and we developed our own ORM, which was very similar to Class::DBI. So I am quite happy that django comes with a nice ORM. I also like the views and template language so far. The only thing a bit annoying is the url setup and the specifying the locations of the templates. It would be nice if there was a nice default. There might even be one and I haven’t found it yet.

August 13, 2008 · 1 min · Christof Damian