Я не уверен, WaveIn.cs класс вы используете, но, как правило, с кодом, который записывает аудио, вы либо A) сказать код, чтобы начать запись, а затем на несколько позже, укажите, что код останавливается, и вы возвращаете массив (обычно типа short []), который содержит данные, записанные в течение этого периода времени; или B) сообщите, что код начинает запись с заданным размером буфера, и по мере заполнения каждого буфера код выполняет обратный вызов к методу, который вы определили, со ссылкой на заполненный буфер, и этот процесс продолжается до тех пор, пока вы не сообщите об этом для остановки записи.
Предположим, что ваш формат записи составляет 16 бит (примерно 2 байта) на выборку, 44100 выборок в секунду и моно (1 канал). В случае (A), скажем, вы начинаете запись, а затем прекращаете запись ровно через 10 секунд. В итоге вы получите короткий [] массив длиной 441 000 (44 100 x 10). Я не знаю, какой алгоритм вы используете для обнаружения «кранов», но скажем, что вы обнаруживаете краны в этом массиве в элементе 0, элементе 22 050, элементе 44 100, элементе 66,150 и т. Д. Это означает, что вы каждый раз находите краны. 5 секунд (из-за того, что 22 050 составляет половину 44 100 выборок в секунду), что означает, что у вас есть 2 ответвления в секунду и, таким образом, 120 BPM.
В случае (B) предположим, что вы начинаете запись с фиксированным размером буфера 44100 выборок (aka 1 second). По мере ввода каждого буфера вы найдете отводы в элементе 0 и в элементе 22 050. По той же логике, что и выше, вы будете вычислять 120 BPM.
Надеюсь, это поможет.При обнаружении биений в целом лучше всего записывать в течение относительно длительного времени и подсчитывать биты через большой массив данных. Попытка оценить «мгновенный» темп более сложна и подвержена ошибкам, так же как и оценка высоты тона записи сложнее в реальном времени, чем при записи полной заметки.
Итак, если я выполняю моно, каждое из этих чисел в моем массиве представляет один образец для одного канала? Если бы я должен был сделать 2 канала, мой массив был бы тогда размером 88200? Чередование каналов? – zac
Да, стерео означает, что у вас в два раза больше образцов в секунду, а образцы чередуются (слева, справа, слева, справа и т. Д.), Поэтому элементы 0, 2, 4, 6 и т. Д. Представляют данные для левого канала и элементы 1, 3, 5, 7 и т. д. представляют данные для правильного канала. – MusiGenesis
Другой вопрос: когда я делаю fft, чтобы получить амплитуду, он возвращает половину размера моего исходного массива. Из того, что я прочитал, это потому, что он преобразует его в реальную и мнимую часть и использует оба из них для получения амплитуды. Что теперь учитывает каждый из значений в этом массиве? 2 образца? – zac