Anonymous
Скрипт Rpi Python продолжает работать после остановки
Сообщение
Anonymous » 01 ноя 2024, 16:56
У меня есть 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
1730469386
Anonymous
У меня есть Raspberry Pi со сценарием pyaudio. Я записываю, и когда я использую клавиатурное прерывание (обычно это другой способ закрытия, но я использую клавиатурное прерывание для демонстрационных целей). В любом случае, когда я использую клавиатурное прерывание, он продолжает экспортировать. Есть идеи, как помешать этому? Мой код: [code]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() [/code] Любая помощь очень ценится, я застрял на 2 месяца. Подробнее здесь: [url]https://stackoverflow.com/questions/79148118/rpi-python-script-keeps-running-after-stopped[/url]