Backend connectivity for Pear Radio.
User communication interface.
const user = new User(syncResponseCallback, opts)
await user.ready()
Gets user/streamer information by key.
const info = await user.getUserInfo(key)
User information is an object:
{
publicKey: buffer,
name: string,
description: string,
tags: c.string
}
Gets user/streamer information about the track that is streaming at the moment.
const info = await user.syncRequest(key)
{
block: uint,
artist: string,
name: string
}
Receives stream from remote user/streamer.
const listener = new Listener(userPublicKey, swarm, store)
await listener.ready()
Returns the stream of the remote user core, starting from block fromBlock
. Each block corresponds to ~1 second of audio.
Streams audio data and metadata.
const streamer = new Streamer(keyPair, swarm, store, opts)
await streamer.ready()
Streams single track.
Collection of static methods to read mp3 files and ID3 tags.
Returns { localStream, remoteStream }
. localStream
is a fs.createReadStream
of a given file. remoteStream
streams chunks of the file of ~1 second of audio.
Return metadata and duration information of an mp3 file.
{
file: string // filename
name: string, // track title
artist: string, // track artist
duration: uint, // duration in seconds
path: string // absolute path of the file
}
Http server that stream mp3 files for local consumption.
const httpStreamer = new HttpAudioStreamer()
const port = await httpStreamer.ready()
const { localStream } = Mp3ReadStream.stream(absPath)
httpStreamer.stream(localStream) // stream mp3 file in localhost:$port
Hyperbee that stores pear radio user information.
const configuration = new PearRadioConfiguration()
await configuration.ready()
Returns value of the given key.
Sets value for the given key, with format compact-encoding.any
.
Hyperswarm based tags search for users connectivity.
const tagManager = new TagManager(user)
await tagManager.ready()
The tagManager will announce itself in the #all
topic, and store all connections in the tagManager.tags
.
Announces tag manager in the given tag topic.
await tagManager.searchByTag(tag)
tagManager.on('stream-found', (userInfo) => {
console.log(userInfo)
})