В общем, разобрался сам.
На всякий случай на будущее отвечу сам.
Если кратко - необходимо создать файл php, подставить туда необходимые заголовки и прочитать из него нужный аудиофайл. Нужный файл возьмётся из сессии или гет-переменной (кому как удобнее).
В простейшем виде это будет выглядеть примерно вот так:
<?php
//стартуем сессию, чтобы работали сессионные переменные
session_start();
//ниже классы для подключения к базе и запроса нужной инфы из неё (путь к файлу и имя файла)
class DB extends PDO
{
public $dsn = 'mysql:host=127.0.0.1;dbname=database';
public $user= 'root';
public $pass= 'password';
public $opt = array(PDO::ATTR_ERRMODE=> PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC,PDO::ATTR_EMULATE_PREPARES=>false);
public function __construct()
{
parent::__construct($this->dsn, $this->user, $this->pass);
parent::exec("SET NAMES utf8");
}
}
class Connect{
private static $instance=null;
private function __construct() {}
private function __clone() {}
public static function run() {
if (self::$instance == NULL) {
self::$instance = new DB();
}
return self::$instance;
}
final public function __destruct() {
self::$_instance = null;
}
}
class Data{
var $path;
var $filename;
function getDataByID($id){
$pdo = Connect::run();
$query = $pdo->prepare("SELECT * FROM data WHERE id = ? LIMIT 1");
$query->execute(array($id));
$count = $query->rowCount();
if($count>0){
$row = $query->fetch();
$this->path = $row['file_path'];
$this->filename= $row['filename'];
return true;
}
else{
return false;
}
}
}
//проверяем наличие сессионной переменной
if (isset($_SESSION['id']) && !empty($_SESSION['id'])){
$data= new Data;
$data->getDataByID($_SESSION['id']);
$file = $data->path.'/'.$data->filename; //вставляем полученные из БД данные
if (file_exists($file)) { //проверяем наличие файла
header("Content-Transfer-Encoding: binary");
header('Content-Length: '. (string)filesize($file)); // пишем размер файла
header('Content-type: audio/wav');
header('Cache-Control: no-cache');
readfile($file);
exit;
}
}
Вот как-то так.