Как исправить: Errno -9985 Устройство недоступно - pyaudio - микро - малина - PullRequest
0 голосов
/ 29 июня 2019

Кто-нибудь может помочь решить следующую проблему?

Когда я запускаю свою программу pyaudio на Raspberry (Raspbian-standard-not full, not lite, но я пытался также с тем же результатом-) она вылетает с ошибкой (смотрите ниже)

Микрофон подключен, RPi показывает, что он подключен, но похоже, что pyaudio не может найти микро.

Я установил libportaudio0 / 2 / cpp0, portaudio19-dev, pyaudio иосновные вещи ...

То, что я пробовал до сих пор: - переустановить portaudio через tar.gz - переустановить pyaudio через git clone - прочитать все записи pyaudio и alsa в stackoverflow и использовать их безуспешно - почувствоватьвроде все перепробовал, но ничего не получалось (ожидайте, что с помощью PYO я никогда не пробовал с помощью PYO)

Мой код выглядит так:

    import spl_lib as spl
    import numpy as np
    import pyaudio
    import time
    from scipy.signal import lfilter
    import RPi.GPIO as rg

    class Audio(object):
        def __init__(self):
            self.FORMAT = pyaudio.paInt16
            self.CHANNELS = 1
            self.RATE = 44100
            self.CHUNK = 4096
            self.IOPUT = True

            self.NUMERATOR, self.DENUMERATOR = spl.a_weighting(self.RATE)

            self.pa = pyaudio.PyAudio()
            self.stream = self.pa.open(format=self.FORMAT, channels=self.CHANNELS, rate=self.RATE, input=self.IOPUT, output=self.IOPUT, frames_per_buffer=self.CHUNK)

        def update(self):
            data = self.stream.read(self.CHUNK)
            decoded = np.fromstring(data, 'Int16')
            filt = lfilter(self.NUMERATOR, self.DENUMERATOR, decoded)
            decibel = 20*np.log10(spl.rms_flat(filt))+48
            if(decibel>80.0):
                print('It is really loud: ' + str(decibel) + ' dBA')
            if(decibel>100.5):
                print('It is too lod: ' + str(decibel) + ' dBA')
                too_loud()

        def too_loud(self):
            #here will be the RPi.GPIO-stuff
            print('It is far too loud')

    if __name__ == '__main__':
        audio = Audio()
        audio.__init__()
        while(True):
            try:
                audio.update()
            except:
                print('There has occured an error')
                time.sleep(10)
                print('Lets try again')
        print('End')
    #end

Выдается следующее сообщение об ошибке:

    Traceback (most recent call last):
      File "audio.py", line 50, in <module>
        audio_app.__init__()
      File "audio.py", line 22, in __init__
        self.stream = self.pa.open(format=self.FORMAT, channels=self.CHANNELS, rate=self.RATE, input=self.IOPUT, output=self.IOPUT, frames_per_buffer=self.CHUNK)
      File "/usr/lib/python2.7/dist-packages/pyaudio.py", line 750, in open
        stream = Stream(self, *args, **kwargs)
      File "/usr/lib/python2.7/dist-packages/pyaudio.py", line 441, in __init__
        self._stream = pa.open(**arguments)
    IOError: [Errno -9985] Device unavailable

(PS: Он отлично работает на моей MS-Surface, но Raspberry просто создает проблемы: o Он должен стать небольшим анализатором спектра, который работает с Arduino и взаимодействует черезGPIO-Board.

Spl_lib клонируется из Git-аккаунта SuperShinyEyes

, если вы прочитаете это, большое спасибо за эту библиотеку)

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

Хорошо, правда, я тупой.

Я сделал именно то, что сказал.Я не закрывал Stream, потому что init вызывался дважды; (один раз после вызова конструктора и один раз, когда я вручную вызвал метод init ; D

    How to delete this post? I'd prefer nobody can read my stupidity ;p

(не распознал, что я вызвал init вручную ... Это было частью тестов, и я не удалил эту строку)

0 голосов
/ 29 июня 2019

Вот некоторые дополнения:

Я проверил это в командной строке, и вот что я получаю:

    pi@raspberrypi:~ $ python
    Python 2.7.16 (default, Apr  6 2019, 01:42:57) 
    [GCC 8.2.0] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pyaudio
    >>> import numpy as np
    >>> pa = pyaudio.PyAudio()
    Expression 'alsa_snd_pcm_hw_params_set_period_size_near( pcm, hwParams, &alsaPeriodFrames, &dir )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 924
    Expression 'alsa_snd_pcm_hw_params_set_period_size_near( pcm, hwParams, &alsaPeriodFrames, &dir )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 924
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.bcm2835_alsa.pcm.front.0:CARD=0'
    ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM front
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.bcm2835_alsa.pcm.surround51.0:CARD=0'
    ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM surround21
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.bcm2835_alsa.pcm.surround51.0:CARD=0'
    ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM surround21
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.bcm2835_alsa.pcm.surround40.0:CARD=0'
    ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM surround40
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.bcm2835_alsa.pcm.surround51.0:CARD=0'
    ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM surround41
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.bcm2835_alsa.pcm.surround51.0:CARD=0'
    ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM surround50
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.bcm2835_alsa.pcm.surround51.0:CARD=0'
    ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM surround51
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.bcm2835_alsa.pcm.surround71.0:CARD=0'
    ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM surround71
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.bcm2835_alsa.pcm.iec958.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2'
    ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM iec958
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.bcm2835_alsa.pcm.iec958.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2'
    ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM spdif
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'cards.bcm2835_alsa.pcm.iec958.0:CARD=0,AES0=4,AES1=130,AES2=0,AES3=2'
    ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5047:(snd_config_expand) Evaluate error: No such file or directory
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM spdif
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'defaults.bluealsa.device'
    ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5036:(snd_config_expand) Args evaluate error: No such file or directory
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM bluealsa
    ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition 'defaults.bluealsa.device'
    ALSA lib conf.c:4568:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
    ALSA lib conf.c:5036:(snd_config_expand) Args evaluate error: No such file or directory
    ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM bluealsa
    >>> stream = pa.open(format=pyaudio.paInt16, channels=1, rate=44100, input=True, output=True, frames_per_buffer=2048)
    >>> data = stream.read(2048)
    >>> decoded = np.decoded = np.fromstring(data, 'Int16')
    >>> print(str(decoded))
    [  5  30  40 ... 191 187 191]
    >>> 

Так что Python знает правильный микрофон ... но почему он все еще неполучать это.Когда я запускаю скрипт, у него все еще есть это сообщение об ошибке.

(И я не тупой, я закрыл поток)

...