This is the progress of my sample editor.

Monday - (Hmmmmm) 14th April - 0100 GMT
Hmm, a long time since an update...

Paste Mix works finally though. Been busy last couple of weeks, but now it works even adding the extra samples at the end f required. A Load of other stuff fixed too, although mostly internal. Will work on block inserting next, which will mean that normal Paste will work too. I don't anticipate it being too hard to fix up. Although you never know.

Hi to all the new people who are finding out about us...

Plans for 0.1 - First release...

As it stands, I'm quite happy now with Marlin's internal structure, a few places that it could be better, but it'll do for now. So, I think its time for a release. The first release. The features I think it still needs are

I think 0.1 will be released sometime around May/June....

Monday - again (17th March) - 0030 GMT
Some small screenshots of some new dialogs

#1 The Move To Dialog

A dialog to enable position setting of the cursor. Will eventually have defaults like "Next zero crossing" and stuff, but thats in the future.

#2 The Select a Region dialog

Dialog to select an area of the sample.

#3 The Mix Clipboard into Sample Dialog

This dialog needs something, but I dunno what. It doesn't work at the moment, but its in CVS. This is the next step.

Small problem I've come across with GStreamer 0.7 The default scheduler is now opt, but Marlin doesn't seem to like it too much. running marlin with --gst-scheduler=basicomega seems to work fine though.

Monday - again but 10th March - 0203 GMT

A whole month has gone by. What have I done? Hmm, I added some copy/paste stuff. Redid the toolbars/menus to use the new EggMenu stuff, and ended up contributing to Epiphany with the toolbar editor. It's really nice. Still loads to do with it, but I'm glad to have Marlin back to the place it was before I started, plus it has editable toolbars.

Mandag still
Quick update - Just added a crop selection feature. So we can Crop, delete or clear now. Yey.

Mandag 10 februar 2003 - 1738 GMT

Not had a cock up screenshot for AGES. But yeah, in trying to make peak file generation faster by batching the writes into blocks that are bigger sizes, this happened.

Oh well.

Since last I typed...Well, I got deleting working better, I got the sample view working with the peak files for faster access, I got block splitting working with the peak files, and I implemented Clear, so you can zero a region of a sample now. Also made some GUI improvements, like it only shows the filename in dialogs now, because dialogs can get quite large otherwise...

Marlin is getting to be a real sample editor. Wow.

Advert: If anyone feels like making a website for Marlin, or a logo or an icon (I'm not particularly attached to the ones we have at the moment) feel write to get in touch.

Lordag 25 januar 2003 - 0029 GMT
No screenshots...but we've got EDITTING! Yes, you can delete by making a selection and pressing the Delete key. Woohooooooo. Yeah!

Onsdag 8 januar 2003 - 2203 GMT

A screenshot of my terminal showing top output. Marlin is using > 1Gb of memory. But its playing a 70meg mp3, plus if you calculate the actuall real memory its using, it works out very very small. Most of that is mmapped from various files. The peak code is back, stored on disk and so the view is quite fast, and thankfully works with multiple blocks of weird sizes.

going to take a break for tonight and go read something.

Mandag 7 januar 2003 - 2356 GMT

Spent a few days working out a new way to do the block code. In the process I've had to remove the peak code because I've not had time to think of the best way to do it yet. What that means at the minute is that the drawing code is slower than before (but still not incredibly slow). Still, when the peak cache comes back, it'll be stored on disk too, so we can load those 77minute mp3's :) Still think these changes are going to end up making editting really good.

Fredag januar 2003 - 0046 GMT
A new year, whee.

No fancy new screenshot features. Made many fixes here and there, fixed CDDA again. New feature is that you can now cancel any operation. So far only Load and Save can be stopped, but CDDA ripping will be done soon. After that, thats pretty much all the features I'm going to do for a while. I'm going to spend a few days fixing up bits and pieces of inconsistencies here and there (Like you can zoom and select all if there's no sample loaded), and then ...


Then I'm going to rewrite the block code. Currently its all in a linked list, which means that to find a block you need to linearly search through the list which is an O(n) operation. I think I'm going to make it into a BTree, which should speed it up. Hopefully it'll also make things like compressing blocks when bits are removed and inserting bits into blocks faster, which means that actual editing will begin once thats finished.

Yeah baby, thats the "MarlinPlan(tm)"

Oh yeah, it all needs very very recent GStreamer and gst-plugins from gstreamer CVS. Like from tonight or so...

27th December - 1937 GMT
A busy few weeks. Been finding various bugs, and fixing loads of stuff with the CDDA ripping stuff, and the recording stuff. Made some major changes over the last week internally: I made a new MarlinOperation object so that we can have more power over the operations that marlin is doing - Cancelling an operation will be the biggie at the moment. Maybe later we can use it for Undo/Redo, maybe not, I've just thought of that so I'll need to think it through a bit better :).

Also this splitting of the operation code out from the MarlinSample c ode meant that I also needed to split out the loading and saving routines, so I created MarlinSavePipeline and MarlinLoadPipeline. I've still got to redo the CDDA stuff as a pipeline too, but that shouldn't take long as its very similar to the load pipeline or the record one.

Also nicked the autogen script from GStreamer, so now you can actually build it out of CVS without needing a PhD in auto*

Finally, I also got all wordy and wrote some very basic documentation and hooked it up to the New Sample Dialog. Look!

See what I mean.

Oh, I also started to do i18n for everything, but I've only got english so far.

I think thats all thats happened since last time.

14th December - 1706 GMT
Well, I made a new image
It is here
I forgot to make a thumbnail, but thats how it goes.

I'm trying t othink of what has happened. Umm, I fixed a few bugs in the f2i and i2f Gst Plugins, so that Marlin can set the correct playback and record sample rates. Oh, as you can see fro mthe screenshot above of the CD ripper, I've nicked Hadess' Totem CD device selector widget. Ah the joys of open source. Not connected yet, but hey.

4th December - 2308 GMT
I gone made me a logo. It needs something to spice it up though...dunno what.

30th November - 1530 GMT
Another large image

Yes, marlin can now record and have save the result. At the moment I think it only records as 44100, but I'll fix it. Finally got to this point, only 3 months late. Better late than never, but I think in the interim, I got a lot of other stuff done that made Marlin, Gnome-Media and GStreamer and the world a much better place. I'm pleased with what's been accomplished, I hope everyone else is too.

Does anyone ever read this?

On other notes about building this thing: Marlin requires CVS HEAD Gstreamer.
And CVS HEAD GStreamer has a bug that only occurs when you use glibc compiled for i686...I had to downgrade to glibc-i386 for this to work. The GStreamer guys are looking into it, so hopefully I can move back to the i686 version soon enough.

Until next time

16th November - 0213 GMT
Dialog stuff...

I was playing with Soundforge and noticed that different things happen if you click the New menu item and if you click the New toolbar button. the menu item opens a dialog to let you select the properties of the sample, whereas the toolbar just makes a new sample with the properties you last selected...Seems like a nice way to do I did.

MAde the record dialog look slightly better, and hooked it up slightly.

9th November - 0128 GMT
Another update so you don't think I'm dead.

There is a record pipeline in CVS, and the beginnings of a record dialog as well. However I've found that new GStreamer releases seem to have broken lots of stuff unwittingly, so I'm tracking them down. New youth work stuff is going well, thanks for asking.

16th October - 0141 GMT
Small screenshots

Showing the new statusbar position indicator. There's another two for selection stuff, but they're not hooked up yet. I like it

Just in case anyone though Marlin was slowing down, I am working on it still :)

28th September - 1257GMT
Big screenshot

With changes to the CDParanoia GstElement so that it works ;^) and a few bits of code here and there, Marlin can now rip CDs. Can't save or play them yet, but thats the least of my problems.

13th September - 2016GMT
Wooo. GStreamer code rewritten. Now loads audio out of MPEG and AVI files etc. How cool is that? And it can save files too. Currently it only works to save if you have recent GStreamer CVS (IE like from today) and only if you want to save as .ogg. The reason: GStreamer and GNOME-VFS's mime types aren't in sync, so gnoem-vfs reports .mp3 files as audio/x-mp3 and GStreamer only has an encoder for audio/mp3 (not to meantion that the actual mimetype for mp3 is audio/mpeg, but hey). Many bugs have beenfixed, and the laoding and saving code is much nicer than it's ever been before (and will get nicer).

I'm now debating whether to do a silly little hack and write a CD ripper ... or to work on playback and recording through GStreamer. Probably go for the latter, although the former would only take a day or so. Maybe afterwards.

9th September - 0122 GMT
No more screenshots really. Selections now get combined, so if there's overlapping selections they get turned into one big one, or split into multiple ones if they don't have the same channels but overlap etc. And once that was finished, I decided I hated the way the GStreamer stuff worked (or didn't), and learned lots more about how GStreamer works, and rewrote all the GStreamer code. Which means we now have code that

. Yey. Still won't load audio from MPEG or Avi's but hey, I'll work on that later. :)
Also in CVS is the start of saving code using GStreamer. The element to stream the data into GStreamer's plugins has been written, and I've just started writing an N to One channel combiner that is needed in the pipelines.
After this is done, I'm going to rewrite the audio output code so that it uses GStreamer, which will allow us to use Jack, ALSA, or OSS or whatever other output plugins GStreamer has to offer.
And after that, I'll do recording with GStreamer, because in theory, loading and recording and saving and playing are very closely related, so hopefully I can share lots of the ideas :)

All go in Marlin world thanks to GStreamer.

1st September - 2345 GMT
Slow couple of weeks in Marlin land...I've been away quite a lot, and I've been busy on a new feature, which has just landed in CVS...GSTREAMER! Marlin now uses GStreamer to load stuff, so in theory you can use it to load pretty much any media format out. It should be able to get audio out of movies as well, but I've not been able to get it working, but I'll work on it. I've been able to load wavs, mp3s and oggs, so thats me happy for the moment. I'm just glad I was able to get it working so I could commit it, because it looks like the project was dead as there'd been no activity for about 3 weeks.

18th August - 2336 GMT
Quick update: Marlin now requires libuuid. You can find it here
Other news: Marlin now has session management. When you quit it remembers: window file, window size, window position and EVEN... cursor position. When I'm feeling better, it's also going to remember selection state...

17th August - 0108 GMT
Screenshot 16:

Selections are now very functional. You can even have multiple selections, if you use the keyboard. Still need to finish mouse support for them. Currently with the code you can, make a selection on any channel, or all channels, expand the selection with the mouse by grabbing the end of the selection and pulling, expand the selection with the keyboard by putting the cursor at the end of the selection and expanding it. Obviously there's more to be done, but selections rule :)
Also the selection is shown in the overview bar at the top of the display, and unlike the one I used in Soundforge it will show if one channel is selected. Just one more small way in which Marlin is better than Soundforge, if only Soundforge didn't have so many large ways in which it was better than Marlin. Oh well.
I also cleaned up the JACK patch, and submitted it to Paul Davis. Hopefully it'll go in soon.

Oh and if anyone is wondering the song is "Leeman's Lullaby" available here. Enjoy.

15th August - 0145 GMT
Screenshot 15:

Wheee, Been a while. Cleaned up the playing code. It no longer hangs after one play, stop, pause and play work like you would expect them to, the cursor moves along as the song plays and the cursor changes depending on what part of the sample you're in. And now, the big addition: Selections. Very primitive at the moment, and there's not really much you can do with them, but hey, once again, it's a start. How many times have I said that...far too many.

2nd August - 1500 GMT
No screenshots. Just looks like the same as the one before...
I'll say that again.IT CAN PLAY SOUNDS
Well I'm excited. Admittedly there's some bugs, some issues, things don't work as well as they could, but you've got to start somewhere don't you.

29th July 2002 - 0040 GMT
Screenshot 14:

Back from holidays, and added 2 major things since the last updates.

  1. A cursor
  2. A media bar transport control toolbar thing
The cursor is currently hooked up to everything, the timeline and the transport buttons, and it all works nicely, with keybindings and everything. They should be the same as SoundForge, but they're pretty easy to work out.
On the "media bar" only the cursor movement controls work so far, but playing is a fairly major thing that should come soon. Hopefully so will recording, I told Roger that he'd be able to record with it by the time he gets home at the end of August....

25th June 2002 - 0133 GMT
Screenshot 13:

A very exciting time, as we're really starting to look like an application with toolbars and menus and whatnot. Currently only New, Close and Quit work properly, but I'm sure we'll get there...eventually.

24th June 2002 - 0029 GMT
Screenshot 11:

Now that we have an actual application starting to form in the marlin/src directory as opposed to a load of programs to test various functions, we (I) need to be more user friendly. So voila! A dialog to tell you that JACK isn't running.

Screenshot 12:

And here is the start of the application window. We have a Overview bar at the top (wrongly called a MarlinTimeLine widget cos I'd not read the clever Soundforge docs before I wrote it), a few rulers and the sample view. Doesn't it look lovely? Wish the rulers were actually useful at the moment, but they're not.

21st June 2002 - 1701 GMT

Yes, you are being tracked. :) Only because the Sourceforge tracking doesn't tell me anything, and so I can't distinguish out of the 10 page views a day that I get which ones are me. And I'm kinda interested in finding out how people come across this project. I'm not using it for any nefereous (is this a word?) purposes.

21st June 2002 - 0106 GMT
Screenshot 10:

This screenshot shows the sample view (which doesn't seem to like the GIMP taking a shot while other things are going on...) while the sample (country-feedback.ogg) is being loaded. The new interesting things that are happening behind the scenes are that the sample is being loaded in a different thread to the GUI, so the GUI can update when it needs to without blocking for the sample to load, which is useful, because loading OGGs takes a while.

14th June 2002 - 0102 GMT
Another day, no screenshots. Well, I could have taken screenshots, but they'd look just like all the others. So what's new? Well, the sample loading code has been split out into a generic plugin based system, so thats nice. And now there's an Ogg Vorbis plugin to load .ogg files. Works nicely although the plugin code looks horrid at 80 column wrapping. All the audio data is still mmaped so it hardly takes any memory to view a file.

8th June 2002 - 1629 GMT
Screenshot 9:

Added a line between channels for separation, and I added the timeline widget at the top so I could check how they interacted. Mostly they worked okay, but I discovered some redraw issues and fixed them.

5th June 2002 - 0200 GMT
Some late night/early morning screenshots.
Screenshot 7:

Working on making the sample display correctly at 1 frame per pixel, made a miscalculation again.

Screenshot 8:

Fixed calculation, but also noticed some strange redraw bugs when moving a window over the low half of a sample which left strange artifacts. Spent a while fixing that as well. Now the only (minor) problem left in the redraw code is that on 1fpp moving a window horizontally over the view will leave white trails behind where the full wave doesn't seem to be getting drawn. I'll leave that for tomorrow.

4th June 2002
Still no more screenshots, but theres now code in CVS that can play a MarlinSample through JACK. Didn't take long, it just suddenly started working, so I'm not sure what I did to change it. Maybe it was storing the frame data as floats instead of doubles. But whatever it was, it has the beginnings of audio. Another plus from the s/double/float/g change is that memory usage has halved, so it saves on diskspace more. Whee.

31st May 2002
Screenshot 1:

The inital tests once I got my axis round the right way. I managed to make the sample appear vertically by accident. This one obviously had a small mathmatical error in the calculation of the maximum value.

Screenshot 2:

A quick look at the code, a quick slap on the forehead, and a quick recompile and wheee, the sample viewer shows small samples. This sample was only 16 seconds long and 300K in size.

Screenshot 3:

A while later, a few optimisations to the drawing code so it only draws the requested area instead of the whole sample, a few more "DOHS!" fixed and code to actually handle samples that are more than one block (one block == 524288 sample frames or around 24seconds at 22050 frames per second), and we have this monstor. It doesn't look like it from the image, but this is the sample viewer showing the middle minute of a 4 minute long, 25meg sample. Woohoo. Redraws as fast as any other sample, just takes a while to actually load the sample, but so does Sound Forge, so I'm not too worried. Doesn't seem to be that much slower. Only drawback, -- Memory usage for this screenshot: 86meg. Poo. I do have an idea to fix that though.

1st June 2002
Screenshot 4, 5, 6:

The next day, a few hours hacking done as I went out for half the afternoon and the night. Notable in these screenshots is the fact it now handles multiple channels, as opposed to only mono like it was last night. Also handles zooming with the mouse's scroll wheel, but you can't tell that from the shots. This sample is Elvis - A Little Less Conversation. An 18meg wav in stereo at 44,100 Hz, 16-bits.
Also not visible in this sample is the fact that the sample data is now held on a disk file that is mmapped because RAM is expensive and disk space is not.

2nd June 2002:
Uploaded project to Sourceforge.
Some links:


SourceForge Logo