Форум сайта python.su
Здравствуйте.
Не смог найти код для записи звука с динамиков.
Тот, который нашёл, выдаёт ошибку. Ниже пример такого кода:
import pyaudio import wave chunk = 1024 # Record in chunks of 1024 samples sample_format = pyaudio.paInt16 # 16 bits per sample channels = 2 fs = 44100 # Record at 44100 samples per second seconds = 3 filename = "output.wav" p = pyaudio.PyAudio() # Create an interface to PortAudio #Select Device print ( "Available devices:\n") for i in range(0, p.get_device_count()): info = p.get_device_info_by_index(i) print ( str(info["index"]) + ": \t %s \n \t %s \n" % (info["name"], p.get_host_api_info_by_index(info["hostApi"])["name"])) pass #ToDo change to your device ID device_id = 7 device_info = p.get_device_info_by_index(device_id) channels = device_info["maxInputChannels"] if (device_info["maxOutputChannels"] < device_info["maxInputChannels"]) else device_info["maxOutputChannels"] # https://people.csail.mit.edu/hubert/pyaudio/docs/#pyaudio.Stream.__init__ stream = p.open(format=sample_format, channels=channels, rate=int(device_info["defaultSampleRate"]), input=True, frames_per_buffer=chunk, input_device_index=device_info["index"], as_loopback=True ) frames = [] # Initialize array to store frames print('\nRecording', device_id, '...\n') # Store data in chunks for 3 seconds for i in range(0, int(fs / chunk * seconds)): data = stream.read(chunk) frames.append(data) # Stop and close the stream stream.stop_stream() stream.close() # Terminate the PortAudio interface p.terminate() print('Finished recording') # Save the recorded data as a WAV file wf = wave.open(filename, 'wb') wf.setnchannels(channels) wf.setsampwidth(p.get_sample_size(sample_format)) wf.setframerate(fs) wf.writeframes(b''.join(frames)) wf.close()
stream = p.open(format=sample_format, channels=channels, rate=int(device_info["defaultSampleRate"]), input=True, frames_per_buffer=chunk, input_device_index=device_info["index"], as_loopback=True )
Офлайн
MitkinДругими словами, звук выводит какой-то сторонний процесс, а вы пытаетесь перехватить этот вывод? Я правильно понимаю?
микрофон у меня отсутствует. Интересует запись именно с динамиков
Офлайн
Alex.Pro.Да. Я просто запустил мелодию на компе и хочу её записать.
Офлайн
Боюсь, что вы неправильным путём идёте, товарищ. При записи с микрофона (или линейного входа) аналоговый сигнал поступает на вход АЦП, работой которого управляет библиотека pyaudio, а цифровой поток с выхода АЦП захватывается с помощью wave. В вашем случае ситуация обратная. Цифровой поток из файла подаётся на вход ЦАП, работой которого управляет программа-плейер и аналоговый сигнал с выхода ЦАП выводится на динамик. Обратно оцифровывать аналоговый сигнал нет ни необходимости, ни возможности. Вам надо суметь перехватить цифровой поток на входе ЦАП. Но я не знаю как это сделать.
Офлайн
MitkinТак у тебя есть файл с мелодией, куда ты его хочешь записать? В другой файл?какой смысл, файл уже есть. Или слушаешь мелодию из интернета? То тогда нужно записывать из потока в файл, то тут другой подход нужен
Да. Я просто запустил мелодию на компе и хочу её записать.
Офлайн
xam1816Это неважно, задачи могут быть разными, я привёл пример.
Офлайн
xam1816Мне как раз нужна запись из потока
Офлайн
MitkinТ.е. не оцифровать аудиосигнал, как можно было подумать глядя на первое сообщение, а перехватить поток данных. А это, как говорят у нас в Одессе, две большие разницы. Это очень разные задачи. Потому и было сказано:
Мне как раз нужна запись из потока
xam1816
тут другой подход нужен
Офлайн
Alex.Pro.да мне хоть какое решение для начала, главное, чтобы работало. В названии темы про микрофон ни слово.
Отредактировано Mitkin (Янв. 25, 2025 23:33:31)
Офлайн
Alex.Pro.
Боюсь, что вы неправильным путём идёте, товарищ. При записи с микрофона (или линейного входа) аналоговый сигнал поступает на вход АЦП, работой которого управляет библиотека pyaudio, а цифровой поток с выхода АЦП захватывается с помощью wave. В вашем случае ситуация обратная. Цифровой поток из файла подаётся на вход ЦАП, работой которого управляет программа-плейер и аналоговый сигнал с выхода ЦАП выводится на динамик. Обратно оцифровывать аналоговый сигнал нет ни необходимости, ни возможности. Вам надо суметь перехватить цифровой поток на входе ЦАП. Но я не знаю как это сделать.
Офлайн