Grave linha no iMic System no Mac OS X 10.6 usando a linha de comando

1

Tenho áudio sendo alimentado na entrada de linha do meu dispositivo iMic USB Audio. Eu tenho o LAME & Vorbis OGG Tools instalado usando MacPorts. Como faço para gravar diretamente a linha na tomada usando o software de linha de comando? Eu sei que no Linux existe o programa arecord , mas o que eu uso no Mac OS X 10.6 para conseguir isso? Existe uma maneira com LAME ou OGGENC usando opções brutas?

Estou tentando montar um script BASH para gravar, em seguida, encaminhar o arquivo de áudio e eu só preciso saber como pegar a linha em áudio para salvar em um arquivo para que eu possa usar outro programa para avançar automaticamente. / p>     
por Keith 26.04.2011 / 07:37

1 resposta

1

O problema acaba sendo muito mais difícil do que deveria.

Normalmente, eu recomendaria SOX, mas me deparei com um problema para gravar áudio: link

É muito fácil criar um script python simples, mas devido a um bug no módulo wave ele não pode ser usado em um pipe: link

Ecasound é outro programa comum que usei no Linux / FreeBSD, mas não suporta coreaudio no OSX e não pode ser usado para gravação.

No final do dia, o melhor que encontrei é um processo de dois estágios, onde eu gravo o áudio com um script e, em seguida, converto para mp3 com o coxo.

Aqui está um script python simples. Ajuste o índice para ser o índice de dispositivo apropriado da lista de preferências do sistema:

    #!/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()
    
por 01.05.2011 / 05:43