Свежие обсуждения
Измерения

LC-метр из звуковой карты

1 62 68

Михалыч А: Может там какие-то тонкости есть?

Есть, там вместо WAVEFORMATEX нужно WAVEFORMATEXTENSIBLE структуру использовать. Я сам не пробовал, только читал.

 

С использованием WAVEFORMATEXTENSIBLE "процесс пошел", но не полностью адекватно. На слух всё свистит без искажений, но записывается какая-то несинусоида.
Я вот что думаю - нет в С++ трёхбайтных типов данных, всё кратно двойке.
Не может быть такого, что для 24-х бит там где-то внутри драйвера карты используются четырёхбайтные данные, а в отдельном поле структуры wValidBitsPerSample указывается, что звук 24-х битный, четвертый байт не задествован? В звуковом редакторе "кулэдип про" почему-то доступны биты АЦП 8, 16, 32, а 24 нет.
И почему кругом примеры только с использованием директрикса?
И люди жалуются, что не могут на слух различить 16-ти битный звук от 24-х битного. Я не жалюсь, просто тоже на слух никакой разницы.
Как бы эту разницу увидеть с помощью какой-нибудь программы?

 

Михалыч А: Я вот что думаю - нет в С++ трёхбайтных типов данных, всё кратно двойке.

Нету. Я где-то читал, что эти 3 байта нужно скопировать в 4-х байтную переменную и её уже можно использовать. Не помню, нужно ли при этом использовать побайтный сдвиг налево или направо... Нетривиально всё это. И да, по слухам, вроде в wBitPerSample нужно писать 32, а в wValidBitsPerSample - реальное 24. Нужно по интернетам рыться, искать...

 

Попробовал ещё одну программу - звуковой редактор, вэйв лаб от стейнберга. Старенький правда, но все возможные частоты и биты поддерживает. И опять не срослось. Частоты дискредитации все работают, а биты только 16 и 8.
И такая мысль, если у фирмачей 24 бита не работает, чё оно у меня будет работать? Попробую найти поновее редактор для звука, чтобы 24 бита заработало, если у крутых дядей не играет, наверное надо притормозить.

 

Оказывается, просто надо самому следить за знаком записанного 24-х битного сигнала. Если восьмой бит в третьем старшем байте выборки равен единице, нужно самому переделывать три байта в отрицательное целое число. А с 16-тью битами всё автоматом происходит.
Значит на всех частотах дискредитации у меня и 24 бита работают, синусоида правильно рисуется при записи, напряжение тоже правильно измеряется.
Но. Всё это 24-х битное удовольствие работает через раз. Каждая вторая команда на проигрывание/запись дает нулевой сигнал и в наушниках ничего не слышно. А 16-ть бит свистят раз за разом, но там WAVEFORMATEX используется.
Непонятно, почему крутые дяди программисты в навороченных звуковых программах не дают играть и записывать 24 бита?

 

А если сдвинуть влево на 8 бит, чтобы знаковый бит сам встал, где ему положено, а потом разделить на 256, чтобы значение правильное было?
Странно, что через раз. Обычно такое бывает, когда что-нибудь неправильно делаешь...

 

Я делаю каждому из трех байтов NOT операцию (~) и всё, минус нужно ещё потом не забыть добавить.

 

"Одна маленькая, но гордая птичка ..."
Не обнулял я одну маленькую переменную перед каждым проигрыванием и через раз сигнал получался на 24-х битах. После устранения бага 24 бита свистят каждый раз.
Получается у одной измерительной частоты в моём LC метре восемь вариантов звучания ( четыре частоты дискредитации * две разрядности АЦП) и соответственно для каждого откалиброванного сопротивления тоже может быть восемь вариантов на одной только частоте.
Теперь надо, чтобы база данных LC метра не путалась в этом разнообразии.

 

У меня есть функция специальная, которая гармоники БПФ пересчитывает в реальные частоты используя данные конфигурации карты. А перед этим данные нормируются в зависимости от выбранной разрядности (когда-то я 8 и 16 бит использовал -был выбор...).

 

Так, 24 бита на 192КГерцах есть, а образцовых пассивных радиодеталей нет.
Вопрос - какие у кого получаюся реактивные составляющие SMD резисторов номиналом от 500 до 1000 ом? Может кто-нибудь на крутых приборах для интереса замерял.