【问题标题】:Microphone Audio Streaming from ESP8266 to C# Socket Server over wifi通过 wifi 从 ESP8266 到 C# Socket 服务器的麦克风音频流
【发布时间】: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#


【解决方案1】:

我不建议通过 ESP8266 流式传输音频。
读取模拟输入的最大速率为每秒 200 个。
这意味着,您可以以最高 200Hz 的频率播放音频。
通常的 .wav 文件至少需要(我推荐)8000Hz。 在 44100Hz 时可获得良好的质量。
我尝试了与您相同的方法,但我从扬声器中得到的只是越来越高的噪音。

【讨论】:

    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2023-01-10
    • 2012-02-07
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多