C# 读取IP(UDP)数据并保存为音频文件格式

C# 读取IP(UDP)数据并保存为音频文件格式,c#,C#,我被读取到IP数据并存储到记事本(.txt文件格式)文件,保存此存储的记事本数据后,使用c#中的“Naudio”库(名称空间)将其转换为音频(.Wav)五种格式 问题:音频文件语音(清晰度)不正确 UdpClient listener = new UdpClient(8081); IPEndPoint groupEP = new IPEndPoint(IPAddress.Parse("x.x.x.x"), listenPort); while (true) { byte[] byt

我被读取到IP数据并存储到记事本(.txt文件格式)文件,保存此存储的记事本数据后,使用c#中的“Naudio”库(名称空间)将其转换为音频(.Wav)五种格式

问题:音频文件语音(清晰度)不正确

UdpClient listener = new UdpClient(8081);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Parse("x.x.x.x"), listenPort);

while (true)
{
      byte[] bytes = listener.Receive(ref groupEP);
      string path = "E:\\Audio\\8081.txt";
      using (StreamWriter writer = new StreamWriter(path, true))
      {
         writer.WriteLine(Encoding.ASCII.GetString(bytes, 0, bytes.Length));
         writer.Close();
      }
      WaveFormat waveFormat = WaveFormat.CreateMuLawFormat(8000, 1);
      using (WaveFileWriter writer = new WaveFileWriter("C:\\8081.Wav",waveFormat))
     {
       byte[] bytes1 = Encoding.ASCII.GetBytes(File.ReadAllText("E:\\Audio\\8081.txt"));
       writer.WriteData(bytes1, 0, bytes1.Length);
     }
}

ASCII是一种7位编码。如果字节的值大于127,编码器/解码器可能会对其进行修改。这意味着,如果您这样做,例如:

var bytes1 = Encoding.ASCII.GetBytes(Encoding.ASCII.GetString(bytes));
您的字节1数组值可能与字节的值不同

解决此问题最简单的方法是以二进制格式保存数据,而不将其转换为文本

如果您确实需要文本转换,请使用

Convert.ToBase64String / Convert.FromBase64String

我不完全理解你的问题,但会将音频存储为文本。音频通常是流式位,而文本是。。。文本。在处理二进制流时,每个位都正确且顺序正确是至关重要的。当处理文本时,有些事情会发生变化,比如如何格式化行尾或特殊的chäråctêrs。它们通常不兼容。我从IP获取音频数据并尝试以音频文件格式保存,但音频质量不好。你能举个例子吗,-他们通过将字符串转换为字节数组将字符串写入文件。这对你来说更容易,因为你从一个字节数组开始。谢谢你的建议,我用binary writer存储了数据,但同样的问题也存在。你是否检查了你从文件中读取的数据是否与你所写的相同?