Я случайно забыл преобразовать некоторые массивы NumPy в байтовые объекты при использовании PyAudio, но, к моему удивлению, он все еще воспроизводил звук, даже если он звучал немного не так. Я написал небольшой тестовый скрипт (см. Ниже) ...
1 ответ
Проблема более тонкая, чем вы описываете. Ваш первый вызов передает массив байтов размером 192000. Второй вызов передает список значений float32 размером 48000. pyaudio
обрабатывает их оба и передает буфер в portaudio
для воспроизведения.
Однако, когда вы открыли pyaudio
, вы сказали, что отправляете данные paFloat32
, которые имеют 4 байта на выборку. Обработчик pyaudio write
берет длину массива, который вы ему предоставили, и делит его на количество каналов, умноженное на размер выборки, чтобы определить, сколько аудиосэмплов имеется. Во втором вызове длина массива равна 48 000, что делится на 4, и тем самым сообщает portaudio
, что «здесь 12 000 отсчетов».
Итак, все понимали формат, но запутались в размере. Если вы измените второй вызов на
stream.write(sina, 48000)
Тогда никто не должен гадать, и он отлично работает.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.