ปัญหากลายเป็นว่าหนักกว่าที่ควรจะเป็น
โดยปกติแล้วฉันจะแนะนำ SOX แต่ฉันพบปัญหาในการบันทึกเสียง: https://stackoverflow.com/questions/5845286/sox-recording-on-osx-not-working
มันค่อนข้างง่ายที่จะเกิดขึ้นกับสคริปต์ python แบบง่าย ๆ แต่เนื่องจากมีข้อผิดพลาดในโมดูลคลื่นจึงไม่สามารถใช้ในไพพ์ได้: http://www.mail-archive.com/python-bugs-list@python .org / msg43196.html
Ecasound เป็นโปรแกรมทั่วไปอีกตัวที่ฉันใช้บน Linux / FreeBSD แต่ไม่รองรับ coreaudio บน OSX และไม่สามารถใช้สำหรับการบันทึก
ในตอนท้ายของวันที่ดีที่สุดที่ฉันได้พบคือกระบวนการ 2 ขั้นตอนที่ฉันบันทึกเสียงด้วยสคริปต์เดียวแล้วแปลงเป็น mp3 ด้วยง่อย
นี่คือสคริปต์หลามแบบง่าย ๆ ปรับ INDEX ให้เป็นดัชนีอุปกรณ์ที่เหมาะสมจากรายการการตั้งค่าระบบ:
#!/usr/bin/env python2.5
import sys
import pyaudio
import wave
FILENAME = 'recording.wav'
INDEX = 0
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 48000
INPUT_BLOCK_TIME = 0.05
INPUT_FRAMES_PER_BLOCK = int(RATE*INPUT_BLOCK_TIME)
CHUNK = 1024
p = pyaudio.PyAudio()
stream = p.open(
format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
frames_per_buffer = CHUNK,
input_device_index = INDEX)
wf = wave.open(FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
sys.stdout.flush()
while True:
try:
wf.writeframes(stream.read(CHUNK))
sys.stderr.write("#")
# sys.stdout.flush()
except IOError:
sys.stderr.write('X')
f.close()
stream.close()
p.terminate()