Beispiel #1
0
    /// <summary>
    /// Corutine that captures an audio clip from the microphone, obtains its
    /// relevant data and sends the corresponding header and chunk messages.
    /// </summary>
    /// <returns>IEnumerator to be run.</returns>
    protected override IEnumerator SendStream()
    {
        uint clipId = nextId;

        nextId += 1;
        Debug.Log("Sending clip with ID " + clipId + ".");
        //Texture2D texture = Paint(1000);
        float[] samplesData = new float[voiceClip.samples * voiceClip.channels];
        voiceClip.GetData(samplesData, 0);
        int size = Mathf.FloorToInt(samplesData.Length / Mathf.Ceil(samplesData.Length * (float)sizeof(float) / maxChunkSize));

        Debug.Log("Chunk size " + size);
        //lastCapturedClip = voiceClip;
        var headerMessage = new AudioHeaderMessage(networkIdentity.netId.Value,
                                                   clipId, voiceClip.samples, voiceClip.channels, frequency, size);

        SendHeaderMessage(clipMsgType, headerMessage);

        List <(int, float[], int)> chunks = DivideArrayInChunks(samplesData, size);

        foreach (var chunk in chunks)
        {
            var chunkMessage = new AudioChunkMessage(networkIdentity.netId.Value, clipId, chunk.Item1, chunk.Item2, chunk.Item3);
            SendChunkMessage(clipMsgType, chunkMessage);
        }

        Debug.Log("Clip for ID " + clipId + " has been sent.");
        yield return(new WaitForSeconds(0.01f));
    }
Beispiel #2
0
    /// <summary>
    /// Processes the header messages received on the client.
    /// </summary>
    /// <param name="header">Clip's header message.</param>
    private void OnAudioHeaderReceived(AudioHeaderMessage header)
    {
        AudioStruc clipS = new AudioStruc(header.samples, header.channels, header.frequency, header.chunkSize);

        msgData.RecoverEarlyChunks(header, clipS, SaveChunk);
        if (msgData.CheckTimestamp(header))
        {
            StartCoroutine(
                msgData.WaitTillReceiveAllTheStream(
                    header,
                    (uint id) => msgData[id].samplesReceived < msgData[id].data.Length,
                    streamTimeout));
        }
    }