gpt4 book ai didi

c# - C#实时音频分析中的计时

转载 作者:行者123 更新时间:2023-11-30 14:43:57 25 4
gpt4 key购买 nike

我正在尝试从 C# 中的实时音频中确定“每分钟节拍数”。不过,我检测到的不是音乐,只是持续不断的敲击声。我的问题是确定这些水龙头之间的时间,这样我就可以确定“每分钟的水龙头”我已经尝试使用 WaveIn.cs 类在那里,但我真的不明白它是如何采样的。我没有每秒获得一定数量的样本进行分析。我想我真的只是不知道如何每秒读取准确数量的样本以了解样本之间的时间。

如果能帮助我朝着正确的方向前进,我们将不胜感激。

最佳答案

我不确定您使用的是哪个 WaveIn.cs 类,但通常使用录制音频的代码,您要么 A) 告诉代码开始录制,然后在稍后的某个时候告诉代码停止,你会得到一个数组(通常是 short[] 类型),其中包含这段时间记录的数据;或 B) 告诉代码开始使用给定的缓冲区大小进行记录,并且当每个缓冲区都被填满时,代码会回调您定义的方法,并引用已填充的缓冲区,并且此过程一直持续到您告诉它为止停止录制。

假设您的录音格式是每个样本 16 位(又名 2 字节)、每秒 44100 个样本和单声道(1 channel )。在 (A) 的情况下,假设您开始录音,然后正好在 10 秒后停止录音。您最终会得到一个长度为 441,000 (44,100 x 10) 个元素的 short[] 数组。我不知道您使用什么算法来检测“点击”,但假设您在该数组中的元素 0、元素 22,050、元素 44,100、元素 66,150 等处检测到点击。这意味着您每 . 5 秒(因为 22,050 是每秒 44,100 个样本的一半),这意味着您每秒有 2 次轻拍,因此是 120 BPM。

在 (B) 的情况下,假设您以 44,100 个样本(即 1 秒)的固定缓冲区大小开始录制。当每个缓冲区进入时,您会在元素 0 和元素 22,050 处发现抽头。按照与上述相同的逻辑,您将计算出 120 BPM。

希望这对您有所帮助。一般的节拍检测,最好是记录比较长的时间,通过大量的数据来统计节拍。尝试估计“瞬时”速度更加困难且容易出错,就像实时估计录音的音高比录制完整音符更难一样。

关于c# - C#实时音频分析中的计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1262804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com