2016-03-22 2 views
0

У меня есть данные, полученные с помощью простой записи pyAudio:Преобразовать pyaudio.paint16 плавать

"""PyAudio example: Record a few seconds of audio and save to a WAVE file.""" 

import pyaudio 
import wave 

CHUNK = 1024 
FORMAT = pyaudio.paInt16 
CHANNELS = 2 
RATE = 44100 
RECORD_SECONDS = 5 
WAVE_OUTPUT_FILENAME = "output.wav" 

p = pyaudio.PyAudio() 

stream = p.open(format=FORMAT, 
      channels=CHANNELS, 
      rate=RATE, 
      input=True, 
      frames_per_buffer=CHUNK) 

print("* recording") 

frames = [] 

for i in range(0, int(RATE/CHUNK * RECORD_SECONDS)): 
    data = stream.read(CHUNK) 
    frames.append(data) 

print("* done recording") 

stream.stop_stream() 
stream.close() 
p.terminate() 

и мне нужно обработать их в NumPy (и не должны быть преобразованы обратно). Поэтому мне нужно преобразовать из pyaudio.paInt16 (или 24 и так далее ...) в нечто более управляемое, например float или double.

Есть ли простой способ?

ответ

0

Я думаю, что самый простой способ использует модуль sounddevice (Ограничение: я предвзято, так как я его автор):

import sounddevice as sd 

CHANNELS = 2 
RATE = 44100 
RECORD_SECONDS = 5 

myrecording = sd.rec(int(RECORD_SECONDS * RATE), samplerate=RATE, 
        channels=CHANNELS, blocking=True, dtype='float64') 

По умолчанию это использует float32, но вы можете изменить dtype как показано выше.

В качестве альтернативы, если вы действительно хотите преобразовать 16-битные значения в значения с плавающей запятой, посмотрите на my tutorial about this topic.

Смежные вопросы