Воспроизведение аудио через веб-сокет - PullRequest
0 голосов
/ 29 июня 2018

Я создаю чат и хочу, чтобы пользователь получал звуковое уведомление, если появилось новое сообщение. В настоящее время я отправляю все мои файлы, которые клиент получит так:

var http_files = {};
 [
    ["/jquery.min.js","application/javascript"],
    ["/css/main.css","text/css"],
    ["/resumesound.mp3","audio/mpeg"], <-- doesn't work
    ["/css/normalize.css","text/css"],
    ["/js/main.js","text/javascript"],
    ["/js/vendor/modernizr-2.6.2.min.js","text/javascript"],
    ["/chat-frontend.js","application/javascript"],
    ["/index.html","text/html"]
 ].forEach(function(fn){
     http_files[fn[0]]={
         content : fs.readFileSync('.'+fn[0]).toString(),
         contentType : fn[1]
     };
 });
var server = http.createServer(function(request, response) {
     // this doubles as a way to serve the files, and a connection for websocket to use
     var file = http_files[request.url];
     if (file) {
         response.writeHeader(200,{"content-type" : file.contentType});
         response.write(file.content);
         return response.end();
     }
     response.writeHeader(404,{"content-type" : "text/plain"});
     response.write("not found");
     return response.end();

 });

Но по какой-то причине звук не воспроизводится, и я вижу это в консоли, когда звук пытается воспроизвести.

DOMException: не удалось загрузить, поскольку не найден поддерживаемый источник.

реализация:

var sound = '/resumesound.mp3';
var audio = new Audio(sound);
audio.play();

1 Ответ

0 голосов
/ 01 июля 2018

Поскольку аудио является двоичным, а не обычным текстом, я должен «распустить строки» своих файлов, прежде чем отправить их клиенту.

Изменение этой строки сделало свое дело:

content : fs.readFileSync('.'+fn[0]).toString(),

Кому:

content : fs.readFileSync('.'+fn[0]),

Код:

var http_files = {};
 [
    ["/jquery.min.js","application/javascript"],
    ["/css/main.css","text/css"],
    ["/resumesound.mp3","audio/mpeg"],
    ["/css/normalize.css","text/css"],
    ["/js/main.js","text/javascript"],
    ["/js/vendor/modernizr-2.6.2.min.js","text/javascript"],
    ["/chat-frontend.js","application/javascript"],
    ["/index.html","text/html"]
 ].forEach(function(fn){
     http_files[fn[0]]={
         content : fs.readFileSync('.'+fn[0]).toString(),
         contentType : fn[1]
     };
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...