Обновление.
Выложил все файлы на 
Github — алгоритм шифровки, расшифровки, пример использования токена. Здесь будет только последняя версия кода расшифровки на PHP, в соответствии с вопросом.
Обновление 2.
Создал 
репозиторий с кодом получение токена VK, подходящего для Audio API, по GMS ID и GMS токену.
Обновление 23.11.17
Теперь адрес аудиозаписи, похоже, привязан к идентификатору пользователя ВКонтакте. Нужно указать его в коде.
<?php
define('VK_ID', ID_пользователя_в_виде_числа);
function decode($str){
  $vals = explode("#", explode("?extra=", $str)[1]);
  $tstr = vk_o($vals[0]);
  $ops = vk_o($vals[1]);
  $ops_arr = explode(chr(9), $ops);
  $len = sizeof($ops_arr);
  for($i = $len - 1; $i >= 0; $i--){
    $args_arr = explode(chr(11), $ops_arr[$i]);
    $op_ind = array_shift($args_arr);
    switch($op_ind){
      case "v": $tstr = vk_v($tstr); break;
      case "r": $tstr = vk_r($tstr, $args_arr[0]); break;
      case "x": $tstr = vk_x($tstr, $args_arr[0]); break;
      case "s": $tstr = vk_s($tstr, $args_arr[0]); break;
      case "i": $tstr = vk_i($tstr, $args_arr[0]); break;
    }
  }
  return $tstr;
}
$vk_str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN0PQRSTUVWXYZO123456789+/=";
function vk_o($str){
  global $vk_str;
  $len = strlen($str);
  $result = "";
  for($s = 0, $index2 = 0; $s < $len; $s++){
    $sym_index = strpos($vk_str, $str[$s]);
    if($sym_index !== false){
      $i = (($index2 % 4) !== 0) ? ( ($i<<6) + $sym_index) : $sym_index;
      if(($index2%4) != 0){
        $index2++;
        $shift = -2 * $index2 & 6;
        $result .= chr(0xFF & ($i >> $shift));
      } else {
        $index2++;
      }
    }
  }
  return $result;
}
function vk_s($str, $start){
  $len = strlen($str);
  if($len > 0){
    $cur = abs($start);
    $shuffle_pos = array();
    for($i = $len - 1; $i >= 0; $i--){
      $cur = (($len * ($i + 1)) ^ $cur + $i) % $len;
      $shuffle_pos[$i] = $cur;
    }
    for($i = 1; $i < $len; $i++){
      $offset = $shuffle_pos[$len - $i - 1];
      $prev = $str[$i];
      $str[$i] = $str[$offset];
      $str[$offset] = $prev;
    }
  }
  return $str;
}
function vk_i($str, $i){
  return vk_s($str, $i ^ (int) VK_ID);
}
function vk_v($str){
  return strrev($str);
}
function vk_r($str, $i){
  global $vk_str;
  $vk_str2 = $vk_str . $vk_str;
  $vk_str2_len = strlen($vk_str2);
  $len = strlen($str);
  $result = "";
  for($s = 0; $s < $len; $s++){
    $index = strpos($vk_str2, $str[$s]);
    if($index !== false){
      $offset = ($index - $i);
      if($offset < 0){
        $offset += $vk_str2_len;
      }
      $result .= $vk_str2[$offset];
    } else {
      $result .= $str[$s];
    }
  }
  return $result;
}
function vk_x($str, $i){
  $xor_val = ord($i[0]);
  $str_len = strlen($str);
  $result = "";
  for($i = 0; $i < $str_len; $i++){
    $result .= chr(ord($str[$i]) ^ $xor_val);
  }
  return $result;
}
echo decode($argv[1]);
?>