summaryrefslogtreecommitdiff
path: root/portaudio/test/patest_suggested_vs_streaminfo_latency.py
diff options
context:
space:
mode:
Diffstat (limited to 'portaudio/test/patest_suggested_vs_streaminfo_latency.py')
-rw-r--r--portaudio/test/patest_suggested_vs_streaminfo_latency.py150
1 files changed, 0 insertions, 150 deletions
diff --git a/portaudio/test/patest_suggested_vs_streaminfo_latency.py b/portaudio/test/patest_suggested_vs_streaminfo_latency.py
deleted file mode 100644
index 8026787..0000000
--- a/portaudio/test/patest_suggested_vs_streaminfo_latency.py
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/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
-from matplotlib.backends.backend_pdf import PdfPages
-
-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
-
-inputDeviceIndex = -1 # -1 means default
-outputDeviceIndex = -1 # -1 means default
-sampleRate = 44100
-pdfFilenameSuffix = "_wmme"
-
-pdfFile = PdfPages("patest_suggested_vs_streaminfo_latency_" + str(sampleRate) + pdfFilenameSuffix +".pdf") #output this pdf 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.params = params
- for s in params.split(','):
- if "sample rate" in s:
- result.sampleRate = s
-
- result.inputDevice = inputDevice
- result.outputDevice = outputDevice
- result.suggestedLatency = data[0]
- result.halfDuplexOutputLatency = data[1]
- result.halfDuplexInputLatency = data[2]
- result.fullDuplexOutputLatency = data[3]
- result.fullDuplexInputLatency = data[4]
- return result;
-
-
-def setFigureTitleAndAxisLabels( framesPerBufferString ):
- title("PortAudio suggested (requested) vs. resulting (reported) stream latency\n" + framesPerBufferString)
- ylabel("PaStreamInfo::{input,output}Latency (s)")
- xlabel("Pa_OpenStream suggestedLatency (s)")
- grid(True)
- legend(loc="upper left")
-
-def setDisplayRangeSeconds( maxSeconds ):
- xlim(0, maxSeconds)
- ylim(0, maxSeconds)
-
-
-# run the test with different frames per buffer values:
-
-compositeTestFramesPerBufferValues = [0]
-# powers of two
-for i in range (1,11):
- compositeTestFramesPerBufferValues.append( pow(2,i) )
-
-# multiples of 50
-for i in range (1,20):
- compositeTestFramesPerBufferValues.append( i * 50 )
-
-# 10ms buffer sizes
-compositeTestFramesPerBufferValues.append( 441 )
-compositeTestFramesPerBufferValues.append( 882 )
-
-# large primes
-#compositeTestFramesPerBufferValues.append( 39209 )
-#compositeTestFramesPerBufferValues.append( 37537 )
-#compositeTestFramesPerBufferValues.append( 26437 )
-
-individualPlotFramesPerBufferValues = [0,64,128,256,512] #output separate plots for these
-
-isFirst = True
-
-for framesPerBuffer in compositeTestFramesPerBufferValues:
- commandString = testExeName + " " + str(inputDeviceIndex) + " " + str(outputDeviceIndex) + " " + str(sampleRate) + " " + str(framesPerBuffer) + ' > ' + dataFileName
- print commandString
- os.system(commandString)
-
- d = loadCsvData(dataFileName)
-
- if isFirst:
- figure(1) # title sheet
- gcf().text(0.1, 0.0,
- "patest_suggested_vs_streaminfo_latency\n%s\n%s\n%s\n"%(d.inputDevice,d.outputDevice,d.sampleRate))
- pdfFile.savefig()
-
-
- figure(2) # composite plot, includes all compositeTestFramesPerBufferValues
-
- if isFirst:
- plot( d.suggestedLatency, d.suggestedLatency, label="Suggested latency" )
-
- plot( d.suggestedLatency, d.halfDuplexOutputLatency )
- plot( d.suggestedLatency, d.halfDuplexInputLatency )
- plot( d.suggestedLatency, d.fullDuplexOutputLatency )
- plot( d.suggestedLatency, d.fullDuplexInputLatency )
-
- if framesPerBuffer in individualPlotFramesPerBufferValues: # individual plots
- figure( 3 + individualPlotFramesPerBufferValues.index(framesPerBuffer) )
-
- plot( d.suggestedLatency, d.suggestedLatency, label="Suggested latency" )
- plot( d.suggestedLatency, d.halfDuplexOutputLatency, label="Half-duplex output latency" )
- plot( d.suggestedLatency, d.halfDuplexInputLatency, label="Half-duplex input latency" )
- plot( d.suggestedLatency, d.fullDuplexOutputLatency, label="Full-duplex output latency" )
- plot( d.suggestedLatency, d.fullDuplexInputLatency, label="Full-duplex input latency" )
-
- if framesPerBuffer == 0:
- framesPerBufferText = "paFramesPerBufferUnspecified"
- else:
- framesPerBufferText = str(framesPerBuffer)
- setFigureTitleAndAxisLabels( "user frames per buffer: "+str(framesPerBufferText) )
- setDisplayRangeSeconds(2.2)
- pdfFile.savefig()
- setDisplayRangeSeconds(0.1)
- setFigureTitleAndAxisLabels( "user frames per buffer: "+str(framesPerBufferText)+" (detail)" )
- pdfFile.savefig()
-
- isFirst = False
-
-figure(2)
-setFigureTitleAndAxisLabels( "composite of frames per buffer values:\n"+str(compositeTestFramesPerBufferValues) )
-setDisplayRangeSeconds(2.2)
-pdfFile.savefig()
-setDisplayRangeSeconds(0.1)
-setFigureTitleAndAxisLabels( "composite of frames per buffer values:\n"+str(compositeTestFramesPerBufferValues)+" (detail)" )
-pdfFile.savefig()
-
-pdfFile.close()
-
-#uncomment this to display interactively, otherwise we just output a pdf
-#show()