Who's
MyDJ?
Hear Here

Archive for May, 2008

Mixer 1.9 Preview: Acoustic Tweaks

Monday, May 19th, 2008

With the beta 4 update of 1.9, we’re introducing yet another rule which you can use to make mixes just the way you want. This particular rule gets right to the core of our acoustic analysis, and because it lets you tweak the results based on acoustic properties, we’ve named it tweak.

Tweak

The tweak rule lets you push a playlist in one of six directions, based on acoustic properties. Because the core playlisting engine is doing a lot of different work to build the list, these particular rules are more like nudges in a given direction, rather than an absolute lock on the desired property. Still, they can be useful. The key properties exposed in this version are bass, energy, and tempo.

The full syntax looks like this:

<tweak cond="expr" index="type" more="boolean" weight="expr"/>

The index attribute lets you choose the property you want to base the tweak on - either bass, energy, or tempo (there is no default value, this attribute is required). The more attribute lets you specify if you want more or less of the given property - more tempo will mean faster, less tempo will mean slower, and so forth (as a reminder, though, these are general nudges rather than hard and fast rules). The default is more! The default weight is 2.5.

As an example, here’s a recipe that will try to produce a playlist which is overall faster and higher energy than an equivalent mix without the recipe:

<recipe name="Give Me More">
  <tweak index="energy" more="true"/>
  <tweak index="tempo" more="true"/>
</recipe>

One common thread we’re hearing from people playing with all these new features is the need for more examples. When we finish this next round of testing, we hope to introduce some ways to make all this power even easier to use.

Mixer 1.9 Preview: A Few Last Items and Nested Filters

Friday, May 9th, 2008

Welcome to day five of MusicIP Mixer 1.9 preview week. This will be the last post, for now, about the new features. I’ll wrap up with a few final miscellaneous features.

Two Extra Rules

With the pile of constraints, modifiers, and other rules introduced so far, here are two more which might, at first blush, seem a little odd. The first one simply replaces the acoustic ranking algorithm with a fixed "no bias" level.

<fixed/>

This lets you apply any of the other rules by themselves, without the acoustic data.

The jitter rule lets you introduce some controlled randomness in your mixes. This is similar to the variety slider for regular mixes, but tends to give better results. The full syntax looks like this:

<jitter cond="expr" exp="bool" low="expr" high="expr"/>

The exp option uses an exponential distribution instead of a flat distribution (the default is flat).

The low and high options specify the range of the jitter. The default range is .9 to 1.1. Bigger ranges will produce more randomness.

File/Save As Text

Moving on from recipes, one of the new features is the rather unassuming Save As Text option under the File menu. This takes whatever data is being displayed in the song window, and saves it as tab-delimited text. Just choose the columns you want to have displayed (you can right-click on the column headers to enable and disable columns, drag the columns around to position them, and click to sort them). Then use Save As Text to get a text version of the mix. This can be an easy way to share lists of songs, or post them to blogs. Simple, but convenient.

Nested Filters

Many months ago, we conducted a poll on the forums to see what the most requested feature for 1.9 would be (with some restrictions). The winning selection, with 50% of the votes, was nested filters. So, what’s a nested filter?

Regular filters allow you to create a set of conditions for which songs are currently visible. Some of our users like filters so much that they create a lot of them. In this case, the left hand pane becomes a bit unwieldy with too many entries. In order to clean things up, it’s convenient to be able to store them in a tree structure, like the folders on your hard drive.

Rather than stop there, though, we added an extra twist - you can choose to have nested filters inherit the properties of the parent filter. In this way, you can build a heirarchy with increasingly narrow conditions, to let you easily drill down to whatever specific filter you have in mind. (If you don’t want to inherit conditions, just make sure the parent filters are empty.)

To create a nested filter, either right-click on the parent filter and choose New Filter, or use drag-and-drop to drop one filter on to another. This should work just like other tree controls you may be familiar with.

We hope you enjoy the new version of the mixer. As always, if you have questions or comments, you can leave them here or on the forums.

Mixer 1.9 Preview: New Recipe Options

Thursday, May 8th, 2008

Yesterday I showed some new data which the mixer makes available through power words. However, there’s even more data buried inside the newest version of the mixer. To use that, you’ll need to understand how to use recipes - you might want to review our earlier posts introducing recipes or the official documentation if you are planning on using this feature. In a nutshell, recipes are special rules which modify how the mixer creates playlists - so you can customize the algorithms until they are just right for you.

The good news is that even if you don’t feel comfortable making your own recipes, you can still use recipes created by other people - since the description is basic XML, you can simply use your favorite text editor to copy and paste recipes which other people have created, and then choose those recipes from the preferences menu.

Up to now, the only rules available for recipes were constraints and modifiers. Version 1.9 introduces new rules which use the extra data available through MusicDNS (some of these are simply convenience wrappers around constraints or modifiers you could write yourself using the new power words). The following summary shows the most common options. Note that all rules share the following attributes:

cond="expr" - This indicates a conditional rule. The value of the expression will determine whether the rule is to be applied to a given mix.

weight="expr" - This indicates a modifier weight. The higher the number, the more likely a song is to show up in a mix (2 would mean roughly twice as likely). Numbers less than one make songs less likely to show up in a mix (.5 means roughly half as likely).

All attributes are optional - each rule has default values for general use.

Era

The era rule lets you incorporate information about when a song was first released. The full syntax looks like this:

<era cond="expr" type="type" mode="mode" range="expr" end="bool" weight="expr"/>

The type attribute controls the primary meaning of this rule. If the value is lock, this is a constraint. If the value is bend, it will bring matching songs closer. If the value is contemporaries, it will bring matching artists closer (this is the default).

The mode attribute controls which year data is used. It may be mip (use only MusicIP years), mip-local (use MusicIP years if present, or local years otherwise - this is the default), local-mip (use local years if present, or MusicIP years otherwise) or local (only use years from your own metadata).

The range attribute controls how large a range of years is considered to match - the default is plus or minus 5 years, but you can choose any range you like. The range may even be an expression.

The end attribute is used when comparing artist eras. If true, then the full release range for an artist is used - otherwise, only the initial date is used. The default is to only use the initial year for each artist.

Location

The geo rule lets you incorporate information about where a song is most popular, based on the anonymous data collected through the mixer and MusicDNS. For instance, if a certain artist is big in Germany, then you can associate songs by that artist with songs by other artists which are big in Germany. The full syntax looks like this:

<geo cond="expr" type="type" weight="expr"/>

If you want to use this as a constraint, set type="lock". Otherwise, it will work as a modifier, and you can override the default weight if you choose.

Genre

The genre rule lets you incorporate information about more detailed genres, like Heavy Metal, Disco, or Funk. This does not depend on your own tags, but on how other people around the world have tagged their songs. Using this rule, you can associate artists based on similar genre tags. The full syntax looks like this:

<genre cond="expr" type="type" weight="expr"/>

If you want to use this as a constraint, set type="lock". Otherwise, it will work as a modifier, and you can override the default weight if you choose.

Popularity

The popularity rule lets you incorporate information about how popular a song is - do you want just the hits, or do you want to reach deeper into an artist’s catalog? The full syntax looks like this:

<popularity cond="expr" type="type" weight="expr"/>

The type attribute may have one of the five following options:

  • hits - only match the most popular songs (the default),
  • mainstream - prefer more popular songs,
  • mixed - blend popular and less popular songs,
  • offbeat - prefer less popular songs,
  • fringe - only match less popular songs.

Social Contexts

The social rule lets you incorporate information about how artists relate to each other in various social contexts. The full syntax looks like this:

<social cond="expr" source="source" type="type" weight="expr"/>

If you want to use this as a constraint, set type="lock". Otherwise, set type="bend", and it will work as a modifier, and you can override the default weight if you choose. (The default for this rule is to lock.)

The source attribute indicates the general type of data you want to include, and may be any combination of the following values:

  • A - album relationships (artists who appear in collections together)
  • C - commonly confused artists (casual listeners commonly mistake these artists)
  • P - playlist relationships (hand made playlists may include these artists)
  • W - working relationships (artists who have played in bands together)

The default value is all four: ACPW.

Example

A quick example may help clarify how to use these new rules. Here we will make a recipe to focus on popular music, which has similar genres and eras.

<recipe name="example">
    <popularity type="mixed"/>
    <genre weight="3"/>
    <era weight="2"/>
</recipe>

This will combine both popular and less popular tracks. Songs which are tagged with similar genres to the seed tracks will be roughly three times more likely to show up than songs with non-matching genres. Songs which were released within five years of the seed tracks will be roughly twice as likely to show up. (So songs with matching genre and era will be six times as likely to be included in the mix.)

As you can see, with this powerful new set of rules, the mixer combines the best of the social context with the best acoustic algorithms to provide unprecedented flexibility in create your own personal playlists - when you want it, how you want it.

Tomorrow we’ll wrap up this first set of previews with a quick review of some smaller changes which can still prove remarkably useful.

Mixer 1.9 Preview: New Power Words

Wednesday, May 7th, 2008

In this preview, I’m going to discuss some of the new data which the 1.9 mixer makes available, and show a few of the ways to use it. For this post, I’ll focus on some new keywords which have been added to the mixer vocabulary.

Reviewing Expressions

As a basic review, the mixer lets you use expressions in a variety of contexts, which can provide powerful tools for working with your music collection. These expressions can include references to basic metadata already in your file, like artist, title, or path. If you enable Power Search from the preferences dialog, you can enter an expression into the search bar with a preceding question mark, to do a power search, like this:

?seconds > 180

This will show all songs over 3 minutes.

Another context for expressions is adding columns to the song view in order to show data which otherwise might not be visible. For example, you might want to show how many channels your audio files have (1 for mono, or 2 for stereo). Normally this is not exposed in the user interface, but you can add it with the new channels keyword. To do this, simply edit the powerwords.txt file in your installation directory (copy examplewords.txt to powerwords.txt if you don’t already have one), and add a Power Column, like this:

[Channels] channels

The word inside brackets is the title which will show up in the song list, and the rest of the line is any expression (in this case, a single word, but it could just as well be bytes / seconds or any other expression). If you want the column to sort numerically, place a # symbol after the closing bracket. If you want to format a number as a date, place an @ symbol after the closing bracket.

For completeness, you can also use expressions inside patterns. In this case, just use the %{ } syntax, like this:

%{seconds}

This lets you access any available data when updating metadata or constructing paths.

New Keywords

Now that we’ve seen how powerful expressions can be, what new options are exposed in version 1.9? We’ve already seen the channels keyword above. Four more new words are missingname, missingartist, missingalbum, and missinggenre. Normally, if your files are missing metadata for artist, album, genre, or title, then the mixer provides a default value like “Miscellaneous” or “Various Artists”. If you want to find out whether a file is actually missing the metadata, or if it simply had one of those default values, you can use the associated keyword to find the relevant songs.

The most useful new keywords come from an improved connection between the mixer and MusicDNS. The central database behind MusicDNS has grown to over a billion rows of anonymous data, which gives us a lot of information about what music is popular, where it’s popular, and how it’s tagged. Additionally, as the data in MusicDNS is connected to MusicBrainz, we have access to richer metadata about artists. Version 1.9 includes the following new keywords (these are case insensitive):

Keyword Meaning
artistDNSgenre
genreDNSgenre
songDNSgenre
This represents the MusicDNS genre attached to the artist, genre, or song. These provide high level, simple genres which can be used to organize your music.
artistBegin
artistEnd
These are the first and last years during which an artist released new tracks (if known).
songBegin This is the first year the track was released (if known).
artistReach This is a numeric representation of how popular an artist is, according to MusicDNS. Zero is the least popular, and one is the most popular.
songReach
songRelativeReach
This is a numeric representation of how popular a song is, according to MusicDNS. Zero is the least popular, and one is the most popular. Relative reach is the same scale, but refers to how popular a song is relative to other songs by that artist (the most popular song by an artist will always have a relative reach of 1).

Note that the above data depends on MusicDNS being able to identify your music, and connect it to our main database.

One quick example will show just how cool this feature can be. In this case, I have a library with two songs by “Nancy Wilson”. However there are two Nancy Wilsons - one is the jazz singer, and the other is a member of the rock band Heart. I’ll create a Power Column using artistBegin, like this:

[Artist Begin]# artistBegin

Now, in my songs list, I get the following image:

The extremely cool feature here, is that the mixer knows that the two songs are by different Nancy Wilsons, and provides the correct date in each case!

Final Words

You can also use expressions to power constraints and modifiers, which let you make your own rules for customizing playlists. Tomorrow we’ll continue our exploration of the new data available in the mixer by looking at the upgraded features available with recipes.

Mixer 1.9 Preview: Freestyle Mixes

Tuesday, May 6th, 2008

If you’ve used the mixer for awhile and have a premium key, you’re probably already aware that there are lots of ways to make mixes besides just selecting a song and pressing the mix button. For instance, you can create waypoint mixes, spiced playlists, or morph existing collections of songs. With version 1.9, we’ve added a new option: freestyle mixes.

A freestyle mix will take your seed selection, like a regular mix, and use that as the starting point to create a new mix. However, after each new song is added, that new song will become the seed as the mix progresses. In this way, the playlist will drift around your collection, stopping for a while here and there before moving into another section. (Particularly astuste observers may note that this is in some ways similar to a smooth shuffle throughout your collection.)

To create a freestyle mix, select your seed like usual, then choose the Power Tools/Freestyle Mix menu. All the usual options work, including playlist size, filters, and recipes.

Tips For Creating Freestyle Mixes

The existing tips page provides a bunch of good ideas for tweaking your mixes, but a few issues commonly show up when initially playing with freestyle mixes in particular.

Too Much Repetition - A freestyle mix will wander around your collection, but if it hits an area dominated by a single artist, you may get a “hot streak” of songs by that artist. In order to tame this beast, you’ll probably want to ue the “Restrict duplicate artists in a mix” option. Set this to at least one or two to help shake things up (unless you are, for instance, making a freestyle mix of just the songs by a single artist).

Too Much Variety - This is the flip side of the previous problem. If you start with your entire collection, you might very well go from classical, to new age, to jazz, to pop, to rock, and end up in metal. If that’s what you’re looking for, great! Otherwise, you might want to create a filter to put some boundary conditions on what sort of music is allowed for a specific freestyle mix. In this way, you can still provide some rough context (all rock songs, or all songs from the 80’s). Just right-click in your library, select New Filter, and choose the conditions which you are interested in. Select the filter, then choose your seed and select freestyle mix from the Power Tools menu.

If you are using a filter, you might not care too much which seed you start out with. If you want to just randomly pick a seed, one easy way is to select All Genres and All Artists, then shuffle the results, and use whatever’s at the top as your seed.

One last note: you can make multi-seed freestyle mixes - in this case, each seed forms its own freestlye mix, and the results are woven together. If this gets too trippy, you might want to consider smooth shuffling the results in order to get some reasonable structure back into your playlist.

Tomorrow, we’ll start looking at some of the new data exposed in MusicIP Mixer 1.9.

MusicIP Mixer 1.9 Beta

Monday, May 5th, 2008

Over the next week, I’m going to describe some of the changes which are being introduced in the latest update to MusicIP Mixer. First, a few brief words about this blog - as you may have noticed, we haven’t been updating this much. Our focus has been on creating a lot of back-end infrastructure and support, and that doesn’t lead to a lot of interesting blog posts. Also, with the forums, we have an easy way to interact more directly with our users. However, with the 1.9 beta release, I thought it would be worth a few posts to cover the new features. If you’ve missed the regular blog updates, and would like to see it updated more frequently, leave a comment and let us know. Otherwise, we’ll probably continue to use the forums as our main channel of communication.

As before, the beta will be initially available only on Windows. To download the beta, you will need to create an account on the MusicIP website, and join the beta program.

So, what sorts of goodies can you expect in 1.9? Here are some teasers to whet your appetite.

Optimizations Aplenty

A lot of behind the scenes work has gone into our core engine. The communication to our server has been tightened to be more robust, our use of threads has been improved to accelerate the validation process, and memory usage during validation has been reduced. While working on the web-based version of our engine (which supports millions of songs), we’ve dramatically increased the speed of generating playlists - this shows up mostly noticeably with faster waypoint mixes and morphs.

Improved Mixes

This release includes an update to the core algorithms we use to generate the mixes themselves. This shows up in the artist recommendations (right-click on an artist and choose Similar Artists) as well as in regular mixes. On the preferences dialog, this update is configurable as MyDJ Ranking V2.

Additionally, we’re introducing a ton of new options for the recipes feature. This gives you access to the masses of data available through MusicDNS, to tweak, nudge, and adjust your mixes in a whole variety of new ways. Some of this data is also available through power words, so you can use it in custom searches, columns, and other contexts.

Naturally, we’ve also included a bunch of bug fixes addressing some of the most common issues reported by our users. Full details on the bug fixes and minor changes will be available on the beta forum. Tomorrow, we’ll introduce a brand new way to create mixes.