58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
|
|
Run and graph the results of patest_suggested_vs_streaminfo_latency.c
|
|
|
|
Requires matplotlib for plotting: http://matplotlib.sourceforge.net/
|
|
|
|
"""
|
|
import os
|
|
from pylab import *
|
|
import numpy
|
|
|
|
testExeName = "PATest.exe" # rename to whatever the compiled patest_suggested_vs_streaminfo_latency.c binary is
|
|
dataFileName = 'patest_suggested_vs_streaminfo_latency.csv' # code below calls the exe to generate this file
|
|
|
|
|
|
def loadCsvData( dataFileName ):
|
|
params= ""
|
|
inputDevice = ""
|
|
outputDevice = ""
|
|
|
|
startLines = file(dataFileName).readlines(1024)
|
|
for line in startLines:
|
|
if "output device" in line:
|
|
outputDevice = line.strip(" \t\n\r#")
|
|
if "input device" in line:
|
|
inputDevice = line.strip(" \t\n\r#")
|
|
params = startLines[0].strip(" \t\n\r#")
|
|
|
|
data = numpy.loadtxt(dataFileName, delimiter=",", skiprows=4).transpose()
|
|
|
|
class R(object): pass
|
|
result = R()
|
|
result.titleInfo = '%s\n%s\n%s'%(params,inputDevice,outputDevice)
|
|
result.suggestedLatency = data[0]
|
|
result.halfDuplexOutputLatency = data[1]
|
|
result.halfDuplexInputLatency = data[2]
|
|
result.fullDuplexOutputLatency = data[3]
|
|
result.fullDuplexInputLatency = data[4]
|
|
return result;
|
|
|
|
|
|
os.system(testExeName + ' > ' + dataFileName)
|
|
|
|
d = loadCsvData(dataFileName)
|
|
|
|
plot( d.suggestedLatency, d.suggestedLatency )
|
|
plot( d.suggestedLatency, d.halfDuplexOutputLatency )
|
|
plot( d.suggestedLatency, d.halfDuplexInputLatency )
|
|
plot( d.suggestedLatency, d.fullDuplexOutputLatency )
|
|
plot( d.suggestedLatency, d.fullDuplexInputLatency )
|
|
|
|
title('PortAudio suggested (requested) vs. resulting (reported) stream latency\n%s'%d.titleInfo)
|
|
ylabel('PaStreamInfo::{input,output}Latency (s)')
|
|
xlabel('Pa_OpenStream suggestedLatency (s)')
|
|
grid(True)
|
|
|
|
show()
|