저는 현재 파이썬에서 음성 해설 프로그램을 작성하려고합니다. 모든 팁/트릭을이 작업에 사용할 수 있습니다.파이썬 도움말을위한 음성 통신!
지금까지 pyAudio가 PortAudio의 래퍼라는 것을 알았습니다. 그래서 나는 그걸 가지고 놀았고 내 스피커에서 재생할 수 있도록 마이크에서 입력 스트림을 받았습니다. 물론 RAW 만.
하지만 netowrk를 통해 RAW 데이터를 보낼 수 없으므로 (따라서 크기가 맞습니다) 인코딩 할 방법을 찾고 있습니다. 그리고 그물 주위를 검색하고 비단뱀을 this speex-wrapper 이상 발견. 그것은 진실되고, 나를 믿는 것이 좋은 것처럼 보입니다.
pyAudio에서 입력 오디오 버퍼에서 가져올 청크의 크기를 설정할 수 있으며 링크의 샘플 코드에서 320으로 설정됩니다. 그런 다음 인코딩 할 때 ~ 40 바이트 청크 당 데이터, 상당히 받아 들일 만하다. 그리고 지금은 문제입니다.
그냥 입력 스트림을 가져오고, 청크를 인코딩하고, 디코딩하고 재생합니다 (테스트로 인해 네트워크를 통해 전송하지 않음). 방금 컴퓨터를 유휴 상태로두고이 프로그램을 실행하면 효과가 있지만, 즉 Firefox 나 다른 프로그램을 시작하자 마자 오디오 입력 버퍼가 모두 막히게됩니다. 그냥 커지면 모두 충돌이 일어나 버퍼에 오버플로 오류가 발생합니다 ..
그냥 방금 320 바이트의 스트림을 가져 오는 중입니다. 1024 바이트 또는 그와 비슷한 것만으로 버퍼에 대한 부담을 덜어줍니다. 그러나. speex에 1024 바이트의 데이터를 인코딩/디코딩하도록 지정하면 충돌이 발생하고 해당 버퍼가 너무 큽니다. 또는 그것을 인코딩/디코딩,하지만 소리가 매우 시끄러운 및 "고르지"경우에만 해당 1024 청크 작은 비트를 인코딩하고 나머지는 정적 노이즈입니다. 그래서 소리는 헬리콥터처럼 들립니다.
몇 가지 연구를했는데 speex는 320 바이트의 데이터를 시간대로 변환 할 수 있으며, 물론 640은 와이드 밴드로 변환 할 수있는 것 같습니다. 하지만 그게 표준인가요? 이 문제를 어떻게 해결할 수 있습니까? speex와 작동하도록 프로그램을 어떻게 구성해야합니까? 버퍼에서 읽을 수있는 모든 데이터를 취한 중간 버퍼 tho를 사용할 수 있습니다. 그런 다음 320 비트로 압축하여 인코딩/디코딩합니다. 그러나 이것은 약간 더 오랜 시간이 걸리고 문제의 아주 나쁜 해결책처럼 보입니다.
내가 아는 한, 오디오를 인코딩하는 파이썬 용 다른 인코더가 없기 때문에 네트워크를 통해 수용 할 수 있습니다 작은 패키지 또는? 나는 지금 3 일 동안 인터넷 검색을 해왔다.
또한이 pyMedia 라이브러리가 있는데,이 소프트웨어 종류의 경우 mp3/ogg로 변환하는 것이 좋은지 잘 모르겠다.
이것을 미리 읽어 주셔서 감사합니다. 누구든지 나를 도울 수 있기를 바랍니다! (:.