Задать вопрос
@YaroslavFurman1054

Что я сделал не так?

Я пытаюсь записать звук с микрофонного модуля MAX4466 подключённого к RP2040-zero в аудиофайл.

Вот код, который я использовал.

import pyaudio
from array import array
import wave
import struct
import math
import array

GPIO_PIN = 27

CHUNK = 1024  # Размер буфера в байтах
FORMAT = pyaudio.paInt16  # Формат аудиоданных
CHANNELS = 1  # Количество каналов
RATE = 44100  # Частота дискретизации
RECORD_SECONDS = 5  # Время записи в секундах
WAVE_FILENAME = 'output.wav'  # Имя аудиофайла

def initialize_recording(RATE, CHUNK, GPIO_PIN):
    p = pyaudio.PyAudio()  # Инициализация аудиоустройства

    # Открытие аудиопотока для записи с указанными параметрами
    stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input_device_index=GPIO_PIN, frames_per_buffer=CHUNK) 
    return stream

def write_audio_to_file(stream, filename):
    array_of_audio_data = read_audio_data(stream)  # Чтение аудиоданных из аудиопотока в массив
    output_file = wave.open(filename, 'wb')
    output_file.setnchannels(1)
    output_file.setsampwidth(p.get_sample_size(FORMAT))
    output_file.setframerate(RATE)
    output_file.writeframes(b''.join(array_of_audio_data))
    output_file.close()

def read_audio_data(stream):
    audio_data = array.array('h')
    for _ in range(int(math.ceil(RATE / float(RECORD_SECONDS)) * RECORD_SECONDS / CHUNK)):
        data = stream.read(CHUNK)
        audio_data.extend(array.array('h', data))
    return audio_data

def main():
    GPIO_PIN = 27
    CHUNK = 1024  # Размер буфера в байтах
    FORMAT = pyaudio.paInt16  # Формат аудиоданных
    CHANNELS = 1  # Количество каналов
    RATE = 44100  # Частота дискретизации
    RECORD_SECONDS = 5  # Время записи в секундах
    WAVE_FILENAME = 'output.wav'  # Имя аудиофайла
    
    write_audio_to_file(initialize_recording(RATE, CHUNK, GPIO_PIN), WAVE_FILENAME)

def __init__():
    main()
    
class playRecord():
    __init__()

Но мне выводит вот такую ошибку:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pyaudio/__init__.py", line 107, in <module>
  File "locale.py", line 17, in <module>
  File "_collections_abc.py", line 941
SyntaxError: invalid syntax


Я понимаю что там что то не так написано. Но ведь навряд ли делают специально библиотеки с ошибками.
  • Вопрос задан
  • 169 просмотров
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@kalapanga
Подозреваю, что дело в этом: input_device_index=GPIO_PIN
input_device_index - это совсем не GPIO_PIN, это номер аудиоустройства в системе. И почему Вы решили, что можно просто подключить микрофон к GPIO и он будет работать? На сколько мне известно, к малине подключают либо usb-микрофон, либо микрофон по I2S шине.
Ответ написан
Комментировать
NeiroNx
@NeiroNx
Программист
в 2 и 3 версиях питона разный синтаксис...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
18 дек. 2024, в 12:37
10000 руб./за проект
18 дек. 2024, в 12:22
5000 руб./за проект
18 дек. 2024, в 11:57
500 руб./в час