1

Я передаю звук на линейный вход для моего устройства iMic USB Audio. У меня установлены LAME & Vorbis OGG Tools с использованием MacPorts. Как напрямую записать линию в разъем с помощью программного обеспечения для командной строки? Я знаю, что в Linux есть программа arecord, но что для этого нужно использовать в Mac OS X 10.6? Есть ли способ с LAME или OGGENC использовать необработанные параметры?

Я пытаюсь собрать сценарий BASH для записи, а затем переслать аудио файл, и мне просто нужно знать, как захватить строку в аудио, чтобы сохранить в файл, чтобы я мог использовать другую программу для автоматической пересылки.

1 ответ1

1

Проблема оказывается намного сложнее, чем должна быть.

Обычно я бы порекомендовал SOX, но я столкнулся с проблемой, заставляя его записывать аудио: https://stackoverflow.com/questions/5845286/sox-recording-on-osx-not-working

Довольно просто создать простой скрипт на Python, но из-за ошибки в модуле wave его нельзя использовать в конвейере: http://www.mail-archive.com/python-bugs-list@python .org/msg43196.html

Ecasound - еще одна распространенная программа, которую я использовал в Linux/FreeBSD, но она не поддерживает coreaudio в OSX и не может использоваться для записи.

В конце дня лучшее, что я нашел, - это двухэтапный процесс, где я записываю аудио одним скриптом, а затем конвертирую в 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()

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .