У меня есть кусок скрипта Python, который проходит через непрерывный цикл (~ 5 Гц) для получения данных от набора датчиков, подключенных к моему ПК, во многом как датчик приближения.
Я хотел бы непрерывно переводить эти данные датчика в аудиовыход с помощью Python. То есть: пока работает мой сенсорный контур, я хочу сгенерировать и воспроизвести синусоидальный звуковой сигнал непрерывный, частота которого модулируется выходным сигналом сенсора (например, более высокое значение сенсора = более высокая частота). Это своего рода результат, который мне нужен (конечно, без графического интерфейса: http://www.szynalski.com/tone-generator/)
Я просмотрел множество доступных пакетов (pyDub, pyAudio, Winsound), но все они, похоже, решают часть головоломки, будь то генерация сигнала, сохранение или воспроизведение, но я не могу понять, как их объединить .
Или это неприемлемый путь для использования Python, и следует ли мне написать сценарий, который вводит данные датчика на другой, более удобный для звука язык?
Спасибо.
Минимальная продолжительность слышимого звука пропорциональна частоте. (например, для более низкой частоты может потребоваться до 1 секунды, для более высокой - меньше). В противном случае вы услышите щелчки. Если вы можете ограничить поступление данных, есть способы этого достичь.
@Anil_M Как вычислить минимальную продолжительность слышимого звука, учитывая частоту? Есть ли формула, по которой можно это предсказать?
Это примерно 1 / (частота (Гц)). См. Эту ссылку для получения более подробной информации. sound.stackexchange.com/questions/28163/…
Если объем поступающих данных составляет менее 1 секунды на выборку, может иметь смысл строить график данных и воспроизводить звук только тогда, когда они превышают / ниже определенных пороговых значений.
I have a piece of python script that runs through a continuous loop (~5Hz)
Не получается, если просто добавить в цикл winsound.Beep (frequency_to_play, 1)?
Спасибо за вклад! Это создает звуковой сигнал длительностью 1 мс, который, конечно, не слышен. Однако я могу поместить это в свой цикл и создать более длинный звуковой сигнал, который я слышу, однако есть две проблемы с этим и почему я хотел бы избежать этого метода: - Это не асинхронный / многопоточный код, поэтому скрипт ждет звукового сигнала до конца, а затем продолжается. Это стоит драгоценного времени и поэтому нежелательно. - Поскольку цикл датчика и его работа имеют несколько разное время обновления на каждой итерации, звуковой сигнал не будет стабильным (т.е. его частота повторения отличается), чего я не хочу.
Длину в мс можно изменить, изменив второе значение в вызове Beep () на значение больше 1, но это не решает вторую проблему, о которой вы упомянули. Не могли бы вы разместить здесь свой код, чтобы люди могли его проверить? Вы можете подробно описать, как вы получаете данные от датчиков, и, возможно, предоставить образец / пример.
Какова ваша скорость приема данных с датчиков? Одна проблема, с которой вы можете столкнуться, если прием "слишком быстрый": хотя частоту можно модулировать, более короткая продолжительность означает, что вы ее не услышите.