Die Fragmente, die Du bemängelst, sind Überbleibsel aus der Entstehungsphase die ich (noch) nicht rausgeschmisseb habe, weil sie im nächsten Schritt wieder gebraucht werden. Mir ist klar, dass das für Dich störend wirkt.
Was die Strategie angeht, bin ich ja mittlerweile mit Euch/Dir eins. Mir fehlt eben noch Erfahrung.
Vielen Dank nochmal für Deine Überarbeitung. Das ist ja alles Arbeit.
Könntest Du vielleicht so nett sein und den "spielen"-Part nochmal anschauen. Wenn der läuft, kann ich mich erst mal wieder selbst beschäftigen. Außerdem muss ich Euren "Stil" verstehen lernen.
Am Ende werde ich Euch das Produkt auf alle Fälle zeigen.
Multiprocessing bei getrennten Prozessen
Liebé Pythonianer,
schade, dass niemand meine letzte Bitte bearbeitet.
Jetzt sieht mein Skript zwar schöner aus, kann aber das Gleiche wie am Anfang.
Ein Prozess (tasten) läuft, der 2. Prozess (spielen) läuft nicht.
Wenn ich nachvollziehe, wo der Raspi aussteigt, sehe ich, dass spielen nicht erreicht wird
Das war der Grund, weshalb ich dachte, ich muss nach einer Multiprozesslösung suchen.
Na egal. Es wäre toll, wenn mir jemand helfen könnte.
schade, dass niemand meine letzte Bitte bearbeitet.
Jetzt sieht mein Skript zwar schöner aus, kann aber das Gleiche wie am Anfang.
Ein Prozess (tasten) läuft, der 2. Prozess (spielen) läuft nicht.
Wenn ich nachvollziehe, wo der Raspi aussteigt, sehe ich, dass spielen nicht erreicht wird
Das war der Grund, weshalb ich dachte, ich muss nach einer Multiprozesslösung suchen.
Na egal. Es wäre toll, wenn mir jemand helfen könnte.
Naja, __blackjacks__ Variante hat einen kleinen Fehler hier:
Jeder der den Code versucht zu verstehen, wird relativ schnell sehen, warum `tasten` läuft und warum `spielen` nicht läuft und an diesen zwei Zeilen auch korrigieren können.
Code: Alles auswählen
def main():
tasten()
threading.Thread(target=spielen, daemon=True).start()
- __blackjack__
- User
- Beiträge: 13938
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ups, der ist wirklich peinlich, weil offensichtlich. 
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Tja, ich bin eben ein (noch) Nichtversteher.
Ich hab versucht Gründe zu finden, aber leider erfolglos.
Könnt Ihr bitte so nett sein, und einfach die Lösung posten.
Ich weiß, dass ich mich nicht besonders schlau anstelle, aber es gibt auch Ebenen, auf denen ich was geben kann und tue das auch.
Ich hab versucht Gründe zu finden, aber leider erfolglos.
Könnt Ihr bitte so nett sein, und einfach die Lösung posten.
Ich weiß, dass ich mich nicht besonders schlau anstelle, aber es gibt auch Ebenen, auf denen ich was geben kann und tue das auch.
Danke deets,
jetzt habe ich zum ersten Mal beide Teile gleichzeitig spielen koennen.
Leider bricht "spielen" nach ein paar Toenen ab und berichtet folgendes:
Code: Alles auswählen
ALSA lib seq_hw.c:466:(snd_seq_hw_open) open /dev/snd/seq failed: Cannot allocate memory
MidiInAlsa::initialize: error creating ALSA sequencer client object.
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/usr/lib/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "/home/pi/rpituto/mforum1.py", line 63, in spielen
with mido.open_input("Impulse:Impulse MIDI 1 28:0") as inport:
File "/usr/lib/python3/dist-packages/mido/backends/backend.py", line 91, in open_input
return self.module.Input(name, **self._add_api(kwargs))
File "/usr/lib/python3/dist-packages/mido/ports.py", line 161, in __init__
BasePort.__init__(self, name, **kwargs)
File "/usr/lib/python3/dist-packages/mido/ports.py", line 86, in __init__
self._open(**kwargs)
File "/usr/lib/python3/dist-packages/mido/backends/rtmidi.py", line 119, in _open
self._rt = rtmidi.MidiIn(name=client_name, rtapi=rtapi)
File "src/_rtmidi.pyx", line 728, in rtmidi._rtmidi.MidiIn.__cinit__
RuntimeError: MidiInAlsa::initialize: error creating ALSA sequencer client object.
Das scheint eher ein allgemeines Problem mit MIDI/ALSA und Feedback-Loops: https://sourceforge.net/p/grfloorboard/ ... /05b28d22/
- __blackjack__
- User
- Beiträge: 13938
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Vielleicht hängt es auch damit zusammen oder wird dadurch begünstigt das für jede Nachricht Input und Output geöffnet und geschlossen werden, statt das *einmal* zu machen, *vor* der Schleife. Das hatte ich ja bereits hinterfragt.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Ja, das kann sein.
Das folgende Teil-Script laeuft ohne Probleme.
Vielleicht wird die Loop durch den "tasten"-Teil hervorgerufen ...?
Ich habe das obige Teilscript in blackjacks Script eingefuegt. Es zeigt aber die gleichen Ausfaelle, wie das korrigierte blackjack-Script.
Das folgende Teil-Script laeuft ohne Probleme.
Code: Alles auswählen
import pygame.mixer
pygame.init()
pygame.mixer.init(44100, 16, 2, 4096)
pygame.mixer.music.set_volume(0.6)
sound = pygame.mixer.Sound('/home/pi/rpituto/wav/mitest.wav')
import RPi.GPIO as GPIO
import time
import openpyxl
import mido
from mido import Message
mido.get_input_names()
mido.get_output_names()
mido.backends.rtmidi
from collections import deque
import RPi.GPIO as GPIO
inport = mido.open_input('Impulse:Impulse MIDI 1 28:0')
outport = mido.open_output('E-MU Xmidi 2x2 MIDI 1')
msglog = deque()
echo_delay = 1
while True:
msg = inport.receive()
msglog.append({"msg": msg, "due": time.time() + echo_delay})
outport.send(msglog.popleft()["msg"])
Ich habe das obige Teilscript in blackjacks Script eingefuegt. Es zeigt aber die gleichen Ausfaelle, wie das korrigierte blackjack-Script.