Here is a short presentation of how the idapi (ID API) branch works. Specifically, MusicBrainz search API support. Keep in mind that there is no porcelain at this point.
As input the system asks for a backend (in this case 'musicbrainz) and an alist of terms to search for. The alist is in Emms-track format, which should allow a UI to easily grab elements from a track and search based on those. The system outputs data as Emms tracks so that we can easily merge that information into existing tracks. Since this seems to work OK, Perhaps the next step is to write a simple UI which integrates it into Emms and see if it's useful (and if not, what needs changing). For example, to search for John Coltrane: (emms-idapi-search 'musicbrainz '((info-artist . "John Coltrane"))) Results in several people and groups. One of them being: '(*track* (type . info-musicbrainz-track-artist) (name) (info-musicbrainz-arid "b625448e-bf4a-41c3-a421-72ad46cdb831") (info-musicbrainz-artist "John Coltrane") (info-musicbrainz-type "Person") (info-musicbrainz-country "US") (info-musicbrainz-time ((begin . "1926-09-23") (end . "1967-07-17") (ended . t)))) We can then use the MusicBrainz artist-ID (ARID) to search for an album based on some of the words in the title of the album: (emms-idapi-search 'musicbrainz '((info-album-group . "Blues") (arid . "b625448e-bf4a-41c3-a421-72ad46cdb831")))) This once again returns many items. In this case, releases. We'll focus on this one: '(*track* (type . info-musicbrainz-release) (name) (info-musicbrainz-release-id "eac11336-aac5-4733-961d-fe11bd53cfc7") (info-musicbrainz-title "Coltrane Plays the Blues") (info-musicbrainz-status "Official") (info-musicbrainz-date "1962") (info-musicbrainz-country "US") (info-musicbrainz-track-count 6)) We can then use the MusicBrainz release-id (REID) to search for all of the tracks ("recordings" in MusicBrainz parlance) from this release (in this case, not in the order they are presented on the album): '((*track* (type . info-musicbrainz-recording) (name . "Mr. Syms") (info-playing-time . 322) (info-playing-time-min . 5) (info-playing-time-sec . 22) (info-musicbrainz-recording-id . "38f3bb61-8623-4655-a445-c88643427427") (info-musicbrainz-title . "Mr. Syms") (info-musicbrainz-length-ms . 322600)) (*track* (type . info-musicbrainz-recording) (name . "Blues to You") (info-playing-time . 389) (info-playing-time-min . 6) (info-playing-time-sec . 29) (info-musicbrainz-recording-id . "c3017dea-fe45-4628-b225-88799801faf5") (info-musicbrainz-title . "Blues to You") (info-musicbrainz-length-ms . 389066)) (*track* (type . info-musicbrainz-recording) (name . "Mr. Knight") (info-playing-time . 453) (info-playing-time-min . 7) (info-playing-time-sec . 33) (info-musicbrainz-recording-id . "a2fc8118-ed81-4377-bf9e-cd2cfc6f7542") (info-musicbrainz-title . "Mr. Knight") (info-musicbrainz-length-ms . 453000)) (*track* (type . info-musicbrainz-recording) (name . "Blues to Bechet") (info-playing-time . 346) (info-playing-time-min . 5) (info-playing-time-sec . 46) (info-musicbrainz-recording-id . "b5ab6f52-911d-4eb0-89b1-25109f83ffb6") (info-musicbrainz-title . "Blues to Bechet") (info-musicbrainz-length-ms . 346000)) (*track* (type . info-musicbrainz-recording) (name . "Mr. Day") (info-playing-time . 476) (info-playing-time-min . 7) (info-playing-time-sec . 56) (info-musicbrainz-recording-id . "e6203f50-be18-478b-a7cf-4ae3a2295fd9") (info-musicbrainz-title . "Mr. Day") (info-musicbrainz-length-ms . 476000)) (*track* (type . info-musicbrainz-recording) (name . "Blues to Elvin") (info-playing-time . 472) (info-playing-time-min . 7) (info-playing-time-sec . 52) (info-musicbrainz-recording-id . "23693627-0b64-4be4-891c-f6b610813c5c") (info-musicbrainz-title . "Blues to Elvin") (info-musicbrainz-length-ms . 472466))) A different way to go about it is to search for both an album title and an artist at the same time: (emms-idapi-search 'musicbrainz '((info-album-group . "time out") (info-artist . "dave brubeck"))) This provides a very long list. But we can choose one based on the year. In this case we'll choose the year and place of original release: '(*track* (type . info-musicbrainz-release) (name) (info-musicbrainz-release-id "08051d23-d6ed-4515-b176-3f2a6d67fcd4") (info-musicbrainz-title "Time Out") (info-musicbrainz-status "Official") (info-musicbrainz-date "1959") (info-musicbrainz-country "US") (info-musicbrainz-track-count 7)) >From here we can get the tracks using the same technique as above: (emms-idapi-search 'musicbrainz '((info-title . "") (reid . "08051d23-d6ed-4515-b176-3f2a6d67fcd4"))) '((*track* (type . info-musicbrainz-recording) (name . "Everybody’s Jumpin’") (info-playing-time . 265) (info-playing-time-min . 4) (info-playing-time-sec . 25) (info-musicbrainz-recording-id . "ffdffa5d-9165-4ff3-b21b-b2980d8dcedb") (info-musicbrainz-title . "Everybody’s Jumpin’") (info-musicbrainz-length-ms . 265000)) (*track* (type . info-musicbrainz-recording) (name . "Kathy’s Waltz") (info-playing-time . 291) (info-playing-time-min . 4) (info-playing-time-sec . 51) (info-musicbrainz-recording-id . "83827cc1-9902-44c3-a96c-c761f312fef2") (info-musicbrainz-title . "Kathy’s Waltz") (info-musicbrainz-length-ms . 291226)) (*track* (type . info-musicbrainz-recording) (name . "Pick Up Sticks") (info-playing-time . 257) (info-playing-time-min . 4) (info-playing-time-sec . 17) (info-musicbrainz-recording-id . "79b66dc4-1b8e-4a04-947b-1b6d5d6fee4c") (info-musicbrainz-title . "Pick Up Sticks") (info-musicbrainz-length-ms . 257333)) (*track* (type . info-musicbrainz-recording) (name . "Three to Get Ready") (info-playing-time . 325) (info-playing-time-min . 5) (info-playing-time-sec . 25) (info-musicbrainz-recording-id . "eafb5bca-4ea9-4ea2-aa4b-4963a43b07a4") (info-musicbrainz-title . "Three to Get Ready") (info-musicbrainz-length-ms . 325666)) (*track* (type . info-musicbrainz-recording) (name . "Strange Meadow Lark") (info-playing-time . 445) (info-playing-time-min . 7) (info-playing-time-sec . 25) (info-musicbrainz-recording-id . "dd637f48-6e0f-4606-8df4-f10b55ebe1c9") (info-musicbrainz-title . "Strange Meadow Lark") (info-musicbrainz-length-ms . 445920)) (*track* (type . info-musicbrainz-recording) (name . "Blue Rondo à la Turk") (info-playing-time . 406) (info-playing-time-min . 6) (info-playing-time-sec . 46) (info-musicbrainz-recording-id . "b5c01dd6-2952-40c4-a37e-0dc492b2d885") (info-musicbrainz-title . "Blue Rondo à la Turk") (info-musicbrainz-length-ms . 406533)) (*track* (type . info-musicbrainz-recording) (name . "Take Five") (info-playing-time . 326) (info-playing-time-min . 5) (info-playing-time-sec . 26) (info-musicbrainz-recording-id . "69db5ee7-2114-4dda-981d-d2aa8cba6f1f") (info-musicbrainz-title . "Take Five") (info-musicbrainz-length-ms . 326800))) -- "Cut your own wood and it will warm you twice"