我需要记录机械设备发出的声音。这些声音每隔几个小时随机出现一次,仅持续大约1-3秒。

要完成此任务,我需要一个不断运行的录音机,但只在有声音时才录音。有很多录音机是“语音激活的”,但是我还没有找到任何可以使用的录音机,因为当它们激活时,我要捕获的声音已经结束。

要实现这一点,我需要一个可以连续录制的应用程序,但只能保持“声音激活减去x秒”的音频。固定'x'没问题。

要求


Android KitKat兼容
可以在无人看管的情况下运行至少4个小时

首选项(无要求)


免费提供(免费)
操作期间电池电量低
可以运行至少12小时(或更长)无人值守

更新:
恭喜!我已将赏金授予@ 4mohit他/她的答案。我仍在进行测试以查看它是否可以可靠地用于我的任务。也要感谢Steve Barnes的创造性答案。

由于我仍处于测试阶段,因此我愿意接受更多答案。随着测试的进行,我将发布更多更新。

#1 楼

如果您正在寻找一种可以连续录制音频并跳过静音并且可以在无人值守的情况下运行4个小时的录音机,那么我认为您应该考虑使用Smart Voice Recorder。它满足您的要求,


免费提供
可以运行12小时
即使关闭显示,也可以在后台进行录制(确保您有足够的空间)设备上的磁盘空间)
可以录制从8kHz(电话质量)到44.1 kHz(CD质量)的声音

从Google Play商店中的描述中进行记录:


Smart Voice Recorder



Smart Voice Recorder设计用于高质量的长时间录音
,并且可以实时跳过相对静音。例如,您
可以将其用于录制夜间睡眠谈话(或打呼::)),商务
会议,保姆的日常活动,唱歌或弹奏
吉他的方式等等。上。这是梦幻般的!您可以将其用作具有简单而美观的用户界面的常规语音记录器。试试看! :)

注意:此应用不是通话记录器。在某些
手机上可能无法正常工作。用户界面尚未针对平板电脑进行优化。
这种格式的记录不能通过text / sms / mms发送。请随时通过电子邮件发送
我的反馈。

功能:


自动和手动灵敏度控制,用于跳过静音模式( Beta)
实时音频频谱分析仪
wave / pcm编码,采样率可调(8-44 kHz)
在后台录制(即使显示关闭)
麦克风增益校准工具
保存/暂停/恢复/取消录制过程控制
存储和目录更改(默认:sdcard / SmartVoiceRecorder)
主屏幕上显示的剩余录制时间,仅受存储空间的限制(和技术限制,每个文件2GB)
易于使用的录音列表
通过电子邮件,whatsapp,投递箱等发送/共享录音。
一键将录音设置为铃声,警报或通知

该应用需要的权限是:


互联网访问权限(用于显示广告和一些统计信息)
写入外部存储设备(以存储记录)
记录音频
唤醒锁(用于防止设备进入休眠状态) )
写入设置(用于设置默认系统铃声/通知/警报的功能)
计费(用于在应用程序中关闭广告的选项)



评论


谢谢你的建议。不幸的是,几乎所有这些录音机都会错过录音的前250ms至1s,因此不适用于该应用程序。这是因为他们只有在检测到足够的音频之后才真正开始录制。您知道这个特定的应用程序是否可以用于指定目的?

– RockPaperLz-掩盖它或棺材♦
2015年10月1日在21:48

是的,它肯定可以正常工作,而且没有语音激活,因此可以长时间录制声音

– Mohit Garg
2015年10月2日,下午4:40

它可以消除录音中的所有空白区域。此外,它还具有现场音频频谱分析仪

– Mohit Garg
2015年10月2日,下午5:23

恭喜!我已将这个奖励授予@ 4mohit。

– RockPaperLz-掩盖它或棺材♦
2015年10月6日在17:25

#2 楼

如果您可以使用笔记本电脑而不是手机,那么可以使用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()


但是您可以很容易地对其进行修改,以检查声级是否已超过给定阈值,以及是否超过了该阈值来录制声级。当前一组帧到以时间和日期命名的文件。

确定声音水平是否超过给定阈值应该很简单:

您的帧,达到帧的长度后,从一端弹出一个块,然后再推到另一端,如果要记录,请保存该块,否则弹出并丢弃。然后,当获取每个块时,您可以检查该块的最大值,如果超过阈值,则将一个计数器设置为帧大小加上所需的溢出量,如果当前没有打开的wave文件,则使用基于在时间上,如果没有减1的计数器(如果计数器超过0并写入文件),则当计数器达到0时关闭文件。


免费
Android我不认为pyaudio已移植到android,所以没有

帧的大小将决定录制声音之前的时间。您还可以按选定的时间将声音的末尾溢出。
文件名中的时间戳可以让您查看声音的产生时间。

Python也可以用于绘制和分析生成的文件如本博客中所述。

评论


非常好。这是一个随时可用的脚本,还是您自己编写了此脚本?

–声音
2015年10月3日,下午6:29

该示例脚本随时可用-您需要进行一些微调以获取所需的内容,但是您应该能够很容易地做到这一点。

–史蒂夫·巴恩斯(Steve Barnes)
2015年10月3日在8:45

您可能也对zulko.github.io/blog/2014/07/04/…感兴趣,该网站使用类似的机制来识别足球比赛视频的重要部分。

–史蒂夫·巴恩斯(Steve Barnes)
2015年10月3日在18:34

感谢史蒂夫的创意!

– RockPaperLz-掩盖它或棺材♦
2015年10月6日在17:28

#3 楼

只需使用自动录音机,它就可以满足您的所有需求,包括有噪音时的自动录音。



评论


该应用没有更新超过2.5年。它仍然可以在Kitkat上可靠地工作(尤其是考虑到SD卡的东西)吗?它是否符合所有其他要求,例如电池电量低(根据您的经验/信息有多低)?是什么使它值得推荐(最好是个人经验)?请阅读我们关于优质答案的讨论,看看是否可以改善您的帖子。谢谢!

– Izzy♦
2015年10月3日在10:27