2010-02-04 5 views
1

Je travaille sur le texte trasformant de synthèse vocale, en fichiers audio mp3, en utilisant python 2.5. J'utilise pyTSS comme un module Text-To-Speech python, pour transformer du texte dans des fichiers audio .wav (dans pyTTS il n'est pas possible de coder directement au format mp3). Donc après cela, je code ces fichiers wav, au format mp3, en utilisant un encodeur de ligne de commande boiteux.encodage mp3 à partir d'un flux audio de PyTTS

Maintenant, le problème est que je voudrais insérer (en particulier un point d'un fichier audio mp3, entre deux mots) un fichier son externe particulier (comme un avertissement sonore) ou (si possible un son d'avertissement généré) .

Les questions sont:

1) Je l'ai vu que PyTTS ont des possibilités d'économiser de flux audio sur un fichier ou dans un flux de mémoire. en utilisant deux fonctions:

tts.SpeakToWave (fichier texte) ou tts.SpeakToMemory (texte)

fonction tts.SpeakToMemory Exploitation (texte), et à l'aide PyMedia j'ai pu enregistrer un mp3 directement, mais mp3 fichier (lors de la reproduction), semble incompréhensible comme donald canard! :-) Voici un extrait de code:

  params = {'id': acodec.getCodecID('mp3'), 'bitrate': 128000, 'sample_rate': 44100, 'ext': 'mp3', 'channels': 2} 

      m = tts.SpeakToMemory(p.Text) 
      soundBytes = m.GetData() 

      enc = acodec.Encoder(params) 

      frames = enc.encode(soundBytes) 
      f = file("test.mp3", 'wb') 
      for frame in frames: 
       f.write(frame) 
      f.close() 

je ne comprends pas où est le problème?!? Cette possibilité (si cela fonctionnerait correctement), il serait bon d'ignorer l'étape de transformation des fichiers wav.

2) En tant que deuxième problème, j'ai besoin de concaténer le fichier audio mp3 (obtenu à partir du module text-to-speech) avec un son d'avertissement particulier. De toute évidence, ce serait bien si je pouvais concaténer des flux de mémoire audio de texte (après le module text-to-speech) et le flux d'un son d'avertissement, avant de coder le flux de la mémoire audio dans un fichier mp3 unique.

J'ai également vu que les bibliothèques tksnack, peuvent concaténer l'audio, mais ne sont pas capables d'écrire des fichiers mp3.

J'espère avoir été clair. :-)

Merci beaucoup pour vos réponses à mes questions.

Giulio

Répondre

2

Je ne pense pas PyTTS produit des données PCM par défaut (à savoir 44100 Hz, stéréo, 16 bits). Vous devriez vérifier le format comme celui-ci:

memStream = tts.SpeakToMemory("some text") 
format = memStream.Format.GetWaveFormatEx() 

... et le remettre correctement à acodec. Par conséquent, vous pouvez utiliser les attributs format.Channels, format.BitsPerSample et format.SamplesPerSec. En ce qui concerne votre deuxième question, si les sons sont dans le même format, vous devriez pouvoir les passer tous à enc.encode, l'un après l'autre.

0

ne peut pas fournir une réponse définitive ici, désolé. Mais il y a quelques essais et erreurs: je regarderais la documentation du module pymedia pour vérifier s'il existe des configurations de qualité que vous pouvez définir.L'autre aspect est que contrairement à l'audio wave ou raw, vous ne pourrez pas simplement concaténer l'audio encodé en mp3: quelle que soit la solution que vous atteignez, vous devrez concaténer/mélanger vos sons lorsqu'ils ne sont pas compressés (non codés)), et ensuite générer l'audio codé mp3. En outre, parfois nous avons juste le sentiment que l'enregistrement d'un disque sur disque et reconvertignit, au lieu de le faire en "un pas" est gênant - tandis que dans pratie, le logiciel fait exsactly que dans les coulisses, même si nous don ne spécifiez pas un fichier nous-mêmes. Si vous êtes sur un système de type Unix, vous pouvez toujours créer un fichier spécial FIFO (avec la commande mkfifo) et y envoyer des données yoru .wav pour encodage dans un processus séparé (en utilisant lame): pour vos programmes, vous aurez l'air de en utilisant un fichier intermédiaire, mais vous ne le ferez pas.

Questions connexes