forked from adafruit/circuitpython
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathissue9705.py
More file actions
36 lines (27 loc) · 921 Bytes
/
issue9705.py
File metadata and controls
36 lines (27 loc) · 921 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import audiomp3, audiocore
import ulab.numpy as np
TEST_FILE = (
__file__.rsplit("/", 1)[0]
+ "/../circuitpython-manual/audiocore/jeplayer-splash-44100-stereo.mp3"
)
def normalized_rms_ulab(values):
values = np.frombuffer(values, dtype=np.int16)
# this function works with ndarrays only
minbuf = np.mean(values)
values = values - minbuf
samples_sum = np.sum(values * values)
return (samples_sum / len(values)) ** 0.5
def print_frame_loudness(decoder, n):
for i in range(n):
result, buf = audiocore.get_buffer(decoder)
print(f"{i} {result} {normalized_rms_ulab(buf):5.0f}")
print()
# First frames
decoder = audiomp3.MP3Decoder(TEST_FILE)
print_frame_loudness(decoder, 8)
# First frames (fresh decoder)
decoder = audiomp3.MP3Decoder(TEST_FILE)
print_frame_loudness(decoder, 2)
# First frames (reopen)
decoder.open(TEST_FILE)
print_frame_loudness(decoder, 3)