Вопрос или проблема
Ночью (когда я сплю) в основном тихо. Однако иногда бывают шумы (например, шумный транспорт). Я хочу записывать эти шумы.
Один из методов, который я ранее использовал, заключается в том, чтобы просто начать запись на всю ночь, используя любое программное обеспечение для записи (например, Audacity). Однако это чрезвычайно неэффективно, потому что потом мне приходится прослушивать весь файл длительностью более 8 часов. (К тому же размер файлов очень большой.)
Таким образом, я ищу более эффективный способ записи этих шумов.
Основные требования:
- Возможность установить порог уровня звука/децибелов, выше которого шумы записываются. (В остальное время запись не ведется.)
- Метка времени для каждого записанного шума.
- Работает на Windows 10 (ПК) или Android мобильных устройствах.
(Возможно, есть способ сделать это в Audacity или другом ПО, о котором я не знаю; в этом случае я буду очень благодарен, если кто-то научит меня.)
Желательно:
- Бесплатно.
- Легковесно.
Основные требования:
- Вы можете установить триггер (уровень децибелов), выше которого звуки записываются.
- Файлы MP3 затем автоматически сохраняются как “YYYY-MM-dd hhmmss.mp3”, где hhmmss — это время начала записи.
- Программа для Windows (похоже, доступна только для Windows).
Желательно:
- К сожалению, не бесплатно. Бесплатный 30-дневный пробный период, затем 24,95 доллара США или 34,95 доллара США за версию Standard или Professional.
- Кажется, достаточно легковесна (например, я использую её прямо сейчас, и она потребляет 8,5 МБ памяти).
Если у вас получилось с Audacity, вы можете продолжать использовать эту программу. Согласно этой веб-странице, в Audacity есть функция, которая запускает запись при достижении определенного уровня.
Резюме: в разделе записи настроек есть флажок «Sound Activated Recording» и место для указания уровня триггера.
К сожалению, это лишь частичное решение, поскольку часть с меткой времени не решена.
Вы можете использовать Python с PyAudio, адаптировав принятое решение для этого вопроса на Stack Overflow.
- Python и PyAudio оба бесплатны, с открытым исходным кодом и кроссплатформенны, так что следующее должно работать на большинстве платформ.
- Я бы предложил модифицировать пример кода, чтобы начать запись в файл с именем, соответствующим дате и времени, когда уровень звука превышает некоторый предел, и остановить через секунду или больше после последнего превышения уровня звука.
Примерно так, (обратите внимание, что это не код производственного качества):
import pyaudio
import wave
import audioop
import datetime
now = datetime.datetime.now() # Получить текущее время
ENDTIME = now + datetime.timedelta(hours=8) # Записывать в течение 8 часов
OVERRUN = datetime.timedelta(seconds=5) # Как долго продолжать после последнего громкого звука
THRESHOLD = 123 # Использовать некоторое число, определенное экспериментально
# Следующие параметры pyAudio взяты из исходного примера
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
recording = False
outfile = None
last_over = datetime.datetime(0)
started_recording_at = None
while now < ENDTIME: # Работать до конечного времени
data = stream.read(CHUNK) # получить последний звуковой фрагмент
now = datetime.datetime.now() # Получить текущее время
rms = audioop.rms(data, 2) # здесь вычисляется громкость
if not recording and rms > THRESHOLD: # Громко, поэтому начинаем запись
fname = now.strftime('%Y-%m-%d-%H-%M-%S.wav') # Создать имя файла
outfile = open(fname, 'wb') # Открыть для бинарной записи
print("RMS = {}: Начата запись в {}".format(rms, fname))
recording = True
started_recording_at = now
if recording: # Мы записываем
outfile.write(data) # Сохранить звуковой фрагмент
if rms > THRESHOLD: # Все еще громко?
last_over = now # Сохранить время
if now - last_over > OVERRUN: # Тихо достаточно долго
recording = False # Остановить запись
outfile.close() # Закрыть файл
print("Длина записи {}".format(now-started_recording_at))
# Уборка!
stream.stop_stream()
stream.close()
p.terminate()
Если вы не знакомы с Python, поместите код выше в текстовый файл под названием nightwatch.py и запустите с помощью:
python nightwatch
Это должно более или менее соответствовать вашему запросу.
Ответ или решение
Запись ночных шумов может быть полезным инструментом для выявления источников неудобств в ночное время, особенно если вы живёте в районе с шумной ночью. Однако, как было отмечено в вашем вопросе, запись полного ночного аудио и его последующий анализ вручную занимает много времени и может создавать огромные файлы, которые трудны для обработки. Для решения данной проблемы существуют различные программные и аппаратные решения, которые помогут эффективно записывать только значимые шумы и при этом сэкономить ваше время и ресурсы устройства.
Теория: Почему шумы ночью важны и как их записывать?
Шумы ночью могут сильно влиять на качество вашего сна и, следовательно, на общее состояние здоровья. Распознавание и анализ этих шумов может помочь в принятии мер для их минимизации, что благоприятно скажется на вашем самочувствии. Современное программное обеспечение предоставляет возможность записи аудио только при достижении определённого уровня звука (децибел), что позволяет избежать записи тишины и тем самым оптимизировать процесс.
Пример: Какие существуют решения?
-
Snooper: Это программное обеспечение позволяет устанавливать порог уровня звука, после которого начинается запись. Оно автоматически сохраняет файлы в формате MP3 с временной меткой, что делает поиск и анализ ситуаций более удобным. Однако, эта программа платная после 30-дневного бесплатного использования и доступна только для пользователей Windows.
-
Audacity: Бесплатное и популярное ПО для редактирования аудио, которое может быть настроено для записи только при достижении определённого уровня звука. В Audacity эта функция называется "Sound Activated Recording", но его ограничение в том, что временные метки добавлять будет сложно.
-
PyAudio с Python: Для более технически подкованных пользователей можно использовать язык программирования Python с библиотекой PyAudio. Данный подход позволяет создавать решение под свои нужды, включая установление порогов, добавление временных меток и настройку параметров записи. С учетом примера кода, доступного в вашем описании, PyAudio может стать мощным инструментом для создания кастомизированного решения для записи ночных шумов.
Применение: Как реализовать решение на практике?
Для пользователей Windows, которые не против приобрести программное обеспечение, Snooper представляется отличным вариантом. Оно обладает всеми необходимыми функциями и проста в использовании.
Если вы ищете бесплатное решение, и у вас есть начальные знания в программировании, то стоит рассмотреть Python с PyAudio. Начав с базового примера кода, вы можете адаптировать его под свои нужды. Данный подход предлагает большую гибкость в плане конфигурации и может обеспечить точное следование вашим требованиям.
Для пользователей Android существует множество приложений, например, "Sound Meter Pro", которые могут записывать только определённые уровни звука. Однако интеграция с возможностью записи может требовать дополнительных исследований.
В заключение, выбор метода записи ночных шумов будет зависеть от ваших предпочтений, уровня комфорта с различными технологиями и готовности инвестировать в программное обеспечение. Все предложенные методы имеют свои преимущества и недостатки, поэтому их стоит рассматривать в контексте ваших личных нужд и требований.