Python: преобразование данных датчика в звук с непрерывной частотной модуляцией

У меня есть кусок скрипта Python, который проходит через непрерывный цикл (~ 5 Гц) для получения данных от набора датчиков, подключенных к моему ПК, во многом как датчик приближения.

Я хотел бы непрерывно переводить эти данные датчика в аудиовыход с помощью Python. То есть: пока работает мой сенсорный контур, я хочу сгенерировать и воспроизвести синусоидальный звуковой сигнал непрерывный, частота которого модулируется выходным сигналом сенсора (например, более высокое значение сенсора = более высокая частота). Это своего рода результат, который мне нужен (конечно, без графического интерфейса: http://www.szynalski.com/tone-generator/)

Я просмотрел множество доступных пакетов (pyDub, pyAudio, Winsound), но все они, похоже, решают часть головоломки, будь то генерация сигнала, сохранение или воспроизведение, но я не могу понять, как их объединить .

  • Можно выполнять частотную модуляцию и связывать разные частоты вместе, а затем сохранять их, как воспроизводить их в реальном времени и без засорения моего датчика
  • Можно воспроизводить потоковое аудио с помощью WinSound ->, но как обновить частоту в реальном времени?

Или это неприемлемый путь для использования Python, и следует ли мне написать сценарий, который вводит данные датчика на другой, более удобный для звука язык?

Спасибо.

Какова ваша скорость приема данных с датчиков? Одна проблема, с которой вы можете столкнуться, если прием "слишком быстрый": хотя частоту можно модулировать, более короткая продолжительность означает, что вы ее не услышите.

Anil_M 10.09.2018 17:57

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

Anil_M 10.09.2018 18:05

@Anil_M Как вычислить минимальную продолжительность слышимого звука, учитывая частоту? Есть ли формула, по которой можно это предсказать?

Daneel R. 10.09.2018 19:20

Это примерно 1 / (частота (Гц)). См. Эту ссылку для получения более подробной информации. sound.stackexchange.com/questions/28163/…

Anil_M 10.09.2018 19:24

Если объем поступающих данных составляет менее 1 секунды на выборку, может иметь смысл строить график данных и воспроизводить звук только тогда, когда они превышают / ниже определенных пороговых значений.

Anil_M 10.09.2018 20:21
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
206
1

Ответы 1

I have a piece of python script that runs through a continuous loop (~5Hz)

Не получается, если просто добавить в цикл winsound.Beep (frequency_to_play, 1)?

Спасибо за вклад! Это создает звуковой сигнал длительностью 1 мс, который, конечно, не слышен. Однако я могу поместить это в свой цикл и создать более длинный звуковой сигнал, который я слышу, однако есть две проблемы с этим и почему я хотел бы избежать этого метода: - Это не асинхронный / многопоточный код, поэтому скрипт ждет звукового сигнала до конца, а затем продолжается. Это стоит драгоценного времени и поэтому нежелательно. - Поскольку цикл датчика и его работа имеют несколько разное время обновления на каждой итерации, звуковой сигнал не будет стабильным (т.е. его частота повторения отличается), чего я не хочу.

MTDJassen 10.09.2018 14:23

Длину в мс можно изменить, изменив второе значение в вызове Beep () на значение больше 1, но это не решает вторую проблему, о которой вы упомянули. Не могли бы вы разместить здесь свой код, чтобы люди могли его проверить? Вы можете подробно описать, как вы получаете данные от датчиков, и, возможно, предоставить образец / пример.

Daneel R. 10.09.2018 14:58

Другие вопросы по теме