Предполагается, что у вас есть некоторый код инициализации, такой как
pygame.mixer.pre_init(44100, -16, 2) # 44.1kHz, 16-bit signed, stereo
. Sndarray ожидает, что вы передадите ему 16-битные целочисленные массивы, а не массивы с плавающей запятой.
Ваше "пиковое" значение необходимо сделатьсмысл дан 16-битным целочисленным представлением.Таким образом, если ваш массив с плавающей запятой имеет значения в диапазоне от -1,0 до +1,0, то вам нужно умножить его на 2 ** 15, чтобы правильно масштабировать его.
Для ясности, вы можете захотеть преобразование, например:
numpy.int16(float_array*(2**15))
Мое лучшее предположение о ситуации заключается в том, что у вас был массив с плавающей точкой с низким пиковым значением, таким как 1,0, поэтому при преобразовании его в int16 большинство всего преобразовывалось в 0 или +/- 1, чтоты не сможешь услышать.При прохождении массива с плавающей запятой вы, вероятно, просто получали случайные биты (при интерпретации как 16-битные целые числа), поэтому он звучал как резкий шум (я наткнулся на этот этап на пути к тому, чтобы это заработало).