Exemplo n.º 1
0
    public void SendMessage_Audio()
    {
        NeedsAudio = false;

        float[] AudioSignalOut = new float[AudioMessage.AudioSliceSize];

        //Aggregate NonMuted Classmates
        {
            foreach (var client in ClientsList)
            {
                int offset = (client.NextSliceToWrite + (ChunksPerSecond / 2)) % ChunksPerSecond;

                for (int i = 0; i < AudioMessage.AudioSliceSize; i++)
                {
                    AudioSignalOut[i] += client.audioData_Float[(i + AudioChunkOffsets[offset]) % SampleRate];
                }
            }
        }

        var audioMessageToClient = new AudioMessage();

        int samplesPerChunk = SampleRate / ChunksPerSecond;         //todo: this should be static like in client for consistency

        audioMessageToClient.data = new byte[samplesPerChunk * sizeof(float)];

        Buffer.BlockCopy(AudioSignalOut, 0, audioMessageToClient.data, 0, samplesPerChunk * sizeof(float));

        audioMessageToClient.header.messageType = MessageHeader.MessageType.audioMessage; //audio data = we need an enum I guess
        audioMessageToClient.header.ClientID    = 255;                                    //null userid
        audioMessageToClient.header.dataByte    = (byte)NextSliceToWrite;                 //which audio slice we're using

        WriteBytesToStream(audioMessageToClient.GetBytes(), networkStream);
    }
Exemplo n.º 2
0
 public static void WriteMessageToStream(AudioMessage audioMessage, NetworkStream networkStream)
 {
     WriteBytesToStream(audioMessage.GetBytes(), networkStream);
 }