Как исправить ошибку «Не удается обработать этот тип данных» при попытке преобразовать пустой массив в изображение с помощью PIL - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь визуализировать музыку в изображение, используя звуковое устройство для ввода звука, а затем преобразуя его в массив массивов. Массив является 2D, и поэтому я конвертирую его в 3D (в противном случае я получаю только одну тонкую вертикальную линию на изображении). Однако, когда я использую PIL для показа изображения, он говорит: «Не удается обработать этот тип данных». Код упоминается ниже:

import sounddevice as sd

из scipy.io.wavfile import write write

импорт звукового файла в формате sf

импорт numpy

из нулей импорта, новые оси

из импорта PIL Изображение

fs = 44100 # Частота дискретизации

секунд = 3 # Продолжительность записи

myrecording = sd.rec (int (секунды * fs), частота дискретизации = fs, каналы = 2)

sd.wait ()# Дождаться окончания записи

print (myrecording)

print (numpy.shape (myrecording))

write ('output.wav', fs, myrecording) #Сохранить как файл WAV

filename = 'output.wav'

A = myrecording [:,:, newaxis]

print (A)

im= Image.fromarray ((A * 255) .astype (numpy.uint8))

im.show ()

Я ожидаю получить изображение, отображающее цвета, соответствующие вводимому звукув

1 Ответ

0 голосов
/ 03 октября 2019

Это немного зависит от того, что вы хотите сделать.

У вас есть два канала с n-семплами ((nsamples, 2) ndarray);Вы хотите, чтобы каждый канал был столбцом изображения, где цвет меняется в зависимости от значения? Вот почему вы получаете очень узкое изображение, когда вы просто строите график myrecording.

. У вас на самом деле нет данных для создания полного 2D-изображения, если только вы не преобразуете данные временного ряда в нечто более похожееквадрат (так что на самом деле это выглядит как изображение), но тогда вы теряете природу зависимости от времени, к которой, я думаю, вы стремитесь.

...