J'essaye actuellement d'écrire un programme voicechat en python. Tous les conseils/astuce est la bienvenue pour le faire. Jusqu'à présent, j'ai trouvé que pyAudio était un emballage de PortAudio. J'ai donc joué avec ça et j'ai reçu un flux d'entrée de mon microphone pour être lu sur mes haut-parleurs. Seulement RAW bien sûr.communication vocale pour l'aide de python!
Mais je ne peux pas envoyer de données RAW sur le netowrk (en raison de la taille duh), donc je cherche un moyen de l'encoder. Et j'ai cherché autour du filet et j'ai trébuché sur this speex-wrapper pour python. Cela semble bon d'être vrai, et croyez-moi, c'était. Vous voyez dans pyAudio vous pouvez définir la taille des morceaux que vous voulez prendre de votre audio-lecteur d'entrée, et dans cet exemple de code sur le lien, il est réglé sur 320. Puis, quand il est codé, c'est comme ~ 40 octets de données par morceau, ce qui est assez acceptable, je suppose. Et maintenant pour le problème.
Je démarre un exemple de programme qui prend simplement le flux d'entrée, code les morceaux, les décode et les lit (ne pas envoyer sur le réseau en raison des tests). Si je laisse mon ordinateur inactif et que j'exécute ce programme, cela fonctionne très bien, mais dès que je fais quelque chose, par exemple, je lance Firefox ou quelque chose, le tampon d'entrée audio est tout bouché! Il se développe juste et puis tout se bloque et me donne une erreur de débordement sur le tampon ..
OK, alors pourquoi je prends seulement 320 octets du flux? Je pourrais juste prendre comme 1024 octets ou quelque chose et ce sera facile la pression sur le tampon. MAIS. Si je donne à speex 1024 octets de données à encoder/décoder, il se bloque et dit que c'est trop grand pour son tampon. OU il l'encode/le décode, mais le son est très bruyant et "saccadé" comme s'il encodait seulement un tout petit peu de ce bloc de 1024 et le reste était du bruit statique. Donc le son ressemble à un hélicoptère, lol.
J'ai fait quelques recherches et il semble que speex seulement peut convertir 320 octets de données à la fois, et bien, 640 pour large bande. Mais c'est la norme? Comment puis-je résoudre ce problème? Comment devrais-je construire mon programme pour travailler avec speex? Je pourrais utiliser un tampon intermédiaire tho qui prend toutes les données disponibles à lire à partir du tampon, puis le découper en 320 bits et les encoder/décoder. Parce que pour autant que je sache, il n'y a pas d'autre codeur pour python qui code l'audio afin qu'il puisse être envoyé sur le réseau dans un délai acceptable.
petits paquets, ou? Je googling depuis trois jours maintenant.
Aussi il ya cette bibliothèque de pyMedia, je ne sais pas si c'est bon de convertir en mp3/ogg pour ce genre de logiciel.
Merci d'avance pour lire ceci, j'espère que n'importe qui peut m'aider! (: