Python - Oscilloscope2019 Community Moderator ElectionCalling an external command in PythonWhat are metaclasses in Python?Finding the index of an item given a list containing it in PythonDifference between append vs. extend list methods in PythonHow can I safely create a nested directory in Python?Does Python have a ternary conditional operator?How to get the current time in PythonHow can I make a time delay in Python?Does Python have a string 'contains' substring method?Why is “1000000000000000 in range(1000000000000001)” so fast in Python 3?

Why is there so much iron?

What is the reasoning behind standardization (dividing by standard deviation)?

Imaginary part of expression too difficult to calculate

Asserting that Atheism and Theism are both faith based positions

Unable to get newly inserted Product's Id using After Plugin for Catalog Product save controller method

Recursively updating the MLE as new observations stream in

Is there any common country to visit for uk and schengen visa?

How do researchers send unsolicited emails asking for feedback on their works?

How can an organ that provides biological immortality be unable to regenerate?

Hackerrank All Women's Codesprint 2019: Name the Product

Why is "la Gestapo" feminine?

Animating wave motion in water

label a part of commutative diagram

Why do I have a large white artefact on the rendered image?

Do native speakers use "ultima" and "proxima" frequently in spoken English?

Did Nintendo change its mind about 68000 SNES?

Was World War I a war of liberals against authoritarians?

is this saw blade faulty?

Help with identifying unique aircraft over NE Pennsylvania

What (if any) is the reason to buy in small local stores?

Why doesn't the fusion process of the sun speed up?

Weird lines in Microsoft Word

The English Debate

Fair way to split coins



Python - Oscilloscope



2019 Community Moderator ElectionCalling an external command in PythonWhat are metaclasses in Python?Finding the index of an item given a list containing it in PythonDifference between append vs. extend list methods in PythonHow can I safely create a nested directory in Python?Does Python have a ternary conditional operator?How to get the current time in PythonHow can I make a time delay in Python?Does Python have a string 'contains' substring method?Why is “1000000000000000 in range(1000000000000001)” so fast in Python 3?










0















I am trying to create a program in python which can create an oscilloscope from live audio (through a microphone)



The difference to a normal oscilloscope is that this will only show one wave length, for example (desired output):



Output Example



This shows three different wavelengths, and how they will each show on the program.



My progress so far:



  1. I've created a program to show a graph and clear and redraw it

  2. I've then created a program which will display the sound live (Although it's very slow, which would ideally be fixed if possible)

Code #1:



import matplotlib.pyplot as plt
import time

plt.ion()

#y1 is the data
y1 = [0,0.309,0.587,0.809,0.951,1,0.951,0.809,0.587,0.309,0, -0.309, -0.587, -0.809, -0.951, -1, -0.951, -0.809, -0.587, -0.309, 0]

plt.plot(y1, 'r.-') #Graph with data
plt.plot([0 for _ in y1]) #Straight line at y=0

while True:
#Update data to new data
#y1 = new data
plt.plot(y1, 'r.-') #Graph with data
plt.plot([0 for _ in y1]) #Straight line at y=0
plt.draw()
plt.pause(0.5) #Time for one wave? Need some way to find this...
plt.clf()


Code #2:



import pyaudio
import numpy as np
import matplotlib.pyplot as plt
import time

RATE = 44100
CHUNK = int(RATE/20) # RATE / number of updates per second

def soundplot(stream):
t1=time.time()
data = np.fromstring(stream.read(CHUNK),dtype=np.int16)
plt.pause(0.1) #To draw graph!
plt.clf()
plt.plot(data)
plt.draw()
plt.axis([0,len(data),-2**16/2,2**16/2])
print("took %.02f ms"%((time.time()-t1)*1000))

if __name__=="__main__":
p=pyaudio.PyAudio()
stream=p.open(format=pyaudio.paInt16,channels=1,rate=RATE,input=True,
frames_per_buffer=CHUNK)
for i in range(int(20*RATE/CHUNK)): #do this for 10 seconds
soundplot(stream)
stream.stop_stream()
stream.close()
p.terminate()


Edit: To make it clear, my desired outcome is to show one single wave length as seen in the picture, instead of multiple which is what the second code produces










share|improve this question
























  • That's cool, but do you have a question or need help with something? If so you should update your post to include what you need.

    – Random Davis
    Mar 7 at 19:00











  • Thanks! And yes, I need to show only one wave length as shown in the picture, instead of multiple at once @RandomDavis

    – Ruler Of The World
    Mar 7 at 19:00












  • @RandomDavis I made an edit to make it clearer

    – Ruler Of The World
    Mar 7 at 19:02















0















I am trying to create a program in python which can create an oscilloscope from live audio (through a microphone)



The difference to a normal oscilloscope is that this will only show one wave length, for example (desired output):



Output Example



This shows three different wavelengths, and how they will each show on the program.



My progress so far:



  1. I've created a program to show a graph and clear and redraw it

  2. I've then created a program which will display the sound live (Although it's very slow, which would ideally be fixed if possible)

Code #1:



import matplotlib.pyplot as plt
import time

plt.ion()

#y1 is the data
y1 = [0,0.309,0.587,0.809,0.951,1,0.951,0.809,0.587,0.309,0, -0.309, -0.587, -0.809, -0.951, -1, -0.951, -0.809, -0.587, -0.309, 0]

plt.plot(y1, 'r.-') #Graph with data
plt.plot([0 for _ in y1]) #Straight line at y=0

while True:
#Update data to new data
#y1 = new data
plt.plot(y1, 'r.-') #Graph with data
plt.plot([0 for _ in y1]) #Straight line at y=0
plt.draw()
plt.pause(0.5) #Time for one wave? Need some way to find this...
plt.clf()


Code #2:



import pyaudio
import numpy as np
import matplotlib.pyplot as plt
import time

RATE = 44100
CHUNK = int(RATE/20) # RATE / number of updates per second

def soundplot(stream):
t1=time.time()
data = np.fromstring(stream.read(CHUNK),dtype=np.int16)
plt.pause(0.1) #To draw graph!
plt.clf()
plt.plot(data)
plt.draw()
plt.axis([0,len(data),-2**16/2,2**16/2])
print("took %.02f ms"%((time.time()-t1)*1000))

if __name__=="__main__":
p=pyaudio.PyAudio()
stream=p.open(format=pyaudio.paInt16,channels=1,rate=RATE,input=True,
frames_per_buffer=CHUNK)
for i in range(int(20*RATE/CHUNK)): #do this for 10 seconds
soundplot(stream)
stream.stop_stream()
stream.close()
p.terminate()


Edit: To make it clear, my desired outcome is to show one single wave length as seen in the picture, instead of multiple which is what the second code produces










share|improve this question
























  • That's cool, but do you have a question or need help with something? If so you should update your post to include what you need.

    – Random Davis
    Mar 7 at 19:00











  • Thanks! And yes, I need to show only one wave length as shown in the picture, instead of multiple at once @RandomDavis

    – Ruler Of The World
    Mar 7 at 19:00












  • @RandomDavis I made an edit to make it clearer

    – Ruler Of The World
    Mar 7 at 19:02













0












0








0


1






I am trying to create a program in python which can create an oscilloscope from live audio (through a microphone)



The difference to a normal oscilloscope is that this will only show one wave length, for example (desired output):



Output Example



This shows three different wavelengths, and how they will each show on the program.



My progress so far:



  1. I've created a program to show a graph and clear and redraw it

  2. I've then created a program which will display the sound live (Although it's very slow, which would ideally be fixed if possible)

Code #1:



import matplotlib.pyplot as plt
import time

plt.ion()

#y1 is the data
y1 = [0,0.309,0.587,0.809,0.951,1,0.951,0.809,0.587,0.309,0, -0.309, -0.587, -0.809, -0.951, -1, -0.951, -0.809, -0.587, -0.309, 0]

plt.plot(y1, 'r.-') #Graph with data
plt.plot([0 for _ in y1]) #Straight line at y=0

while True:
#Update data to new data
#y1 = new data
plt.plot(y1, 'r.-') #Graph with data
plt.plot([0 for _ in y1]) #Straight line at y=0
plt.draw()
plt.pause(0.5) #Time for one wave? Need some way to find this...
plt.clf()


Code #2:



import pyaudio
import numpy as np
import matplotlib.pyplot as plt
import time

RATE = 44100
CHUNK = int(RATE/20) # RATE / number of updates per second

def soundplot(stream):
t1=time.time()
data = np.fromstring(stream.read(CHUNK),dtype=np.int16)
plt.pause(0.1) #To draw graph!
plt.clf()
plt.plot(data)
plt.draw()
plt.axis([0,len(data),-2**16/2,2**16/2])
print("took %.02f ms"%((time.time()-t1)*1000))

if __name__=="__main__":
p=pyaudio.PyAudio()
stream=p.open(format=pyaudio.paInt16,channels=1,rate=RATE,input=True,
frames_per_buffer=CHUNK)
for i in range(int(20*RATE/CHUNK)): #do this for 10 seconds
soundplot(stream)
stream.stop_stream()
stream.close()
p.terminate()


Edit: To make it clear, my desired outcome is to show one single wave length as seen in the picture, instead of multiple which is what the second code produces










share|improve this question
















I am trying to create a program in python which can create an oscilloscope from live audio (through a microphone)



The difference to a normal oscilloscope is that this will only show one wave length, for example (desired output):



Output Example



This shows three different wavelengths, and how they will each show on the program.



My progress so far:



  1. I've created a program to show a graph and clear and redraw it

  2. I've then created a program which will display the sound live (Although it's very slow, which would ideally be fixed if possible)

Code #1:



import matplotlib.pyplot as plt
import time

plt.ion()

#y1 is the data
y1 = [0,0.309,0.587,0.809,0.951,1,0.951,0.809,0.587,0.309,0, -0.309, -0.587, -0.809, -0.951, -1, -0.951, -0.809, -0.587, -0.309, 0]

plt.plot(y1, 'r.-') #Graph with data
plt.plot([0 for _ in y1]) #Straight line at y=0

while True:
#Update data to new data
#y1 = new data
plt.plot(y1, 'r.-') #Graph with data
plt.plot([0 for _ in y1]) #Straight line at y=0
plt.draw()
plt.pause(0.5) #Time for one wave? Need some way to find this...
plt.clf()


Code #2:



import pyaudio
import numpy as np
import matplotlib.pyplot as plt
import time

RATE = 44100
CHUNK = int(RATE/20) # RATE / number of updates per second

def soundplot(stream):
t1=time.time()
data = np.fromstring(stream.read(CHUNK),dtype=np.int16)
plt.pause(0.1) #To draw graph!
plt.clf()
plt.plot(data)
plt.draw()
plt.axis([0,len(data),-2**16/2,2**16/2])
print("took %.02f ms"%((time.time()-t1)*1000))

if __name__=="__main__":
p=pyaudio.PyAudio()
stream=p.open(format=pyaudio.paInt16,channels=1,rate=RATE,input=True,
frames_per_buffer=CHUNK)
for i in range(int(20*RATE/CHUNK)): #do this for 10 seconds
soundplot(stream)
stream.stop_stream()
stream.close()
p.terminate()


Edit: To make it clear, my desired outcome is to show one single wave length as seen in the picture, instead of multiple which is what the second code produces







python python-3.x audio microphone oscilloscope






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Mar 7 at 19:02







Ruler Of The World

















asked Mar 7 at 18:57









Ruler Of The WorldRuler Of The World

551323




551323












  • That's cool, but do you have a question or need help with something? If so you should update your post to include what you need.

    – Random Davis
    Mar 7 at 19:00











  • Thanks! And yes, I need to show only one wave length as shown in the picture, instead of multiple at once @RandomDavis

    – Ruler Of The World
    Mar 7 at 19:00












  • @RandomDavis I made an edit to make it clearer

    – Ruler Of The World
    Mar 7 at 19:02

















  • That's cool, but do you have a question or need help with something? If so you should update your post to include what you need.

    – Random Davis
    Mar 7 at 19:00











  • Thanks! And yes, I need to show only one wave length as shown in the picture, instead of multiple at once @RandomDavis

    – Ruler Of The World
    Mar 7 at 19:00












  • @RandomDavis I made an edit to make it clearer

    – Ruler Of The World
    Mar 7 at 19:02
















That's cool, but do you have a question or need help with something? If so you should update your post to include what you need.

– Random Davis
Mar 7 at 19:00





That's cool, but do you have a question or need help with something? If so you should update your post to include what you need.

– Random Davis
Mar 7 at 19:00













Thanks! And yes, I need to show only one wave length as shown in the picture, instead of multiple at once @RandomDavis

– Ruler Of The World
Mar 7 at 19:00






Thanks! And yes, I need to show only one wave length as shown in the picture, instead of multiple at once @RandomDavis

– Ruler Of The World
Mar 7 at 19:00














@RandomDavis I made an edit to make it clearer

– Ruler Of The World
Mar 7 at 19:02





@RandomDavis I made an edit to make it clearer

– Ruler Of The World
Mar 7 at 19:02












1 Answer
1






active

oldest

votes


















1














To show a single wavelength, first scan forward in time until you find a non-negative data point. (This would happen at once, with the very first entry, with the data in Code #1.)



Then continue scanning forward in time, and maintain a delta between successive samples. Initially the delta (or discrete derivative) will be positive as the curve approaches its max, then will turn negative till hitting a min, then will turn positive again.



Stop scanning forward in time when you encounter a non-negative data point and the delta is positive. At that point you have a full wavelength.



EDIT:



If you have lots of data then it's OK to skip some preamble data samples. The key here is we want to find a zero crossing with positive derivative, and then keep going until we find another zero crossing with positive derivative. So that first decision should both look for a non-negative data point and insist on positive delta.



In the presence of noise, we might see sign changes on delta more often than the period of the waveform. So an initial step might be to find min and max values for a bunch of samples (implying a range), then pick arbitrary thresholds like min + .25 * range and min + .75 * range, record the first positive zero crossing, wait for signal to exceed the high threshold, wait for it to go below the low threshold (after a negative zero crossing), then record the next positive zero crossing. That gives you an estimate of wavelength. Make repeated estimates if you find that helpful, and take some convenient aggregate like the mean or (better) the median.



Armed with a wavelength estimate, you're in a better position to evaluate whether a pair of positive zero crossings appear to be "correct" or due to noise. Reject pairs that are much closer together than your estimate would suggest. You may also find it convenient to compute a smoothed derivative, so instead of delta of last two points seen (K=2), you are averaging over the last K points, perhaps half a dozen of them. The average function is a low pass filter which rejects high frequency noise.






share|improve this answer

























  • Great answer! Is there any way for me to speed up the graphing process so it doesn't take as long, because I have to wait around 0.2 seconds which means there will only be 5 updates a second

    – Ruler Of The World
    Mar 7 at 19:17












  • You might be interested in the high speed graphing accomplished by ondras.github.io/oscope or by various web assembly projects that render Jerobeam Fenderson waveforms.

    – J_H
    Mar 7 at 21:42











  • This is amazing, thank you so much!

    – Ruler Of The World
    Mar 7 at 22:06










Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55050976%2fpython-oscilloscope%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














To show a single wavelength, first scan forward in time until you find a non-negative data point. (This would happen at once, with the very first entry, with the data in Code #1.)



Then continue scanning forward in time, and maintain a delta between successive samples. Initially the delta (or discrete derivative) will be positive as the curve approaches its max, then will turn negative till hitting a min, then will turn positive again.



Stop scanning forward in time when you encounter a non-negative data point and the delta is positive. At that point you have a full wavelength.



EDIT:



If you have lots of data then it's OK to skip some preamble data samples. The key here is we want to find a zero crossing with positive derivative, and then keep going until we find another zero crossing with positive derivative. So that first decision should both look for a non-negative data point and insist on positive delta.



In the presence of noise, we might see sign changes on delta more often than the period of the waveform. So an initial step might be to find min and max values for a bunch of samples (implying a range), then pick arbitrary thresholds like min + .25 * range and min + .75 * range, record the first positive zero crossing, wait for signal to exceed the high threshold, wait for it to go below the low threshold (after a negative zero crossing), then record the next positive zero crossing. That gives you an estimate of wavelength. Make repeated estimates if you find that helpful, and take some convenient aggregate like the mean or (better) the median.



Armed with a wavelength estimate, you're in a better position to evaluate whether a pair of positive zero crossings appear to be "correct" or due to noise. Reject pairs that are much closer together than your estimate would suggest. You may also find it convenient to compute a smoothed derivative, so instead of delta of last two points seen (K=2), you are averaging over the last K points, perhaps half a dozen of them. The average function is a low pass filter which rejects high frequency noise.






share|improve this answer

























  • Great answer! Is there any way for me to speed up the graphing process so it doesn't take as long, because I have to wait around 0.2 seconds which means there will only be 5 updates a second

    – Ruler Of The World
    Mar 7 at 19:17












  • You might be interested in the high speed graphing accomplished by ondras.github.io/oscope or by various web assembly projects that render Jerobeam Fenderson waveforms.

    – J_H
    Mar 7 at 21:42











  • This is amazing, thank you so much!

    – Ruler Of The World
    Mar 7 at 22:06















1














To show a single wavelength, first scan forward in time until you find a non-negative data point. (This would happen at once, with the very first entry, with the data in Code #1.)



Then continue scanning forward in time, and maintain a delta between successive samples. Initially the delta (or discrete derivative) will be positive as the curve approaches its max, then will turn negative till hitting a min, then will turn positive again.



Stop scanning forward in time when you encounter a non-negative data point and the delta is positive. At that point you have a full wavelength.



EDIT:



If you have lots of data then it's OK to skip some preamble data samples. The key here is we want to find a zero crossing with positive derivative, and then keep going until we find another zero crossing with positive derivative. So that first decision should both look for a non-negative data point and insist on positive delta.



In the presence of noise, we might see sign changes on delta more often than the period of the waveform. So an initial step might be to find min and max values for a bunch of samples (implying a range), then pick arbitrary thresholds like min + .25 * range and min + .75 * range, record the first positive zero crossing, wait for signal to exceed the high threshold, wait for it to go below the low threshold (after a negative zero crossing), then record the next positive zero crossing. That gives you an estimate of wavelength. Make repeated estimates if you find that helpful, and take some convenient aggregate like the mean or (better) the median.



Armed with a wavelength estimate, you're in a better position to evaluate whether a pair of positive zero crossings appear to be "correct" or due to noise. Reject pairs that are much closer together than your estimate would suggest. You may also find it convenient to compute a smoothed derivative, so instead of delta of last two points seen (K=2), you are averaging over the last K points, perhaps half a dozen of them. The average function is a low pass filter which rejects high frequency noise.






share|improve this answer

























  • Great answer! Is there any way for me to speed up the graphing process so it doesn't take as long, because I have to wait around 0.2 seconds which means there will only be 5 updates a second

    – Ruler Of The World
    Mar 7 at 19:17












  • You might be interested in the high speed graphing accomplished by ondras.github.io/oscope or by various web assembly projects that render Jerobeam Fenderson waveforms.

    – J_H
    Mar 7 at 21:42











  • This is amazing, thank you so much!

    – Ruler Of The World
    Mar 7 at 22:06













1












1








1







To show a single wavelength, first scan forward in time until you find a non-negative data point. (This would happen at once, with the very first entry, with the data in Code #1.)



Then continue scanning forward in time, and maintain a delta between successive samples. Initially the delta (or discrete derivative) will be positive as the curve approaches its max, then will turn negative till hitting a min, then will turn positive again.



Stop scanning forward in time when you encounter a non-negative data point and the delta is positive. At that point you have a full wavelength.



EDIT:



If you have lots of data then it's OK to skip some preamble data samples. The key here is we want to find a zero crossing with positive derivative, and then keep going until we find another zero crossing with positive derivative. So that first decision should both look for a non-negative data point and insist on positive delta.



In the presence of noise, we might see sign changes on delta more often than the period of the waveform. So an initial step might be to find min and max values for a bunch of samples (implying a range), then pick arbitrary thresholds like min + .25 * range and min + .75 * range, record the first positive zero crossing, wait for signal to exceed the high threshold, wait for it to go below the low threshold (after a negative zero crossing), then record the next positive zero crossing. That gives you an estimate of wavelength. Make repeated estimates if you find that helpful, and take some convenient aggregate like the mean or (better) the median.



Armed with a wavelength estimate, you're in a better position to evaluate whether a pair of positive zero crossings appear to be "correct" or due to noise. Reject pairs that are much closer together than your estimate would suggest. You may also find it convenient to compute a smoothed derivative, so instead of delta of last two points seen (K=2), you are averaging over the last K points, perhaps half a dozen of them. The average function is a low pass filter which rejects high frequency noise.






share|improve this answer















To show a single wavelength, first scan forward in time until you find a non-negative data point. (This would happen at once, with the very first entry, with the data in Code #1.)



Then continue scanning forward in time, and maintain a delta between successive samples. Initially the delta (or discrete derivative) will be positive as the curve approaches its max, then will turn negative till hitting a min, then will turn positive again.



Stop scanning forward in time when you encounter a non-negative data point and the delta is positive. At that point you have a full wavelength.



EDIT:



If you have lots of data then it's OK to skip some preamble data samples. The key here is we want to find a zero crossing with positive derivative, and then keep going until we find another zero crossing with positive derivative. So that first decision should both look for a non-negative data point and insist on positive delta.



In the presence of noise, we might see sign changes on delta more often than the period of the waveform. So an initial step might be to find min and max values for a bunch of samples (implying a range), then pick arbitrary thresholds like min + .25 * range and min + .75 * range, record the first positive zero crossing, wait for signal to exceed the high threshold, wait for it to go below the low threshold (after a negative zero crossing), then record the next positive zero crossing. That gives you an estimate of wavelength. Make repeated estimates if you find that helpful, and take some convenient aggregate like the mean or (better) the median.



Armed with a wavelength estimate, you're in a better position to evaluate whether a pair of positive zero crossings appear to be "correct" or due to noise. Reject pairs that are much closer together than your estimate would suggest. You may also find it convenient to compute a smoothed derivative, so instead of delta of last two points seen (K=2), you are averaging over the last K points, perhaps half a dozen of them. The average function is a low pass filter which rejects high frequency noise.







share|improve this answer














share|improve this answer



share|improve this answer








edited Mar 7 at 21:38

























answered Mar 7 at 19:08









J_HJ_H

3,9401821




3,9401821












  • Great answer! Is there any way for me to speed up the graphing process so it doesn't take as long, because I have to wait around 0.2 seconds which means there will only be 5 updates a second

    – Ruler Of The World
    Mar 7 at 19:17












  • You might be interested in the high speed graphing accomplished by ondras.github.io/oscope or by various web assembly projects that render Jerobeam Fenderson waveforms.

    – J_H
    Mar 7 at 21:42











  • This is amazing, thank you so much!

    – Ruler Of The World
    Mar 7 at 22:06

















  • Great answer! Is there any way for me to speed up the graphing process so it doesn't take as long, because I have to wait around 0.2 seconds which means there will only be 5 updates a second

    – Ruler Of The World
    Mar 7 at 19:17












  • You might be interested in the high speed graphing accomplished by ondras.github.io/oscope or by various web assembly projects that render Jerobeam Fenderson waveforms.

    – J_H
    Mar 7 at 21:42











  • This is amazing, thank you so much!

    – Ruler Of The World
    Mar 7 at 22:06
















Great answer! Is there any way for me to speed up the graphing process so it doesn't take as long, because I have to wait around 0.2 seconds which means there will only be 5 updates a second

– Ruler Of The World
Mar 7 at 19:17






Great answer! Is there any way for me to speed up the graphing process so it doesn't take as long, because I have to wait around 0.2 seconds which means there will only be 5 updates a second

– Ruler Of The World
Mar 7 at 19:17














You might be interested in the high speed graphing accomplished by ondras.github.io/oscope or by various web assembly projects that render Jerobeam Fenderson waveforms.

– J_H
Mar 7 at 21:42





You might be interested in the high speed graphing accomplished by ondras.github.io/oscope or by various web assembly projects that render Jerobeam Fenderson waveforms.

– J_H
Mar 7 at 21:42













This is amazing, thank you so much!

– Ruler Of The World
Mar 7 at 22:06





This is amazing, thank you so much!

– Ruler Of The World
Mar 7 at 22:06



















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55050976%2fpython-oscilloscope%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Can't initialize raids on a new ASUS Prime B360M-A motherboard2019 Community Moderator ElectionSimilar to RAID config yet more like mirroring solution?Can't get motherboard serial numberWhy does the BIOS entry point start with a WBINVD instruction?UEFI performance Asus Maximus V Extreme

Identity Server 4 is not redirecting to Angular app after login2019 Community Moderator ElectionIdentity Server 4 and dockerIdentityserver implicit flow unauthorized_clientIdentityServer Hybrid Flow - Access Token is null after user successful loginIdentity Server to MVC client : Page Redirect After loginLogin with Steam OpenId(oidc-client-js)Identity Server 4+.NET Core 2.0 + IdentityIdentityServer4 post-login redirect not working in Edge browserCall to IdentityServer4 generates System.NullReferenceException: Object reference not set to an instance of an objectIdentityServer4 without HTTPS not workingHow to get Authorization code from identity server without login form

2005 Ahvaz unrest Contents Background Causes Casualties Aftermath See also References Navigation menue"At Least 10 Are Killed by Bombs in Iran""Iran"Archived"Arab-Iranians in Iran to make April 15 'Day of Fury'"State of Mind, State of Order: Reactions to Ethnic Unrest in the Islamic Republic of Iran.10.1111/j.1754-9469.2008.00028.x"Iran hangs Arab separatists"Iran Overview from ArchivedConstitution of the Islamic Republic of Iran"Tehran puzzled by forged 'riots' letter""Iran and its minorities: Down in the second class""Iran: Handling Of Ahvaz Unrest Could End With Televised Confessions""Bombings Rock Iran Ahead of Election""Five die in Iran ethnic clashes""Iran: Need for restraint as anniversary of unrest in Khuzestan approaches"Archived"Iranian Sunni protesters killed in clashes with security forces"Archived