使用 systemctl 和 Python 从启动时录制音频

问题描述

我正在尝试使用 Python 脚本在 5 秒的剪辑中录制音频。直接从终端 (fs.unlink('path/to/file')) 运行时,脚本运行良好,但当我尝试使用 python3 record_audio.py 从启动时运行它时失败。这是脚本:

systemctl

我像这样设置了服务import pyaudio,wave,time,sys,os from array import array FORMAT=pyaudio.paInt16 CHANNELS=1 CHUNK=1024 RATE=44100 RECORD_SECONDS=5 audio=pyaudio.PyAudio() stream=audio.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK) while True: # read data data=stream.read(CHUNK) data_chunk=array('h',data) frames=[] print("recording") for i in range(0,int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) frames.append(data) # write to file words = ["RECORDING-",time.strftime("%Y%m%d-%H%M%s"),".wav"] FILE_NAME= "".join(words) wavfile=wave.open(FILE_NAME,'wb') wavfile.setnchannels(CHANNELS) wavfile.setsampwidth(audio.get_sample_size(FORMAT)) wavfile.setframerate(RATE) wavfile.writeframes(b''.join(frames)) wavfile.close() print("saved")

sudo nano /etc/systemd/system/record_audio.service

然后我运行了 [Unit] Description=My service [Service] Type=oneshot ExecStart=/usr/bin/python3 -u record_audio.py WorkingDirectory=/home/pi User=pi [Install] WantedBy=multi-user.target 。为了测试服务,我使用 sudo systemctl daemon-reload。结果是它保存了一个文件,然后以这个错误退出

sudo systemctl start record_audio.service

Job for record_audio.service Failed because the control process exited with error code. See "systemctl status record_audio.service" and "journalctl -xe" for details. 给出:

systemctl status record_audio.service

预期的结果是它会在 5 秒的剪辑中无限期地记录音频。当我从终端运行 ● record_audio.service - My service Loaded: loaded (/etc/systemd/system/record_audio.service; disabled; vendor preset: enabled) Active: Failed (Result: exit-code) since Sat 2021-07-31 17:56:15 BST; 3s ago Process: 3651 ExecStart=/usr/bin/python3 -u record_audio_2.py (code=exited,status=1/FAILURE) Main PID: 3651 (code=exited,status=1/FAILURE) Jul 31 17:56:15 raspBerrypi python3[3651]: recording Jul 31 17:56:15 raspBerrypi python3[3651]: Traceback (most recent call last): Jul 31 17:56:15 raspBerrypi python3[3651]: File "record_audio_2.py",line 24,in <module> Jul 31 17:56:15 raspBerrypi python3[3651]: data = stream.read(CHUNK) Jul 31 17:56:15 raspBerrypi python3[3651]: File "/home/pi/.local/lib/python3.7/site-packages/pyaudio.py",line 608,in read Jul 31 17:56:15 raspBerrypi python3[3651]: return pa.read_stream(self._stream,num_frames,exception_on_overflow) Jul 31 17:56:15 raspBerrypi python3[3651]: OSError: [Errno -9981] Input overflowed Jul 31 17:56:15 raspBerrypi systemd[1]: record_audio.service: Main process exited,code=exited,status=1/FAILURE Jul 31 17:56:15 raspBerrypi systemd[1]: record_audio.service: Failed with result 'exit-code'. Jul 31 17:56:15 raspBerrypi systemd[1]: Failed to start My service. 时它工作正常,所以我不知道如何解决这个问题。有什么想法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)