使用命令行在 Mac OS X 10.6 上的 iMic 系统上录制线路

使用命令行在 Mac OS X 10.6 上的 iMic 系统上录制线路

我将音频输入到 iMic USB 音频设备的线路输入插孔。我使用 MacPorts 安装了 LAME 和 Vorbis OGG 工具。如何使用命令行软件直接录制线路输入插孔?我知道在 Linux 中有程序一个记录,但是在 Mac OS X 10.6 中我该使用什么来实现这一点?有没有办法使用 LAME 或 OGGENC 的原始选项?

我正在尝试编写一个 BASH 脚本来录制然后转发音频文件,我只需要知道如何抓取音频中的行来保存到文件中,这样我就可以使用另一个程序自动转发它。

答案1

事实证明,这个问题比它想象的要难得多。

通常我会推荐 SOX,但是在录制音频时我遇到了一个问题:https://stackoverflow.com/questions/5845286/sox-recording-on-osx-not-working

编写一个简单的 Python 脚本非常容易,但是由于 wave 模块中的一个错误,它不能在管道中使用:http://www.mail-archive.com/[电子邮件保护]/msg43196.html

Ecasound 是我在 Linux/FreeBSD 上使用过的另一个常用程序,但它不支持 OSX 上的 coreaudio,不能用于录音。

最终,我发现最好的方法是采用两阶段过程,我用一个脚本录制音频,然后用 lame 转换为 mp3。

这是一个简单的 Python 脚本。从系统偏好设置列表中将 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()

相关内容