OSX - #include "portaudio.h" 1 error generated. error: command '/usr/bin/clang' failed with exit status 1

OSX - #include "portaudio.h" 1 error generated. error: command '/usr/bin/clang' failed with exit status 1

我正忙着做一个语音识别代码,我有这个:

from pocketsphinx.pocketsphinx import *
from sphinxbase.sphinxbase import *

import os
import pyaudio
import wave
import audioop
from collections import deque
import time
import math

 class SpeechDetector:
     def __init__(self):
        self.CHUNK = 1024
        self.FORMAT = pyaudio.paInt16
        self.CHANNELS = 1
        self.RATE = 16000

        self.SILENCE_LIMIT = 1
        self.PREV_AUDIO = 0.5

        self.THRESHOLD = 4500
        self.num_phrases = -1

        MODELDIR = "../../tools/pocketsphinx/model"
        DATADIR = "../../tools/pocketsphinx/test/data"

        config = Decoder.default_config()
        config.set_string('-hmm', os.path.join(MODELDIR, 'en-us/en-us'))
        config.set_string('-lm', os.path.join(MODELDIR, 'en-us/en-us.lm.bin'))
        config.set_string('-dict', os.path.join(MODELDIR, 'en-us/cmudict-en-us.dict'))

        self.decoder = Decoder(config)

    def setup_mic(self, num_samples=50):
        print "Getting intensity values from mic."
        p = pyaudio.PyAudio()
        stream = p.open(format=self.FORMAT,
                        channels=self.CHANNELS,
                        rate=self.RATE,
                        input=True,
                        frames_per_buffer=self.CHUNK)

        values = [math.sqrt(abs(audioop.avg(stream.read(self.CHUNK), 4)))
            for x in range(num_samples)]
            values = sorted(values, reverse=True)
        r = sum(values[:int(num_samples * 0.2)]) / int(num_samples * 0.2)
        print " Finished "
        print " Average audio intensity is ", r
        stream.close()
        p.terminate()

        if r < 3000:
            self.THRESHOLD = 3500
        else:
            self.THRESHOLD = r + 100

    def save_speech(self, data, p):

        filename = 'output_'+str(int(time.time()))
        data = ''.join(data)
        wf = wave.open(filename + '.wav', 'wb')
        wf.setnchannels(1)
        wf.setsampwidth(p.get_sample_size(pyaudio.paInt16))
        wf.setframerate(16000)
        wf.writeframes(data)
        wf.close()
        return filename + '.wav'

def decode_phrase(self, wav_file):
    self.decoder.start_utt()
    stream = open(wav_file, "rb")
    while True:
        buf = stream.read(1024)
        if buf:
            self.decoder.process_raw(buf, False, False)
            self.decoder.end_utt()

            words = []
            [words.append(seg.word) for seg in self.decoder.seg()]
            return words

def run(self):
    self.setup_mic()

p = pyaudio.PyAudio()
stream = p.open(format=self.FORMAT,
                channels=self.CHANNELS,
                rate=self.RATE,
                input=True,
                frames_per_buffer=self.CHUNK)
print "* Mic set up and listening. "

audio2send = []
cur_data = ''
rel = self.RATE/self.CHUNK
slid_win = deque(maxlen=self.SILENCE_LIMIT * rel)
prev_audio = deque(maxlen=self.PREV_AUDIO * rel)
started = False

while True:
    cur_data = stream.read(self.CHUNK)
    slid_win.append(math.sqrt(abs(audioop.avg(cur_data, 4))))

    if sum([x > self.THRESHOLD for x in slid_win]) > 0:
        if started == False:
            print "Starting recording of phrase"
            started = True
            audio2send.append(cur_data)
       elif started:
           print "Finished recording, decoding phrase"
           filename = self.save_speech(list(prev_audio) + audio2send, p)
            r = self.decode_phrase(filename)
            print "DETECTED: ", r
            os.remove(filename)

stream.close()
p.terminate()

if __name__ == "__main__":
    sd = SpeechDetector()
    sd.run()

但每次我 运行 它都会说:ImportError: No module named pyaudio.

然后我去终端,我做 pip install pyaudio 但随后显示:

#include "portaudio.h"

         ^
1 error generated.
error: command '/usr/bin/clang' failed with exit status 1

我使用的是装有 MacOS Sierra 10.12.5 版(2011 年版)的 Macbook。我查看了每个堆栈溢出页面,但没有任何效果。请帮助我!

在安装pyaudio之前你需要先安装portaudio。使用自制软件安装 portaudio

来自pyaudio 网站

Apple Mac OS X Use Homebrew to install the prerequisite portaudio library, then install PyAudio using pip:

brew install portaudio 
pip install pyaudio

Notes:

If not already installed, download Homebrew. pip will download the PyAudio source and build it for your version of Python. Homebrew and building PyAudio also require installing the Command Line Tools for Xcode (more information).

就我而言,安装 pyaudiobrew install portaudio 之后仍然失败。

我删除了我的 python env(由 virtualenv 创建),它有效。