Init
This commit is contained in:
commit
6fbbbbc8d4
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
song.npy
|
17
visualiser/importer.py
Normal file
17
visualiser/importer.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import wave
|
||||||
|
import numpy
|
||||||
|
|
||||||
|
# Read file to get buffer use a 16000 hz wav
|
||||||
|
ifile = wave.open("/home/bruno/song.wav")
|
||||||
|
samples = ifile.getnframes()
|
||||||
|
audio = ifile.readframes(samples)
|
||||||
|
|
||||||
|
# Convert buffer to float32 using NumPy
|
||||||
|
audio_as_np_int16 = numpy.frombuffer(audio, dtype=numpy.int16)
|
||||||
|
audio_as_np_float32 = audio_as_np_int16.astype(numpy.float32)
|
||||||
|
|
||||||
|
# Normalise float32 array so that values are between -1.0 and +1.0
|
||||||
|
max_int16 = 2**15
|
||||||
|
audio_normalised = audio_as_np_float32 / max_int16
|
||||||
|
with open('song.npy', 'wb') as f:
|
||||||
|
numpy.save(f, audio_normalised)
|
66
visualiser/player.py
Normal file
66
visualiser/player.py
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
#import modules
|
||||||
|
import numpy as np
|
||||||
|
import time
|
||||||
|
import math
|
||||||
|
import pyaudio
|
||||||
|
import pygame as pg
|
||||||
|
|
||||||
|
#load song.npy
|
||||||
|
data = np.load('song.npy')
|
||||||
|
|
||||||
|
surface = pg.display.set_mode((800, 600))
|
||||||
|
|
||||||
|
progress = 0
|
||||||
|
|
||||||
|
average = 0
|
||||||
|
|
||||||
|
# define callback (2)
|
||||||
|
def callback(in_data, frame_count, time_info, status):
|
||||||
|
#read frames from data
|
||||||
|
global progress
|
||||||
|
global average
|
||||||
|
#print(frame_count)
|
||||||
|
#read frames from data
|
||||||
|
frames = data[progress:progress+frame_count]
|
||||||
|
#average half of the frames
|
||||||
|
framesx = []
|
||||||
|
for i in range(0, len(frames), 80):
|
||||||
|
average = np.average(frames[i:i+2])
|
||||||
|
framesx.append(average)
|
||||||
|
#print(len(framesx))
|
||||||
|
for tmp in framesx:
|
||||||
|
#remap tmp from -1 to 1 to 0 to 255
|
||||||
|
tmp = (tmp + 1) * 127.5
|
||||||
|
#convert to int
|
||||||
|
tmx, _ = math.modf(tmp)
|
||||||
|
tmp = tmx * 255
|
||||||
|
#set treshold
|
||||||
|
#print(tmp)
|
||||||
|
#create color
|
||||||
|
if tmp > 250:
|
||||||
|
xtmp = 255
|
||||||
|
else:
|
||||||
|
xtmp = 0
|
||||||
|
color = (xtmp, xtmp, xtmp)
|
||||||
|
#set screen to color
|
||||||
|
surface.fill(color)
|
||||||
|
#update progress
|
||||||
|
pg.display.flip()
|
||||||
|
#increment progress
|
||||||
|
progress += frame_count
|
||||||
|
#return frames
|
||||||
|
return (frames, pyaudio.paContinue)
|
||||||
|
#initialise pyaudio
|
||||||
|
pg.init()
|
||||||
|
p = pyaudio.PyAudio()
|
||||||
|
#play the song from data
|
||||||
|
stream = p.open(format=p.get_format_from_width(data.dtype.itemsize),
|
||||||
|
channels=1,
|
||||||
|
rate=16000,
|
||||||
|
output=True,
|
||||||
|
stream_callback=callback)
|
||||||
|
|
||||||
|
stream.start_stream()
|
||||||
|
|
||||||
|
while True:
|
||||||
|
time.sleep(0.1)
|
11
visualiser/plotter.py
Normal file
11
visualiser/plotter.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# import numpy
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
#load the saved data
|
||||||
|
data = np.load('song.npy')
|
||||||
|
#remap tmp from -1 to 1 to 0 to 255
|
||||||
|
tmp = (data + 1) * 127.5
|
||||||
|
#plot the data
|
||||||
|
plt.plot(tmp)
|
||||||
|
plt.show()
|
Loading…
Reference in New Issue
Block a user