Timich Asked:2024-10-18 20:08:41 +0000 UTC2024-10-18 20:08:41 +0000 UTC 2024-10-18 20:08:41 +0000 UTC 如何立即播放录制的音频而不先将其保存到音频文件? 772 我想实现一个代码,它可以立即播放使用任何音频输入设备录制的所有内容,但无需首先将所有数据保存在 mp3/wav 和类似文件中(它应该类似于检查麦克风的声音)。请告诉我:什么类实例存储所有数据以及什么方法/函数允许您从中获取数据?我在文档和源代码中查找了这些信息,但没有成功。 c# 1 个回答 Voted Best Answer aepot 2024-10-19T05:57:48Z2024-10-19T05:57:48Z 任何文件,无论是音频、视频、文本还是其他任何文件,主要都是字节,即字节数组。 在 .NET 中,字节数组由byte[].您可以从文件中读取它、将其写入文件或用它执行任何操作。 例如,您可以将任何文件完全读入数组中。 byte[] bytes = File.ReadAllBytes("file.mp3"); 要写入内存而不是文件,您可以打开一个数据流,该数据流随后创建一个字节数组。 using MemoryStream ms = new(); 您可以按照与读取或写入文件的流相同的方式使用此类数据流。只是这里,不是文件,而是字节数组。 然后将数据写入任意部分,就像在FileStream. byte[] newBytes = ...; // какой-то небольшой массив-буфер // ... ms.Write(newBytes); 接下来,你可以从这个数据流中获取一个字节数组 byte[] bytes = ms.ToArray(); // копирование всех данных в массив MemoryStream您可以轻松写入文件 ms.Position = 0; using FileStream fs = File.Create("file.mp3"); ms.CopyTo(fs); 字节数组也可以写入文件 File.WriteAllBytes("file.mp3", bytes); 等等,学习.NET。 你的问题的答案是byte[]。 字节数组可以很大 - 高达 2 GB,甚至可以有足够的内存(对于 x64 应用程序)。但请记住,这会耗尽计算机的 RAM。未压缩的音频流(例如 mp3)可能很重。 还值得记住数组的一个属性:字节数组的大小是在创建时设置的,并且无法更改。您不能只增加或减少数组的大小。即使您使用内置函数Array.Resize,从技术上讲,它也只是将旧数组中的数据复制到新大小的数组中。因此,如果您知道数据到达的哪些部分以及需要如何处理数据,请提前创建适合包含所需数据的数组。 NAudio 库在文件和操作系统中都充满了自己的现成类读取器和写入器,请阅读有关此主题的文档或有用的文章。
任何文件,无论是音频、视频、文本还是其他任何文件,主要都是字节,即字节数组。
在 .NET 中,字节数组由
byte[].您可以从文件中读取它、将其写入文件或用它执行任何操作。例如,您可以将任何文件完全读入数组中。
要写入内存而不是文件,您可以打开一个数据流,该数据流随后创建一个字节数组。
您可以按照与读取或写入文件的流相同的方式使用此类数据流。只是这里,不是文件,而是字节数组。
然后将数据写入任意部分,就像在
FileStream.接下来,你可以从这个数据流中获取一个字节数组
MemoryStream您可以轻松写入文件字节数组也可以写入文件
等等,学习.NET。
你的问题的答案是
byte[]。字节数组可以很大 - 高达 2 GB,甚至可以有足够的内存(对于 x64 应用程序)。但请记住,这会耗尽计算机的 RAM。未压缩的音频流(例如 mp3)可能很重。
还值得记住数组的一个属性:字节数组的大小是在创建时设置的,并且无法更改。您不能只增加或减少数组的大小。即使您使用内置函数
Array.Resize,从技术上讲,它也只是将旧数组中的数据复制到新大小的数组中。因此,如果您知道数据到达的哪些部分以及需要如何处理数据,请提前创建适合包含所需数据的数组。NAudio 库在文件和操作系统中都充满了自己的现成类读取器和写入器,请阅读有关此主题的文档或有用的文章。