public static void StartListening(Action <TrackWithStitchedBeam> funcThatWantTheData) { IConnection connection = RabbitMQConnection.getConnection(); liveBeamChannel = connection.CreateModel(); liveBeamChannel.ExchangeDeclare(exchange: "trackWithStitchedBeamData", type: ExchangeType.Fanout, durable: true, autoDelete: false, arguments: null); liveBeamChannel.QueueDeclare(queue: "liveBeamData", durable: true, exclusive: false, autoDelete: false, arguments: null); liveBeamChannel.QueueBind(queue: "liveBeamData", exchange: "trackWithStitchedBeamData", routingKey: ""); var consumer = new EventingBasicConsumer(liveBeamChannel); consumer.Received += (model, ea) => { byte[] body = ea.Body; TrackWithStitchedBeam liveBeam = JsonConvert.DeserializeObject <TrackWithStitchedBeam>(Encoding.UTF8.GetString(body)); funcThatWantTheData(liveBeam); }; liveBeamChannel.BasicConsume(queue: "liveBeamData", autoAck: true, consumer: consumer); }
private static void writeToStream(TrackWithStitchedBeam liveBeam) { var position = stream.Position; stream.Position = stream.Length; waveFileWriter.Write(liveBeam.StitchedBeam, 0, liveBeam.StitchedBeam.Length); waveFileWriter.Flush(); stream.Position = position; }
public static void LiveAudioStreamRecieved(TrackWithStitchedBeam liveBeam) { if (liveBeam.TrackNum == currentPlayingTrackId) { if (playing) { writeToStream(liveBeam); if (trackChanged) { // start playing the audio with delay to avoid getting to end of stream before the next stream part Thread.Sleep(100); var provider = new RawSourceWaveStream(stream, waveFormat); player.Init(provider); player.Play(); trackChanged = false; Console.WriteLine($"Now playing track: {currentPlayingTrackId}"); } } } }