Мне нужно записать звуки, исходящие от механического оборудования. Эти звуки возникают случайным образом каждые несколько часов и длятся примерно 1-3 секунды.
Для выполнения этой задачи мне нужен аудиорекордер, который постоянно работает, но записывает только при наличии звука. Есть много аудиомагнитофонов, которые «активируются голосом», но я не нашел ни одного, который будет работать, потому что к тому времени, когда они активируются, звуки, которые я пытаюсь записать, заканчиваются.
Для этого мне нужно приложение, которое постоянно записывает, но сохраняет звук только после «активации звука минус x секунд». Это не проблема, если 'x' фиксирован.
Требования
Предпочтения (не обязательные)
Обновление: поздравляю! Я присудил награду @4mohit за его/ее ответ. Я все еще провожу тестирование, чтобы убедиться, что оно надежно работает для моей задачи. Спасибо также Стиву Барнсу за его творческий ответ.
Поскольку я все еще нахожусь на этапе тестирования, я открыт для большего количества ответов. Я буду публиковать больше обновлений по мере прохождения тестирования.
Если вы ищете диктофон, который может записывать звук непрерывно, пропуская тишину и может работать в течение 4 часов без присмотра, то я думаю, вам стоит присмотреться к Smart Voice Recorder . Он соответствует вашим требованиям,
Из описания в магазине Google Play:
Умный диктофон
Умный диктофон предназначен для высококачественной записи звука в течение длительного времени с пропуском относительной тишины на лету. Например, вы можете использовать его для записи ночных разговоров во сне (или храпа :)), деловых встреч, обычного дня вашей няни, того, как вы поете или играете на гитаре и так далее. Это невероятно! И вы можете использовать его как обычный диктофон с простым и приятным пользовательским интерфейсом. Попробуйте! :)
ПРИМЕЧАНИЕ. Это приложение не является регистратором звонков. Может не работать должным образом на некоторых телефонах. Пользовательский интерфейс еще не оптимизирован для планшетов. Записи в этом формате не могут быть отправлены через текст/смс/ммс. Пожалуйста, не стесняйтесь присылать мне отзывы по электронной почте, если они у вас есть.
Функции:
- автоматическое и ручное управление чувствительностью для режима «Пропустить тишину» (бета-версия)
- анализатор спектра живого звука
- кодирование wave/pcm с регулируемой частотой дискретизации (8-44 кГц)
- запись в фоновом режиме (даже при выключенном дисплее)
- инструмент для калибровки усиления микрофона
- сохранение/пауза/возобновление/отмена управления процессом записи
- хранилище и изменение каталога (по умолчанию: sdcard/SmartVoiceRecorder)
- оставшееся время записи отображается на главном экране, ограничено только доступным пространством на вашем хранилище (и техническим ограничением 2 ГБ на файл)
- простой в использовании список записей
- отправить / поделиться записью по электронной почте, WhatsApp, Dropbox и т. д.
- установить запись в качестве мелодии звонка, будильника или уведомления в один клик
Разрешения, необходимые этому приложению:
- доступ в Интернет (для показа рекламы и сбора некоторой статистики)
- запись на внешнее хранилище (для хранения записей)
- запись аудио
- блокировка пробуждения (для предотвращения перехода устройства в спящий режим)
- запись настроек (для возможности установить системную мелодию звонка/уведомления/будильника по умолчанию)
- биллинг (для возможности отключения рекламы в приложении)
Если вы можете использовать ноутбук, а не мобильный телефон, вы можете сделать это с помощью python + pyaudio . Образец записи выглядит так:
"""PyAudio example: Record a few seconds of audio and save to a WAVE file."""
import pyaudio
import wave
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print("* recording")
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print("* done recording")
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
Но вы можете довольно легко изменить это, чтобы проверить, превышают ли уровни звука заданный порог, и если он был превышен, чтобы записать текущий набор кадров в файл, названный по времени и дате.
Определить, превысил ли уровень звука заданный порог, должно быть так же просто, как:
loudest = max([max(chunk) for chunk in frames])
if loudest > THRESHOLD:
# Save your frame
но я бы подумал об использовании a dqueue
для хранения вашего кадра, и как только длина кадра будет достигнута, извлеките фрагмент с одного конца, прежде чем нажимать на другой, если вы записываете, сохраните фрагмент, в противном случае извлеките и выбросьте. Затем вы можете при получении каждого фрагмента просто проверить максимальный размер этого фрагмента, и если он превышает пороговое значение, установите счетчик на размер кадра плюс желаемое превышение, и если нет текущего открытого волнового файла, откройте его с именем на основе на время, если нет ни одного уменьшения счетчика, если он больше 0, и записать в файл, когда он достигнет 0, закрыть файл.
Python также можно использовать для построения графиков и анализа полученных файлов, как в этом блоге .
просто используйте Automatic Audio Recorder , в нем есть все, что вы ищете, включая автоматическую запись, когда есть шум.
RockPaperLz - Замаскируй или Шкатулка
Мохит Гарг
Мохит Гарг
RockPaperLz - Замаскируй или Шкатулка