2012-03-28 35 views
7

Tôi đang cố gắng tìm cách thu âm giọng nói tổng hợp và ghi lại nó thành một tệp âm thanh. Tôi hiện đang sử dụng pyttsx làm thư viện chuyển văn bản thành giọng nói của mình, nhưng không có cơ chế để lưu đầu ra vào tệp, chỉ phát trực tiếp từ loa. Tôi đã xem xét detecting and recording audio cũng như PyAudio, nhưng chúng dường như có đầu vào từ micrô thay vì chuyển hướng âm thanh đi tới một tệp. Có cách nào để biết điều này không?Ghi tổng hợp văn bản thành giọng nói thành một tệp bằng Python

Trả lời

4

Bạn có thể gọi espeak với đối số -w bằng cách sử dụng subprocess.

import subprocess 

def textToWav(text,file_name): 
    subprocess.call(["espeak", "-w"+file_name+".wav", text]) 

textToWav('hello world','hello') 

Điều này sẽ viết file_name.wav mà không đọc to. Nếu văn bản của bạn nằm trong tệp (ví dụ: text.txt), bạn cần gọi espeak với thông số -f ("-f" + văn bản). Tôi khuyên bạn nên đọc espeak man pages để xem tất cả các tùy chọn bạn có.

Hy vọng điều này sẽ hữu ích.

+0

Awesome, mà đã làm lừa! Cảm ơn! – petrichor

1

Bạn có thể sử dụng trình bao bọc SAPI nâng cao hơn để lưu đầu ra vào tệp wav. Ví dụ, bạn có thể thử

https://github.com/DeepHorizons/tts

Mã nên trông như thế này:

import tts.sapi 
voice = tts.sapi.Sapi() 
voice.set_voice("Joey") 
voice.create_recording('hello.wav', "Hello") 
2

Dưới đây là một ví dụ trong đó cung cấp cho bạn truy cập vào các API NSSpeechSynthesizer

#!/usr/bin/env python 

from AppKit import NSSpeechSynthesizer 
import sys 
import Foundation 


if len(sys.argv) < 2: 
    text = raw_input('type text to speak> ') 
else: 
    text = sys.argv[1] 

nssp = NSSpeechSynthesizer 
ve = nssp.alloc().init() 
ve.setRate_(100) 
url = Foundation.NSURL.fileURLWithPath_('yourpath/test.aiff') 
ve.startSpeakingString_toURL_(text,url) 
Các vấn đề liên quan