Скрипт Rpi Python продолжает работать после остановкиLinux

Ответить
Anonymous
 Скрипт Rpi Python продолжает работать после остановки

Сообщение Anonymous »

У меня есть Raspberry Pi со сценарием pyaudio. Я записываю, и когда я использую клавиатурное прерывание (обычно это другой способ закрытия, но я использую клавиатурное прерывание для демонстрационных целей). В любом случае, когда я использую клавиатурное прерывание, он продолжает экспортировать. Есть идеи, как помешать этому?
Мой код:

Код: Выделить всё

import pyaudio
import time
import wave
import RPi.GPIO as GPIO
from datetime import datetime

rg = False #rg is short for recording if rg is false then I'm not recording

# Configuration
BUTTON_PIN = 27  # GPIO pin number for the button
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 0  # Not used directly in this case

# Initialize PyAudio
audio = pyaudio.PyAudio()

# GPIO setup
GPIO.setmode(GPIO.BCM)
#GPIO.setwarnings(False)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(BUTTON_PIN_TWO, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(10, GPIO.OUT)  # green
GPIO.setup(9, GPIO.OUT)  # yellow
GPIO.setup(11, GPIO.OUT)  # red

def record_audio(filename):
global stream, frames, rg
stream = audio.open(format=FORMAT, channels=CHANNELS,
rate=RATE, input=True, frames_per_buffer=CHUNK)
GPIO.output(11, GPIO.HIGH)
print("Recording started")

rg = True #i'm recording

frames = []
while GPIO.input(BUTTON_PIN) == GPIO.LOW: #if button is being held down, record
data = stream.read(CHUNK)
frames.append(data)

close_recording(stream)
write_file(filename, frames)

def close_recording(recording):
global rg
recording.stop_stream()
recording.close()
GPIO.output(11, GPIO.LOW)
print("Recording stopped")
rg = False #i'm not

def write_file(filename, frames):
global rg
# Save to WAV file
wf = wave.open(filename, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(audio.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
GPIO.output(9, GPIO.HIGH)
time.sleep(1)
GPIO.output(9, GPIO.LOW)
print(f"Audio saved to {wav_filename}")

def main():
global wav_filename, rg
try:
#light sequence to show that device turned on
GPIO.output(10, GPIO.HIGH)
time.sleep(0.3)
GPIO.output(10, GPIO.LOW)
GPIO.output(9, GPIO.HIGH)
time.sleep(0.3)
GPIO.output(9, GPIO.LOW)
GPIO.output(11, GPIO.HIGH)
time.sleep(0.3)
GPIO.output(11, GPIO.LOW)
GPIO.output(9, GPIO.HIGH)
time.sleep(0.3)
GPIO.output(9, GPIO.LOW)
GPIO.output(10, GPIO.HIGH)
time.sleep(0.3)
GPIO.output(10, GPIO.LOW)
GPIO.output(10, GPIO.HIGH)
while True:
if GPIO.input(BUTTON_PIN) == GPIO.LOW: #when button is held down record
rg = True
# Button pressed: Record audio
timestamp = datetime.now().strftime("%m-%d-%Y_%H-%M-%S")
wav_filename = f"/home/pi/Desktop/Audio_Files/{timestamp}.wav"

record_audio(wav_filename)

# Wait a bit to avoid multiple recordings from a single press
time.sleep(1)
else:
rg = False
time.sleep(0.1)  # Polling delay

except KeyboardInterrupt:
print("Exiting...")

except:
#flashing light to show error
time.sleep(1)
GPIO.output(9, GPIO.LOW)
GPIO.output(11, GPIO.LOW)
t_end = time.time() + 15 * 1
while time.time() < t_end:
time.sleep(0.3)
GPIO.output(9, GPIO.HIGH)
time.sleep(0.3)
GPIO.output(9, GPIO.LOW)
time.sleep(0.3)

finally:
if(rg == True):
#rg = False
close_recording(stream)
write_file(wav_filename, frames)
audio.terminate()
GPIO.output(11, GPIO.LOW)
GPIO.output(10, GPIO.LOW)
GPIO.output(9, GPIO.LOW)
GPIO.cleanup()
else:
time.sleep(0.1)
audio.terminate()
GPIO.output(11, GPIO.LOW)
GPIO.output(10, GPIO.LOW)
GPIO.output(9, GPIO.LOW)
GPIO.cleanup()

if __name__ == "__main__":
main()
Любая помощь очень ценится, я застрял на 2 месяца.

Подробнее здесь: https://stackoverflow.com/questions/791 ... er-stopped
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»