DAAP (iTunes) playlist

On my NAS (Buffalo LinkStation) I’m using mt-daapd in order to show playlists on iTunes …

Automatically create smart playlists?

I have arranged .mp3 using paths on filesystem :

  • preferred : is the directory for my favorites music
  • matrimonio : directory of my wedding music
  • stefania : directory for my wife’s music
  • <artist> : directory for artists

 I used Jaikoz (auto tag) in order to arrange my music

Playlist for mt-daapd can be created editing file mt-daapd.playlist.
Format is :

"<name_of_playlist>" { <filter criteria> }

You can read all details about syntax into mt-daapd.playlist (here there is a description of format).
For example:

"90's Music" {
 Year >= 1990 && Year < 2000
 }
 "New Music > 2000" {
 Year >= 2000
 }
 "PREFERITI" {
 path includes "00_PREFERITI"
 }
 "Recently Added" {
 Date after 2 weeks ago
 }

Below a one-single-line shell command in order to create playlist starting from  filesystem structure.

STEP #1

Backup current playlist:

cp /opt/etc/mt-daapd/mt-daapd.playlist /opt/etc/mt-daapd/mt-daapd.playlistcpy2010-05-01

STEP #2

find /mnt/disk1/share/0_MP3/ -type d -maxdepth 1 -exec basename {} \; | awk '{ print "\""$0"\" { path includes \""$0"\" } ";}' >> /opt/etc/mt-daapd/mt-daapd.playlist

STEP #3

 Restart mt-daapd and use iTunes in order to check the final result.

Syntax

# The syntax is as follows:
#
# "Playlist Name" { expression }
#
# An expression consists of:
#
# ID3-tag-name operator operand
#
# Where valid ID3-tag-names are:
# Artist (string)
# Album (string)
# Genre (string) 
# Path (string) -- full path to song, including filename
# Composer (string)
# Orchestra (string)
# Conductor (string)
# Grouping (string) -- I don't even know what this is...
# Comment (string)
# Type (string) -- "mp3 audio file", "m4a audio file", etc.
# Year (int)
# BPM (int)
# Bitrate (int)
# Date (date)
#
# Valid operators include:
# is, includes (string)
# >, <, <=, >=, = (int)
# after, before (date)
#
# the "is" operator must exactly match the tag,
# while the "includes" operator matches a substring.
# Both matches are case-insensitive
#
# Valid operands include:
# "string value" (string)
# integer (int)
#
# Multiple expressions can be anded or ored together,
# using the keywords OR and AND (or || and &&).
# The unary not operator is also supported using the
# keyword NOT (or !)
#
# Examples:
#
# "techno" {
# genre includes "techno" ||
# artist includes "zombie"
# }
#
# This would match songs by "Rob Zombie" or "White Zombie",
# as well as those with a genre of "Techno-Industrial" or
# "Trance/Techno", for example.
#
# "AAC Files" {
# path includes ".m4a" ||
# path includes ".m4p"
# }
#
# This would match all m4a and m4p files -- i.e. iTunes-ripped aac files
# or songs downloaded from iTMS.
#
# "Orchestral Music" {
# Orchestra !IS "" ||
# Conductor !IS ""
# }
#
# This would match anything with *anything* entered as a
# orchestra or conductor... this would probably include any
# orchestral music. Kind of ugly, but works!
#
#
# DATES
#
# Dates are kind of funky. The "date" of a file is when it
# was created on the file system, or the date that it was first
# entered into the database, whichever is earlier. The date of 
# a file can be matched with the terms "before" or "after".
#
# One example of a valid date is a date in yyyy-mm-dd format:
#
# "Files added after January 1, 2004" {
# date after 2004-01-01
# }
#
# There are also some special date keywords:
# "today", "yesterday", "last week", "last month", "last year"
# 
# A valid date can also be made by appling an interval to a 
# date. As an example, a valid date might be:
#
# 3 weeks before today
# or
# 3 weeks ago 
#
# You can combine these, of course.
#
# "3 weeks before today" is the same as "2 weeks before last week" 
# or "1 week after last month" or "21 days before today" or
# "20 days before yesterday" or "7 days after last month". You get
# the idea.
# 
# Note that the playlists are only generated at the time that mt-daapd
# starts... so while the dates will be accurate at start time, they
# may become inaccurate with time. Yes, I know... it's on my list. :)
#
# So, examples:
#
# "Recently Added MP3s" {
# date after last month AND file includes ".mp3"
# } 
#
# This matches only mp3 files added in the last 30 days.
#
#