1

您好,我正在尝试找出一些假设通过网络发送语音的代码。我发送的音频有问题,但它只是一系列响亮的哔哔声,而不是我输入的音频

哔声结束后,我得到一个 EOFError

我花了过去 48 小时试图弄清楚这一点,任何想法都非常感谢

相关代码

导入pyaudio
进口speex
导入系统

块 = 320
格式 = pyaudio.paInt16
频道 = 1
速率 = 44100
RECORD_SECONDS = 5

### 服务器功能###
定义服务器():
    ### 初始化套接字
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((主机,端口))
    听(5)
    ### 开始接收循环
    而真:
...
        elif cmd == CMD_AUDIO:
            d = speex.Decoder()
            d.初始化(speex.SPEEX_MODEID_WB)
            p = pyaudio.PyAudio()
            流 = p.open(格式 = 格式,
                            频道 = 频道,
                            率 = 率,
                            输入=真,
                            输出=真,
                            frames_per_buffer = 块)

            #voice = cPickle.loads(decrypt_my_message(msg))
            声音 = cPickle.loads(msg)
            打印语音
            对于我在范围内(len(语音)):
                decdata = d.decode(voice[i])#DECODE 我的数据。(YaY)#解码我的数据。(耶)
                stream.write(str(voice), chunk) #将数据写回扬声器
            stream.stop_stream()
            流.close()
            p.terminate()
            d.destroy()
        如果不是味精:休息

    conn.close()


### 从麦克风读取数据###

默认发送音频():
    块列表 = []
    init_my_audio = speex.Encoder()
    init_my_audio.initialize(speex.SPEEX_MODEID_WB)
    p = pyaudio.PyAudio()
    流 = p.open(格式 = 格式,
                    频道 = 频道,
                    率 = 率,
                    输入=真,
                    输出=真,
                    frames_per_buffer = 块)

    对于范围内的 i (0, 44100 / 块 * RECORD_SECONDS):
        尝试:
            数据 = 流。读取(块)
        除了 IOError:
            经过
        encda​​ta = init_my_audio.encode(数据)
        chunklist.append(encda​​ta)
        客户端(chr(CMD_AUDIO),cPickle.dumps((块列表),1))
    stream.stop_stream()
    流.close()
    p.terminate()
    init_my_audio.destroy()

4

0 回答 0