Блокировка ввода / вывода в порту

После немного возиться с portaudio в свободное время я пытался передать частоту, когда микрофон открыт, для этого я написал обратный вызов — обратный вызов открывается только
выходной поток и затем я использую функцию обратного вызова записи portaudio. Если формат образца для вывода определен как paFloat32 ничего не слышно, но если я определю это paUInt8 и количество каналов 1, поэтому я слышу звук (например, звуковой сигнал), но определение высоты звука (с использованием БПФ) не совпадает с частотой, которую я передаю.
Поэтому мой вопрос заключается в том, что БПФ неправильно реализовано (или — возможно ли использовать paUint8 и все же получить правильный ответ) или мне следует попробовать использовать блокировку ввода-вывода?

некоторый код (возможно, это поможет):

это выходные параметры для выходного потока (входной поток взят из примера записи).

    outputParameters.device = Pa_GetDefaultOutputDevice();
outputParameters.channelCount = 1;
outputParameters.sampleFormat = paUInt8;
outputParameters.suggestedLatency = Pa_GetDeviceInfo( outputParameters.device )->defaultLowOutputLatency;
outputParameters.hostApiSpecificStreamInfo = NULL;

P.S: Любые объяснения, почему можно передавать с paUInt8 хотя я использовал 2 обратных вызова (1 для чтения и один для записи).

0

Решение

Невозможно знать, где проблема, без большего количества кода, но я могу сказать несколько вещей:

  • Переход к блокировке не будет иметь никакого значения для решения вашей проблемы.

  • Если вы ничего не слышите, когда делаете paFloat32, вы, вероятно, делаете что-то не так, потому что поддержка paFloat32 чрезвычайно хороша. Тип с плавающей точкой имеет диапазон от -1 до 1. Убедитесь, что это то, что вы выводите. Вы также можете попробовать некоторые из замечательных примеров кода, включенных в PortAudio. Найдите тот, который выводит, используя paFloat32, используя обратные вызовы, и посмотрите, работает ли он (например, этот).

  • Если вы получаете неправильную высоту звука при обнаружении БПФ, вы, вероятно, также делаете это неправильно. Есть две возможности: 1. высота тона не такая, как ты думаешь, и 2. твое определение высоты тона FFT неверно. Без кода я могу только догадываться, но, поскольку у ВСЕХ есть проблемы с №2 (судя по вопросам о SO), я предполагаю, что у вас есть проблемы по крайней мере с этим.

Для определения высоты тона FFT проверьте мою запись в блоге с кодом (в ней даже используется portaudio)

http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html

Для создания правильного тона здесь есть много вопросов о SO.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]