Google colab录音,如何实现更精准的方式告诉用户开始对着麦克风说话

问题描述 投票:0回答:2

我正在尝试创建一个为机器学习项目录制音频的程序,我想使用谷歌colab,这样人们就不必在他们的系统上安装或运行任何东西,我在网上找到了这个录制和播放的例子音频:

cell 1 包含录制音频的 js 代码和将其转换为字节对象的 python 代码:

# all imports
from io import BytesIO
from base64 import b64decode
from google.colab import output
from IPython.display import Javascript

RECORD = """
const sleep  = time => new Promise(resolve => setTimeout(resolve, time))
const b2text = blob => new Promise(resolve => {
  const reader = new FileReader()
  reader.onloadend = e => resolve(e.srcElement.result)
  reader.readAsDataURL(blob)
})
var record = time => new Promise(async resolve => {
  stream = await navigator.mediaDevices.getUserMedia({ audio: true })
  recorder = new MediaRecorder(stream)
  chunks = []
  recorder.ondataavailable = e => chunks.push(e.data)
  recorder.start()
  await sleep(time)
  recorder.onstop = async ()=>{
    blob = new Blob(chunks)
    text = await b2text(blob)
    resolve(text)
  }
  recorder.stop()
})
"""

def record(sec=3):
  print("")
  print("Speak Now...")
  display(Javascript(RECORD))
  sec += 1
  s = output.eval_js('record(%d)' % (sec*1000))
  print("Done Recording !")
  b = b64decode(s.split(',')[1])
  return b #byte stream

单元 2 运行录音功能:

audio = record(2)

单元格 3 创建一个显示项目,以便您可以播放录音:

import IPython.display as ipd

ipd.display(ipd.Audio(audio))

最后我会让用户说一个词 1 秒钟,我遇到的问题是,用户被告知说话的时间和实际录音开始的时间之间存在差异,如果我立即说话我讲话的开头不在音频文件中。有没有办法在出现说话命令和实际录音开始时更精确地排队?

javascript python audio google-colaboratory
2个回答
0
投票

我认为差异是因为设置所需的时间。特别是,在我们到达 recorder.start() 之前运行以下代码的时间

stream = await navigator.mediaDevices.getUserMedia({ audio: true })
recorder = new MediaRecorder(stream)
chunks = []
recorder.ondataavailable = e => chunks.push(e.data)

另外,当执行

print("Speak Now...")
时,应该紧接着执行recorder.start()。

所以我认为我们可以通过提前设置来减少延迟: print("Speak Now...");录音机.start()


0
投票

我也想使用这个代码,但是它解决了吗?我可以在某个地方找到解决方案以便我可以录制音频吗?谢谢你帮我。

© www.soinside.com 2019 - 2024. All rights reserved.