เมื่อใช้sayคำสั่งฉันสามารถให้ตัวเลือก-o (file name)เพื่อบันทึกลงไฟล์ อย่างไรก็ตามนั่นจะระงับสัญญาณเสียง
มีวิธีทำให้ทั้งสองอย่างในคำสั่งเดียวหรือไม่?
เมื่อใช้sayคำสั่งฉันสามารถให้ตัวเลือก-o (file name)เพื่อบันทึกลงไฟล์ อย่างไรก็ตามนั่นจะระงับสัญญาณเสียง
มีวิธีทำให้ทั้งสองอย่างในคำสั่งเดียวหรือไม่?
คำตอบ:
มันดูเหมือนยากหรือเป็นไปไม่ได้ด้วยsayคำสั่งในตัว
คุณอาจสามารถเปลี่ยนเส้นทางเสียงจากsayการเป็นAUNetSendที่จะเขียนไปยังดิสก์และเล่นเสียง ดู Audio Hijack ด้านล่าง
คุณสามารถใช้โอเพ่นซอร์สespeakและffplayเครื่องมือต่าง ๆ เพื่อให้บรรลุเป้าหมายนี้ คำสั่งต่อไปนี้บอกว่า "Hello world" และสร้าง.wavไฟล์ของการบันทึก:
espeak --stdout "hello world" | tee -a hello.wav | ffplay -i -คำสั่งรวมเครื่องมือสามอย่าง:
espeak แปลงข้อความเป็นเสียงteeถูกใช้เพื่อโอนสายสำเนาของstdoutไฟล์ffplay เล่นเสียงespeakสามารถอ่านจากไฟล์หรือเว็บเพจโดยใช้fแฟล็ก:
espeak --stdout -f myfile.txt | tee -a myfile.wav | ffplay -i -เครื่องมืออื่นเช่นffmpegหรือ iTunes สามารถใช้เพื่อแปลงwavไฟล์เป็นไฟล์ MP3 หรือ AAC
การติดตั้งและ eSpeak ffplay ใช้HomebrewหรือMacPorts ด้วยการตั้งค่า HomeBrew คำสั่ง install คือ:
brew install espeak ffmpegอีกทางเลือกหนึ่งที่ดีคือการใช้เครื่องมือของบุคคลที่สามเช่นAudio Hijack :
บันทึกเสียงใด ๆ ด้วย Audio Hijack! บันทึกเสียงจากแอปพลิเคชันเช่น iTunes, Skype หรือ Safari หรือจากอุปกรณ์ฮาร์ดแวร์เช่นไมโครโฟนและเครื่องผสม
ภาพหน้าจอนี้แสดงให้เห็นถึง Audio Hijack ที่ถ่ายจาก Skype บันทึกลงดิสก์และเล่นผ่านลำโพง
AUNetSendโมดูลน่าจะเป็นตัวเลือกที่ดีที่สุดของคุณ โชคดี.
                    ในหนึ่งคำสั่งด้วยคำสั่งในตัวsayไม่มี; ในสองคำสั่งในตัว ( sayและafplay) ใช่:
$ say -o /tmp/output-file.aiff Hello
$ afplay /tmp/output-file.aiff
ในตัวอย่างของฉันนี่ทำให้เกิดความล่าช้าเล็กน้อย
$ time sh -c "say Hello" 
real    0m0.778s
user    0m0.008s
sys 0m0.012s
$ time sh -c "say -o /tmp/output-file.aiff Hello && afplay /tmp/output-file.aiff"
real    0m1.048s
user    0m0.050s
sys 0m0.048s