国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

python - pyaudio stream.close() führt zum Absturz des Programms und die Ausnahme kann nicht abgefangen werden
我想大聲告訴你
我想大聲告訴你 2017-06-12 09:25:06
0
1
1370

Ich m?chte Pyaudio h?ufig zum Abspielen von Audio verwenden. Obwohl es sich nicht um ein Multithread-Modul handelt, sollte es kein Problem mit der Steuerung des Wiedergabeschalters geben. Aber als ich damit spielte, geriet ich in Schwierigkeiten, die ich nicht l?sen konnte.

import threading
import wave
import pyaudio
import time
pa=pyaudio.PyAudio()
f=wave.open('/home/dyan/catkin_ws/src/hlf_robot/scripts/hlf_voice/my.wav','rb')
raw_data=f.readframes(f.getnframes())
f.close()
samplewidth,channels,framerate,raw_data=2,1,16000,raw_data

i=0
stream1=''
def test():
    while True:
        global i,pa,stream1
        try:
            print i
            stream1=pa.open(format=pa.get_format_from_width(samplewidth),
                            channels=channels,
                            rate=framerate,
                            output=True)
            stream1.write(raw_data)
    
            i+=1
            print i
        except IOError,e:
                print e
        except Exception,e:
                print e
                break
t0=threading.Thread(target=test)
t0.start()
time.sleep(3)
while True:
    if stream1.is_active():
        print "is_active"
    else:
        print "not active"
    if stream1.is_stopped():
        print "is_stopped"
    else:
        print "not stopped"
    print stream1._is_running
    print stream1._stream
    print '123'
    try:
        stream1.stop_stream()
        print '456'
        stream1.close()
    except Exception,e:
        print e
        break
    print '789'
    time.sleep(3)

Die Ausgabe sieht so aus und dann stürzt es ab

0                                                #子線程循環(huán)第一次
is_active                                        #
not stopped                                      #
True                                             #stream1._is_running
<_portaudio.Stream object at 0x7efd71e00cb0>     #stream1._stream
123                                              #調(diào)用stop_stream()之前
456                                              #調(diào)用stop_stream()之后,close()之前
[Errno Unanticipated host error] -9999           #子線程捕獲到主線程調(diào)用stream1.stop_stream()時(shí)由stream1.write()拋出的異常IOError,忽略這個(gè)異常繼續(xù)執(zhí)行
0                                                #子線程stream1.write()拋出異常i+=1未執(zhí)行繼續(xù)循環(huán)在pa.open()之前的print

1. Mit anderen Worten: Der Aufruf von stream1.close() nach dem Aufruf von stream1.stop_stream() führte zum Absturz des Programms und weder der untergeordnete Thread noch der Hauptthread haben die Ausnahme abgefangen! ! ! !
2. Wenn Sie close() nach stop_stream() auskommentieren, gibt es für kurze Zeit kein Problem. Wenn es jedoch etwa 10 Minuten lang weiterl?uft, stürzt es nicht mehr ab weiterspielen. pa.open() l?st weiterhin eine Ausnahme aus [Fehler: Ungültige Kombination von E/A-Ger?ten] -9993 Wenn ich das Programm schlie?e und neu starte, l?st pa.open() eine Ausnahme aus (?Ungültige Abtastrate“, -9997). . Zur Wiedergabe Nicht mehr! ! !

Wie kann dieses Problem gel?st werden?


Derzeit besteht die L?sung darin, ein pyaudio.Pyaudio()-Objekt bei jeder Wiedergabe erneut zu ?ffnen, was etwa 10 ms zus?tzliche CPU-Zeit verbraucht. Ich habe es fast 20 Stunden lang ohne Probleme laufen lassen.

...
try:
    self.pa=pyaudio.PyAudio()
                    
    self.stream=self.pa.open(format=self.pa.get_format_from_width(samplewidth),
                    channels=channels,
                    rate=framerate,
                    output=True)
    self.stream.write(raw_data)
except IOError,e:
    pass
finally:
    self.stream.close()
    self.pa.terminate()
...
我想大聲告訴你
我想大聲告訴你

Antworte allen(1)
阿神

這裡給了一個(gè)可能解決方法(workaround),ghost commented on 30 Jul 2016

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage