2014-01-04 3 views
2

Я хочу сделать простую обработку в реальном времени для аудио каждые 4096 выборок. Но этот код вызывает функцию обратного вызова каждые 1024 выборки. Я просто хочу, чтобы изменить frame_count в 4096.pyaudio изменить количество образцов вызова функции обратного вызова

import pyaudio 
import time 

WIDTH = 2 
CHANNELS = 1 
RATE = 44100 

p = pyaudio.PyAudio() 

def callback(in_data, frame_count, time_info, status): 
    out=do_something(in_data) 
    print(frame_count)#1024 
    return (out, pyaudio.paContinue) 

stream = p.open(format=p.get_format_from_width(WIDTH), 
       channels=CHANNELS, 
       rate=RATE, 
       input=True, 
       output=True, 
       stream_callback=callback) 

stream.start_stream() 

while stream.is_active(): 
    time.sleep(0.1) 

stream.stop_stream() 
stream.close() 

p.terminate() 
+0

Вы пытались изменить скорость до более высокого значения (например, на 4) – acutesoftware

+0

@acutesoftware Да, я меняю ее выше и ниже, но просто меняет время, необходимое для вызова функции обратного вызова, которая не изменяется количество образцов, переданных функции обратного вызова. – Charley

ответ

2

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

stream = p.open(format=p.get_format_from_width(WIDTH), 
       channels=CHANNELS, 
       rate=RATE, 
       input=True, 
       output=True, 
       frames_per_buffer=4096, 
       stream_callback=callback) 

, что вы должны получите необходимое количество выборок на блок. Значение frame_per_buffer по умолчанию равно 1024, поэтому, вероятно, вы получаете это значение в своем тесте.

Удачи вам!

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