I am a beginner in Tkinter GUI and I am learning about wave audio display with the corresponding time of audio. I tried the axis.set_xticks() and function but not work in my case. It would be helpful if anyone could solve this problem. Thanks.
Here is my code.
from __future__ import print_function, absolute_import
[import numpy
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
class AudioPlayer(object):
def __init__(self, signal, sampling_rate):
self.signal = signal
self.sampling_rate = sampling_rate
if len(self.signal.shape) == 1:
self.channels = 1
else:
self.channels = self.signal.shape\[1\]
@property
def fs(self):
return self.sampling_rate
class EventListVisualizer(object):
def __init__(self,master, audio_signal, sampling_rate):
self.master = master
self.master.title("A simple Waveplot")
audio_signal = audio_signal / numpy.max(numpy.abs(audio_signal))
self.audio = AudioPlayer(signal=audio_signal,sampling_rate=sampling_rate)
self.timedomain_locations = None
self.waveform_selector_point_hop = 1000
self.fig_shape = (14, 2)
def generate_GUI(self):
self.fig1 = Figure(figsize=self.fig_shape, dpi=100)
self.ax1 = self.fig1.add_subplot(111)
self.ax1.grid(True)
# Waveform plot
self.timedomain_locations = numpy.arange(0, self.audio.signal.shape\[0\])
self.ax1.fill_between(
self.timedomain_locations\[::self.waveform_selector_point_hop\],
self.audio.signal\[::self.waveform_selector_point_hop\],
-self.audio.signal\[::self.waveform_selector_point_hop\],
color='0.5')
'''
#For Display time in x-axis
times = numpy.linspace(0, (self.audio.signal.shape\[0\]) / fs, num=(self.audio.fs))
self.ax1.set_xticks(times)
'''
# we create a frame in which we will pack the sound wave graph
self.waveforms_frame = tk.Frame(self.master, relief=tk.RAISED, borderwidth=3)
self.waveforms_frame.pack(fill=tk.X)
self.ax1.set_xlabel('Time')
self.ax1.set_ylabel('Frequency')
self.ax1.set_title("Waveform Plot")
self.fig1.tight_layout() #Plot audio in whole area
# we create a canvas to which we will convert the sound chart from MatPlotLib
self.waveform_canvas = FigureCanvasTkAgg(self.fig1, master=self.waveforms_frame)
self.waveform_canvas.draw()
self.waveform_canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
if __name__ == '__main__':
root = tk.Tk()
import librosa
audio, fs = librosa.load('sample.wav', mono=True)
vis = EventListVisualizer(root, audio_signal=audio,sampling_rate=fs)
vis.generate_GUI()
root.mainloop()