Нежелательная фильтрация нижних частот аудиовхода в CoreAudio на OS X при некоторых частотах дискретизации - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь захватить сигнал на MacBookPro (под управлением MacOS Catalina 10.15.3) с помощью внешней звуковой карты Sound Blaster Omni Surround 5.1 (SB1560).

Звуковая карта способна к 48 кСа / с и выборка 96 кСа / с, а также несколько лет go Я использовал эту звуковую карту для успешной выборки сигналов> 22,1 кГц, используя частоту дискретизации 96 кСа / с. Таким образом, звуковая карта, похоже, не имеет внутренних фильтров нижних частот, которые препятствуют дискретизации сигналов> 22,1 кГц.

Если я использую PortAudio с привязкой Python:

import sounddevice as sd

fs = 48000
x = sd.rec(fs, samplerate=fs, blocking=True, channels=1)

чтобы получить сигнал x, все хорошо. Я могу захватывать сигналы до 24 кГц без каких-либо проблем.

Однако, если я установлю fs = 96000, записанные сигналы показывают сильный фильтр нижних частот около 22 кГц, и я не могу захватить любой сигнал за пределами 22 кГц.

То же самое применяется, если я использую Audacity с CoreAudio напрямую (без PortAudio между ними) со скоростью 48 кСа / с и 96 кСа / с. На 48 кСа / с, нет низких частот и может дискретизировать сигналы до 24 кГц. При 96 кСа / с низкочастотный сигнал виден и не способен захватывать сигналы выше 22 кГц.

Из вышесказанного я заключаю, что фильтрация нижних частот не происходит в привязках PortAudio или sounddevice Python , но на уровне ОС. Поскольку я использовал SB1560 раньше (на более старой версии OS X) для захвата высокочастотных сигналов, я уверен, что фильтр отсутствует в звуковой карте. Так что он должен быть где-то в CoreAudio и представлен в последней версии OS X.

Более того, я могу установить любую частоту дискретизации, и CoreAudio, похоже, с радостью предоставляет мне данные с такой частотой дискретизации, хотя SB1560 не поддерживать эту скорость. Таким образом, преобразование скорости должно происходить в CoreAudio, и, возможно, именно здесь применяется фильтр.

Я ожидаю, что, поскольку мой SB1560 поддерживает выборку 96 кСа / с, CoreAudio должен позволять ему производить выборку с такой скоростью, а не делать скорость преобразование, но это, похоже, не так. Как отключить преобразование скорости и / или фильтр нижних частот и заставить CoreAudio выдавать необработанные выборочные данные 96 кСа / с из SB1560?

...