Ночью (когда я сплю) в основном тихо. Однако иногда возникают шумы (например, шумное движение транспорта). Я хочу записать эти звуки.
Один метод, который я использовал ранее, состоит в том, чтобы просто настроить запись на всю ночь, используя любое программное обеспечение для записи (например, Audacity). Однако это очень неэффективно, потому что тогда мне нужно просмотреть весь аудиофайл продолжительностью более 8 часов. (Не говоря уже о том, что размеры файлов очень большие.)
Поэтому я ищу более эффективный способ записи этих шумов.
Основные требования:
(Возможно, есть какой-то способ сделать это в Audacity или каком-то другом программном обеспечении, о котором я не знаю; в этом случае я также был бы очень признателен, если бы кто-нибудь мог научить меня, как это сделать.)
Хорошо бы иметь:
Снупер .
Основные требования:
Хорошо бы иметь:
Если вы добились успеха с Audacity, вы можете продолжать использовать программу. Согласно этой веб-странице , в Audacity есть функция запуска записи при достижении определенного уровня.
Резюме: в разделе «Запись» в настройках есть флажок «Звуковая активация записи», а также место для указания уровня срабатывания.
К сожалению, это лишь частичный ответ, так как часть метки времени не разрешена.
Вы можете использовать Python с PyAudio, адаптировав принятый ответ на этот вопрос SO .
Что-то вроде (обратите внимание, что это не код качества производства) :
import pyaudio
import wave
import audioop
import datetime
now = datetime.datetime.now() # Get the time now
ENDTIME = now + datetime.timedelta(hours=8) # Record for 8 hours
OVERRUN = datetime.timedelta(seconds=5) # How long to continue after last loud
THRESHOLD = 123 # Use some number determined experimentally
# The following are the pyAudio parameters from the original example
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: # Run till endtime
data = stream.read(CHUNK) # get the latest sound chunk
now = datetime.datetime.now() # Get the current time
rms = audioop.rms(data, 2) # here's where you calculate the volume
if not recording and rms > THRESHOLD: # Loud so start recording
fname = now.strftime('%Y-%m-%d-%H-%M-%S.wav') # Create the filename
outfile = open(fname, 'wb') # Open for binary write
print("RMS = {}: Started recording to {}".format(rms, fname))
recording = True
started_recording_at = now
if recording: # We are recording
outfile.write(data) # Save the sound chunk
if rms > THRESHOLD: # Still loud?
last_over = now # Save time
if now - last_over > OVERRUN: # Quiet for long enough
recording = False # Stop recording
outfile.close() # Close the file
print("Recording Length {}".format(now-started_recording_at))
# Tidy Up!
stream.stop_stream()
stream.close()
p.terminate()
Если вы не знакомы с python, поместите приведенный выше код в текстовый файл с именем nightwatch.py, а затем выполните:
python nightwatch
Должен сделать более или менее то, что вы просили.
пользователь 26742873