【发布时间】:2019-12-24 05:40:03
【问题描述】:
我想使用 UDP 数据包将 ESP8266MOD 上的麦克风录制的音频流式传输到我的 C# Socket 程序。但我每秒钟都有模拟输出。如果我尝试在我的 C# 程序中将该信号转换为 .wav 文件,它会显示:“波头已损坏。”。有人有解决办法吗?
这是我的 C# 服务器代码:
public class UDPAudioListner
{
private const int listenPort = 12000;
public static int Main()
{
bool done = false;
UdpClient listener = new UdpClient(listenPort);
listener.DontFragment = true;
IPAddress ipAddress = IPAddress.Parse("192.168.1.145");
IPEndPoint groupEP = new IPEndPoint(ipAddress, listenPort);
byte[] receive_byte_array;
List<byte[]> masterByteList = new List<byte[]>();
byte[] bt = new byte[512];
int i = 44;
try
{
while (!done)
{
Console.WriteLine("Waiting for broadcast");
receive_byte_array = listener.Receive(ref groupEP);
Console.WriteLine("Received a broadcast from {0}", groupEP.ToString());
var data = "";
if (receive_byte_array.Length > 0)
{
try
{
using (Stream s = new MemoryStream(receive_byte_array))
{
s.Position = 0;
System.Media.SoundPlayer myPlayer = new System.Media.SoundPlayer(s);
myPlayer.Stream = null;
myPlayer.Stream = s;
myPlayer.Play();
bt = new byte[512];
i = 0;
}
}
catch (Exception ex)
{
done = false;
}
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
listener.Close();
return 0;
}
}
这是我的 Arduino 代码:
void sendAudio(){
IPAddress ip(255, 255, 255, 122);
unsigned int localPort = 12000;
UdpSA.beginPacket(ip, localPort);
mic = analogRead(A0);
analogWrite(3,mic>> 2);
UdpSA.write(mic);
UdpSA.endPacket();
}
【问题讨论】:
-
您是否将模拟读取的值写入 WAV 文件并希望 WAV 文件播放该值?我从未创建过 WAV 文件,但我认为您至少需要一个频率和持续时间。将其移至 stackoverflow 可能会更好,可能会有更多人可以帮助您。
-
你知道 esp 在一秒钟内只能执行几百个
analogRead()命令而不会崩溃吗?另外,您发送每个样本,这肯定会大大降低 200Hz 的采样率。
标签: arduino-uno esp8266 c#