Raspberry Pi Pico W и INMP441 не работает микрофон

У вас какая-то путаница.
Msb first и биг эндиан это разные вещи. Первое определяет порядок бит, а второе байт в слове.
А что до значащих данных, тут вообще ерунда. Биг эндиан означает, что старшие байты СЛЕВА. А вот какие из них значащие - зависит от формата.

Лучше так:

Изначально ваши данные 32 битные
0xAABBCCDD

После сдвига вправо

0x00AABBCC

и после переформатирования в int16

0xBBCC

Вы уверены, что потеря старшего байта 0xAA - это то что вы хотите?

1 лайк

Большое спасибо! Изучу информацию

а на пк можете поиграться с этим значением ? увеличить или уменьшить его, ну или в коде…
это параметр отвечает за скорость воспроизведения, попробуйте увеличить и уменьшить на 2

вариант номер 2
Неправильная обработка разрядности данных (24 бита vs 32 бита). INMP441 — 24-битный микрофон, но его данные передаются внутри 32-битных

void loop1(){
while (true){
i2s.read(samples32, sizeof(samples32)); // Читаем 32-битные данные
if (canWrite == true) {
for (int i = 0; i < SAMPLES; i++) {
// ИЗМЕНЕНИЕ ЗДЕСЬ: Берем старшие 16 бит из 24-битного сэмпла
// Сдвиг на 16 бит сохраняет полезный сигнал и убирает шум из младших битов
samples16[i] = (int16_t)(samples32[i] >> 16);
} canWrite = false; }
}
}

у меня было 16кГц, поменял на 44.1 и ничего не изменилось
Проблема была в другом, уже разобрался, спасибо!

Спасибо за уделённое время! Это заработало!

Напиши в чём и какое было решение.