Enregistrez une ligne depuis iMic System sous Mac OS X 10.6 à l'aide de la ligne de commande

1

Le son est alimenté par la prise d'entrée de ligne pour mon périphérique audio USB iMic. J'ai LAME & amp; Vorbis OGG Tools installé à l'aide de MacPorts. Comment enregistrer directement la ligne en prise à l'aide du logiciel de ligne de commande? Je sais que sous Linux, il y a le programme un enregistrement , mais que dois-je utiliser dans Mac OS X 10.6 pour y parvenir? Existe-t-il un moyen d'utiliser LAME ou OGGENC en utilisant des options brutes?

J'essaie de mettre en place un script BASH pour enregistrer puis transférer le fichier audio et je dois juste savoir comment saisir la ligne audio pour l'enregistrer dans un fichier afin que je puisse utiliser un autre programme pour le transférer automatiquement.

Keith
la source

Réponses:

1

Le problème s'avère être beaucoup plus difficile qu'il ne devrait l'être.

Normalement, je recommanderais SOX, mais je me suis heurté à un problème d'obtention d'enregistrement audio: https://stackoverflow.com/questions/5845286/sox-recording-on-osx-not-working

Il est assez facile de créer un script python simple, mais à cause d'un bogue dans le module wave, il ne peut pas être utilisé dans un tube: http://www.mail-archive.com/[email protected]/msg43196.html

Ecasound est un autre programme que j’ai utilisé sous Linux / FreeBSD, mais il ne prend pas en charge coreaudio sous OSX et ne peut pas être utilisé pour l’enregistrement.

À la fin de la journée, le meilleur que j'ai trouvé est un processus en 2 étapes dans lequel j'enregistre l'audio avec un script, puis convertis en mp3 avec lame.

Voici un script python simple. Réglez INDEX sur l’index de périphérique approprié à partir de la liste de préférences système:

    #!/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()
Nite
la source