У меня есть аудио, являющееся каналом к строке в разъеме для моего аудиоустройства iMic USB. У меня есть LAME & Vorbis OGG Tools, установленная с помощью MacPorts. Как делают меня непосредственно рекордный строка в разъеме с помощью программного обеспечения командной строки? Я знаю в Linux существует программа arecord, но что я использую в Mac OS X 10.6 для выполнения этого? Существует ли путь с ЛАМЕ или OGGENC использование необработанных опций?
Я пытаюсь соединить сценарий Bash для записи, затем передают звуковой файл, и я просто должен знать, как захватить строку в аудио для сохранения в файл, таким образом, я могу использовать другую программу для автоматического вперед это.
Проблема оказывается намного более трудной, чем это должно быть.
Обычно я рекомендовал бы 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 с Ламе.
Вот простой сценарий Python. Скорректируйте ИНДЕКС, чтобы быть соответствующим индексом устройства из списка установок системы:
#!/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()