How to Order Posts by Custom Fields?

var_dump your $args arguments:

array(4) {
  ["cat"]=>
  string(7) "2,39,30"
  ["orderby"]=>
  string(14) "meta_value_num"
  ["order"]=>
  string(4) "DESC"
  ["meta_key"]=>
  string(12) "album_rating"
}

The second time you use a key, you overwrite the first time. You cannot build the array like that.

The orderby parameter will take a space separated string, so this is closer:

$args = array(
    'cat' => '2,39,30',
    'orderby' => 'title meta_value_num', 
    'order' => 'ASC',
    'meta_key' => 'album_rating',  
    'order' => 'DESC'
);

But as before, you can’t use the same key twice and you are still trying to use order twice. If you look at the SQL, you will see that only the last value is used and it is applied to the last orderby value.

ORDER BY wp_posts.post_title,wp_postmeta.meta_value+0 DESC LIMIT 0, 1

Still closer…

$args = array(
    'cat' => '2,39,30',
    'orderby' => 'title meta_value_num', 
    'meta_key' => 'album_rating',  
    'order' => 'DESC'
);

And that might get you what you want. To be sure though, you will need a filter:

function alter_order_wpse_117098($orderby) {
  remove_action('posts_orderby','alter_order_wpse_117098');
  $order = str_replace(',',' ASC, ',$orderby);
  return $order;
}
add_action(
  'posts_orderby',
  'alter_order_wpse_117098'
);

Add that filter immediately before the query in question. It will remove itself so shouldn’t mess up any other queries.