отказ от ответственности: новичок в nodeJS и разборе аудио
Я пытаюсь проксировать цифровой радиопоток через приложение ExpressJS с помощью node-icecast который отлично работает. Я получаю mp3-поток радио и через node-lame декодирую mp3 в PCM, а затем отправляю это к динамикам. Все это работает прямо из примера readme проекта github:
var lame = require('lame');
var icecast = require('icecast');
var Speaker = require('speaker');
// URL to a known Icecast stream
var url = 'http://firewall.pulsradio.com';
// connect to the remote stream
icecast.get(url, function (res) {
// log the HTTP response headers
console.error(res.headers);
// log any "metadata" events that happen
res.on('metadata', function (metadata) {
var parsed = icecast.parse(metadata);
console.error(parsed);
});
// Let's play the music (assuming MP3 data).
// lame decodes and Speaker sends to speakers!
res.pipe(new lame.Decoder())
.pipe(new Speaker());
});
Сейчас я пытаюсь настроить службу для идентификации музыки с помощью Doreso API. Проблема в том, что я работаю с потоком и у меня нет файла (и я еще недостаточно знаю о потоках, доступных для чтения и записи, и медленном обучении). Я некоторое время оглядывался, пытаясь записать поток (в идеале в память), пока у меня не было около 10 секунд. Затем я передал бы эту часть звука в свой API, однако я не знаю, возможно ли это или не знаю, с чего начать с нарезки 10 секунд потока. Я подумал, что, возможно, попытаюсь передать поток в ffmpeg, поскольку у него есть опция -t для длительности, и, возможно, это может ограничить его, однако у меня это еще не работает.
Любые предложения по сокращению потока до 10 секунд были бы потрясающими. Спасибо!
Обновлено: изменился мой вопрос, так как я изначально думал, что получаю PCM и конвертирую в mp3 ;-) У меня было наоборот. Теперь я просто хочу отрезать часть потока, пока поток все еще питает динамик.