如何从 C# 中使用 lambda 表达式调用的 Action<> 访问参数值并将其存储在数组中
How to access the value of a parameter from an Action<> called with a lambda expression in C# and store it in an array
我正在开发一个使用 Unity 3D 开发的应用程序,该应用程序使用了 Photon Network 和 Photn 语音库。我想接收音频流,将其存储在流中,然后将其保存在 WAV 文件中。从光子语音论坛的支持中,我被告知使用:
PhotonVoiceNetwork.Client.OnAudioFrameAction += (playerId, voiceId, frame) => Debug.LogFormat("***** {0} {1} {2}", playerId, voiceId, frame[0]);
我可以看到日志上打印的接收到的浮动帧的值,但我不知道如何使用他们指出的那个 Action 来访问浮动帧值。这是原始动作声明:
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;
没有将接收到的浮点值分配给变量.
任何帮助将不胜感激。
从你的例子看来,你想将帧参数存储在二进制文件中,然后将流字节存储在内存中以备将来使用。
您可以在 class 中声明数据成员 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();
}
}
我正在开发一个使用 Unity 3D 开发的应用程序,该应用程序使用了 Photon Network 和 Photn 语音库。我想接收音频流,将其存储在流中,然后将其保存在 WAV 文件中。从光子语音论坛的支持中,我被告知使用:
PhotonVoiceNetwork.Client.OnAudioFrameAction += (playerId, voiceId, frame) => Debug.LogFormat("***** {0} {1} {2}", playerId, voiceId, frame[0]);
我可以看到日志上打印的接收到的浮动帧的值,但我不知道如何使用他们指出的那个 Action 来访问浮动帧值。这是原始动作声明:
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;
没有将接收到的浮点值分配给变量.
任何帮助将不胜感激。
从你的例子看来,你想将帧参数存储在二进制文件中,然后将流字节存储在内存中以备将来使用。
您可以在 class 中声明数据成员 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();
}
}