Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 25, 2025 12:58:35

Mitkin
Зарегистрирован: 2025-01-25
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись с динамиков

Здравствуйте.

Не смог найти код для записи звука с динамиков.

Тот, который нашёл, выдаёт ошибку. Ниже пример такого кода:

 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
                )
если что, то микрофон у меня отсутствует. Интересует запись именно с динамиков.

Офлайн

#2 Янв. 25, 2025 14:46:37

Alex.Pro.
От: Марик
Зарегистрирован: 2024-11-13
Сообщения: 60
Репутация: +  1  -
Профиль   Отправить e-mail  

Запись с динамиков

Mitkin
микрофон у меня отсутствует. Интересует запись именно с динамиков
Другими словами, звук выводит какой-то сторонний процесс, а вы пытаетесь перехватить этот вывод? Я правильно понимаю?

Офлайн

#3 Янв. 25, 2025 17:28:50

Mitkin
Зарегистрирован: 2025-01-25
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись с динамиков

Alex.Pro.
Да. Я просто запустил мелодию на компе и хочу её записать.

Офлайн

#4 Янв. 25, 2025 18:30:30

Alex.Pro.
От: Марик
Зарегистрирован: 2024-11-13
Сообщения: 60
Репутация: +  1  -
Профиль   Отправить e-mail  

Запись с динамиков

Боюсь, что вы неправильным путём идёте, товарищ. При записи с микрофона (или линейного входа) аналоговый сигнал поступает на вход АЦП, работой которого управляет библиотека pyaudio, а цифровой поток с выхода АЦП захватывается с помощью wave. В вашем случае ситуация обратная. Цифровой поток из файла подаётся на вход ЦАП, работой которого управляет программа-плейер и аналоговый сигнал с выхода ЦАП выводится на динамик. Обратно оцифровывать аналоговый сигнал нет ни необходимости, ни возможности. Вам надо суметь перехватить цифровой поток на входе ЦАП. Но я не знаю как это сделать.

Офлайн

#5 Янв. 25, 2025 18:48:31

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1372
Репутация: +  121  -
Профиль   Отправить e-mail  

Запись с динамиков

Mitkin
Да. Я просто запустил мелодию на компе и хочу её записать.
Так у тебя есть файл с мелодией, куда ты его хочешь записать? В другой файл?какой смысл, файл уже есть. Или слушаешь мелодию из интернета? То тогда нужно записывать из потока в файл, то тут другой подход нужен

Офлайн

#6 Янв. 25, 2025 22:19:01

Mitkin
Зарегистрирован: 2025-01-25
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись с динамиков

xam1816
Это неважно, задачи могут быть разными, я привёл пример.

Из интернета можно скачивать не всё.

Офлайн

#7 Янв. 25, 2025 22:20:17

Mitkin
Зарегистрирован: 2025-01-25
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись с динамиков

xam1816
Мне как раз нужна запись из потока

Офлайн

#8 Янв. 25, 2025 22:27:40

Alex.Pro.
От: Марик
Зарегистрирован: 2024-11-13
Сообщения: 60
Репутация: +  1  -
Профиль   Отправить e-mail  

Запись с динамиков

Mitkin
Мне как раз нужна запись из потока
Т.е. не оцифровать аудиосигнал, как можно было подумать глядя на первое сообщение, а перехватить поток данных. А это, как говорят у нас в Одессе, две большие разницы. Это очень разные задачи. Потому и было сказано:
xam1816
тут другой подход нужен

Офлайн

#9 Янв. 25, 2025 23:33:12

Mitkin
Зарегистрирован: 2025-01-25
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись с динамиков

Alex.Pro.
да мне хоть какое решение для начала, главное, чтобы работало. В названии темы про микрофон ни слово.

Отредактировано Mitkin (Янв. 25, 2025 23:33:31)

Офлайн

#10 Янв. 25, 2025 23:39:02

Mitkin
Зарегистрирован: 2025-01-25
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись с динамиков

Alex.Pro.
Боюсь, что вы неправильным путём идёте, товарищ. При записи с микрофона (или линейного входа) аналоговый сигнал поступает на вход АЦП, работой которого управляет библиотека pyaudio, а цифровой поток с выхода АЦП захватывается с помощью wave. В вашем случае ситуация обратная. Цифровой поток из файла подаётся на вход ЦАП, работой которого управляет программа-плейер и аналоговый сигнал с выхода ЦАП выводится на динамик. Обратно оцифровывать аналоговый сигнал нет ни необходимости, ни возможности. Вам надо суметь перехватить цифровой поток на входе ЦАП. Но я не знаю как это сделать.

библиотека pyaudio выдала устройства
7-ое устройство разве не то, что требуется?
Available devices:

0: Microsoft Sound Mapper - Output
MME

1: Динамики (High Definition Audio
MME

2: Digital Audio (S/PDIF) (High De
MME

3: Digital Audio (S/PDIF) (High De
MME

4: Первичный звуковой драйвер
Windows DirectSound

5: Динамики (High Definition Audio Device)
Windows DirectSound

6: Digital Audio (S/PDIF) (High Definition Audio Device)
Windows DirectSound

7: Digital Audio (S/PDIF) (High Definition Audio Device)
Windows DirectSound

8: Динамики (High Definition Audio Device)
Windows WASAPI

9: Digital Audio (S/PDIF) (High Definition Audio Device)
Windows WASAPI

10: Digital Audio (S/PDIF) (High Definition Audio Device)
Windows WASAPI

11: Speakers (HD Audio Speaker)
Windows WDM-KS

12: SPDIF Out (HD Audio SPDIF out 2)
Windows WDM-KS

13: SPDIF Out (HD Audio SPDIF out)
Windows WDM-KS

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version