我正在开发一个使用 Unity 3D 开发的应用程序,该应用程序使用 Photon 网络和 Photn 语音库。我想接收音频流,将其存储在流中,然后将其保存在 WAV 文件中。从光子语音论坛的支持下,我被告知使用:
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;
没有将接收到的浮点值分配给变量。
任何帮助将不胜感激。
从您的示例中可以看出,您希望将帧参数存储在二进制文件中,然后将流字节存储在内存中以备将来使用。
可以在类中声明数据成员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();
}
}