Преобразовать аудио образцы из байтов в комплексные числа? - PullRequest
1 голос
/ 16 февраля 2011

Приветствую всех,

В настоящее время я разрабатываю хроматический тюнер для инструментов / голоса в Silverlight с бэкэндом на C #. Я нахожусь на начальных этапах и у меня возникают проблемы с получением аудиоданных. Я использую класс AudioSink для записи аудио в поток памяти, когда начинается запись в реальном времени. Проблема, с которой я сталкиваюсь, заключается в преобразовании этих байтов в потоке в комплексные числа, чтобы их можно было вводить в алгоритм FFT. Я пробовал различные способы, обсуждаемые в этом посте Проблема преобразования байтового массива в двойной , но я не уверен, какой метод следует использовать.

Есть предложения по переходу от байтового массива к массиву комплексных чисел? Точность и скорость являются обязательными (больше точности, чем скорости), потому что на более поздних этапах моего проекта этот процесс будет выполняться в реальном времени, чтобы воспроизводить высоту звука, воспроизводимого при поступлении звука.

Ура и спасибо!

Josh

1 Ответ

0 голосов
/ 16 февраля 2011

Этот проект в CodeProject может быть полезен вам, так как он находится в C # и имеет дело с обработкой звука по алгоритму Cooley-Turkey FFT.

Если вы не хотите просеивать его, то здесь бит от комплексного числа: byte[] data = yourByteArray; double[] x = new double[data.Length]; for (int i = 0; i < x.Length; i++) { x[i] = data[i] / 32768.0; } ComplexNumber[] data = new ComplexNumber[length]; for (int i = 0; i < x.Length; i++) { data[j] = new ComplexNumber(x[i]); }

Я не очень разбираюсь в обработке звука, поэтому не знаю, является ли деление на 32768 уникальным для этого решения или истинным в целом.

Кроме того, хотя это будет на 100% точно, я не знаю, насколько хорошо это работает. Если это станет проблемой, вам может понадобиться рефакторинг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...