OSX - #include "portaudio.h" 1 生成错误。错误:命令“/usr/bin/clang”失败,退出状态为 1

Luc*_*ool 1 python macos terminal pyaudio

我正忙于制作语音识别代码,我有这个:

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()
Run Code Online (Sandbox Code Playgroud)

但每次我运行它时,它都会说:ImportError:没有名为 pyaudio 的模块。

然后我去终端,我做 pip install pyaudio 但它显示了这个:

#include "portaudio.h"

         ^
1 error generated.
error: command '/usr/bin/clang' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)

我从 2011 年开始使用 MacOS Sierra 版本 10.12.5 的 Macbook。我查看了每个堆栈溢出页面,但没有任何效果。请帮我!

San*_*nju 5

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

来自pyaudio网站

Apple Mac OS X 使用 Homebrew 安装必备的 portaudio 库,然后使用 pip 安装 PyAudio:

brew install portaudio 
pip install pyaudio
Run Code Online (Sandbox Code Playgroud)

笔记:

如果尚未安装,请下载 Homebrew。pip 将下载 PyAudio 源并为您的 Python 版本构建它。Homebrew 和构建 PyAudio 还需要为 Xcode 安装命令行工具(更多信息)。