Как получить доступ к значению параметра из Action <>, вызываемого с помощью лямбда-выражения в C #, и сохранить его в массиве - PullRequest
0 голосов
/ 07 мая 2018

Я работаю над приложением, разработанным для Unity 3D, в котором используются голосовые библиотеки Photon Network и Photn. Я хотел бы получить аудиопоток, сохранить его в потоке, а затем сохранить его в файле WAV. Из поддержки Голосовых форумов Photon мне сказали использовать:

PhotonVoiceNetwork.Client.OnAudioFrameAction += (playerId, voiceId, frame) => Debug.LogFormat("***** {0} {1} {2}", playerId, voiceId, frame[0]);

Я могу видеть значения полученных кадров с плавающей запятой, напечатанные в журналах, но я не знаю, как я могу использовать это действие, на которое они указали, для доступа к значениям кадров с плавающей запятой. Это оригинальная декларация действия:

public Action<int, byte, float[]> OnAudioFrameAction { get; set; }

и я думаю о том, чтобы сохранить аудио кадры примерно так:

float[] samples;
        PhotonVoiceNetwork.Client.OnAudioFrameAction += (playerId, voiceId, frame) => samples = frame;

        MemoryStream stream = new MemoryStream();
        BinaryWriter bw = new BinaryWriter(stream);
        bw.Write(samples);
        bw.Flush();
        byte[] floatBytes = stream.ToArray();

Приведенный выше код не работает, так как в строке bw.Write(samples); компилятор говорит, что переменная не была инициализирована, что означает, что PhotonVoiceNetwork.Client.OnAudioFrameAction += (playerId, voiceId, frame) => samples = frame; не присваивает полученное значение с плавающей точкой переменной.

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 07 мая 2018

Из вашего примера видно, что вы хотите сохранить параметр frame в двоичном файле, а затем сохранить байты потока в памяти для дальнейшего использования.

Вы можете объявить элемент данных private byte[] m_floatBytes; в своем классе и зарегистрироваться для действия, подобного этому:

PhotonVoiceNetwork.Client.OnAudioFrameAction += (playerId, voiceId, frame) => 
{
    using (MemoryStream stream = new MemoryStream())
    {
        BinaryWriter bw = new BinaryWriter(stream);
        bw.Write(frame);
        bw.Flush();
        bw.Close();
        m_floatBytes = stream.ToArray();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...