Ничего не понял) Какие претензии могут быть к нему?
У меня к буферам претензий нет)
Претензии к топорной дискретности WASAPI Вин7)
Вид для печати
Я о том что 480 выборок в буфере и дискретность целая (хотя когда смотрел тесты когда hmdi основное звуковое устройство, у меня было 75% delta=0, остальное 480 и 224, иногда что то левое с большими значениями проскакивало)
На Win2003 вообще не работает тест, говорит "Can't create Back-Buffer Surface!"
вот код прототипа-симулятора. 2я колонка показывает реальное число сэмплов в буфере, оно должно стабилизироваться.
Код:# -*- coding: utf-8 -*-
import random
QUANT=882 # рассчетное число сэмплов в прерывание
RES=480 # разрешение указателей звукового буфера
bufpos=0 # позиция буфера записи
playpos=0 # позиция буфера чтения
# put data to buffer
def render_frame(n):
global bufpos
bufpos+=int(n+0.5)
# play data from buffer
def play_frame(n):
global bufpos,playpos
n+=random.randint(-5,3) # add some noise to samples number
playpos+=n
if bufpos<playpos:
print "Underrun!"
# get rounded position
def get_pos():
return playpos/RES*RES
# limit value from l to h
def lim(v,l,h):
return min(h,max(l,v))
render_frame(RES) # пребуфферинг
fff=[];fff2=[] # окна фильтров
delta=0.0 # добавка к рассчетному числу сэмплов
I=0.0 # сост. интегратора
avg=0 # среднее зн. числа сэмплов
while 1:
# "заполняем" буфер, проигрыванием, вычисляем изменение указателя
t1=get_pos()
render_frame(QUANT+delta)
play_frame(QUANT)
t2=get_pos()
print avg,bufpos-playpos,delta,I
# filter 1
fff.append(t2-t1)
fff=fff[-200:]
avg=float(sum(fff))/len(fff)
# filter 2
fff2.append(avg)
fff2=fff2[-200:]
avg=sum(fff2)/len(fff2) # вычисленное реальное число сэмплов за фрейм
# ПИ-регулятор
if len(fff)>=200: # работает, если есть статистика по 200 фреймам
smps=int(QUANT+delta+0.5) # кол-во положенных сэмплов (то, что ушло в render_frame() в этот раз)
err=lim(avg-smps,-5,5) # разница между вычисленным средним и отправленным
I+=err*0.01; I=lim(I,-5,5) # ограниченный интегратор
P=0.5*err # проп. звено
delta=P+I # сумма
Питон это, без знания синтаксиса может жестью показаться
Код:Да
разве
ж
это
жесть?