บันทึกรายการจากระบบ iMic บน Mac OS X 10.6 โดยใช้บรรทัดคำสั่ง


1

ฉันมีฟีดกำลังส่งไปยังแจ็คไลน์อินสำหรับอุปกรณ์เสียง iMic USB ของฉัน ฉันมีเครื่องมือ OGG LAME & Vorbis ติดตั้งโดยใช้ MacPorts ฉันจะบันทึกบรรทัดเข้าแจ็คโดยตรงโดยใช้ซอฟต์แวร์บรรทัดคำสั่งได้อย่างไร ฉันรู้ว่าใน Linux มีโปรแกรมarecordแต่สิ่งที่ฉันจะใช้ใน Mac OS X 10.6 เพื่อให้บรรลุนี้หรือไม่? มีวิธีกับ LAME หรือ OGGENC โดยใช้ตัวเลือก raw หรือไม่

ฉันกำลังพยายามรวบรวมสคริปต์ BASH เพื่อบันทึกจากนั้นส่งต่อไฟล์เสียงและฉันต้องรู้วิธีดึงสายเสียงเพื่อบันทึกเป็นไฟล์ดังนั้นฉันจึงสามารถใช้โปรแกรมอื่นเพื่อส่งต่อโดยอัตโนมัติ

คำตอบ:


1

ปัญหากลายเป็นว่าหนักกว่าที่ควรจะเป็น

โดยปกติแล้วฉันจะแนะนำ 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()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.