我正在写一个测距程序(想想声纳)。所以我发出一声声音并测量回来需要多长时间。目前,我只是打开声音文件并手动测量上升时间。为清晰起见,我已将图片链接起来。
我想知道是否有任何.NET库可以做这种事情。我已经看过NAudio,但没有找到任何有用的东西。
看起来我可能需要手动执行此操作,在这种情况下,我如何才能最好地将WAV转换为一系列原始值(例如图像上的每个点)?如果我能做到这一点,我可以编写自己的算法。
答案 0 :(得分:1)
您可以通过将文件读入字节数组,提取有关它的一些信息,然后搜索所需的样本来实现,在您的情况下,我认为这是第一个高于某个阈值的样本。
第一阶段很简单,就像在question中一样
对于第二阶段,您必须了解wav
文件的结构。从这里可以看出 -
它包含有关频道数的信息(在您的情况下,您看起来只有一个频道),采样率和每个样本的位数。
在了解这些参数后,您可以开始读取音频数据 - 如果每个样本为8位,那么每个样本都是一个字节。如果是16,则必须读取2个字节,并计算样本的值,因为它是以小端格式写的。
当您发现样本编号X是您要查找的那个时,将该编号除以采样率,您将获得自文件启动以来样本的准确时间。
该图片来自here。