Remove variable tagger
Not useful. Was only created as an experiment and included accidentallypull/81/head
parent
e06f92bf31
commit
116f596292
|
@ -1,113 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
# Copyright 2019 Mycroft AI Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
import atexit
|
||||
|
||||
from fitipy import Fitipy
|
||||
from time import sleep
|
||||
|
||||
import wavio
|
||||
from os.path import join, basename, splitext
|
||||
|
||||
from glob import glob
|
||||
from prettyparse import create_parser
|
||||
from pyaudio import PyAudio, paFloat32
|
||||
from random import shuffle
|
||||
from subprocess import Popen
|
||||
from tkinter import *
|
||||
from tkinter.ttk import *
|
||||
from threading import Thread, Event
|
||||
|
||||
|
||||
from precise.util import load_audio
|
||||
from precise.params import pr
|
||||
|
||||
usage = '''
|
||||
Tag samples with a variable score
|
||||
:folder str
|
||||
Folder to load wavs from
|
||||
|
||||
:tags_file str
|
||||
File to write tags to
|
||||
'''
|
||||
def play_wav(filename, p: PyAudio):
|
||||
audio = load_audio(filename)
|
||||
|
||||
|
||||
|
||||
def main():
|
||||
args = create_parser(usage).parse_args()
|
||||
filenames = glob(join(args.folder, '*.wav'))
|
||||
shuffle(filenames)
|
||||
wav_id = -1
|
||||
stream = None
|
||||
stop_event = Event()
|
||||
stop_event.set()
|
||||
p = PyAudio()
|
||||
atexit.register(p.terminate)
|
||||
|
||||
def play_audio(audio_file):
|
||||
nonlocal stream
|
||||
if stream:
|
||||
stop_event.clear()
|
||||
stop_event.wait()
|
||||
stream.stop_stream()
|
||||
stream.close()
|
||||
stream = None
|
||||
audio = load_audio(audio_file)[-pr.buffer_samples:]
|
||||
audio /= 2 * min(audio.mean() + 4 * audio.std(), abs(audio).max())
|
||||
stream = p.open(format=paFloat32, channels=1, rate=pr.sample_rate, output=True)
|
||||
stream.start_stream()
|
||||
def write_audio():
|
||||
data = audio.astype('float32').tostring()
|
||||
chunk_size = 1024
|
||||
for pos in range(chunk_size, len(data) + chunk_size, chunk_size):
|
||||
if not stop_event.is_set():
|
||||
stop_event.set()
|
||||
return
|
||||
stream.write(data[pos - chunk_size:pos])
|
||||
while stop_event.is_set():
|
||||
sleep(chunk_size / pr.sample_rate)
|
||||
stop_event.set()
|
||||
Thread(target=write_audio, daemon=True).start()
|
||||
|
||||
tags_file = Fitipy(args.tags_file)
|
||||
tags = tags_file.read().dict()
|
||||
def submit():
|
||||
nonlocal wav_id
|
||||
if wav_id >= 0:
|
||||
tags[basename(splitext(filenames[wav_id])[0])] = float(slider.get())
|
||||
tags_file.write().dict(tags)
|
||||
wav_id += 1
|
||||
play_audio(filenames[wav_id])
|
||||
|
||||
submit()
|
||||
|
||||
master = Tk()
|
||||
label = Label(master, text='0')
|
||||
label.pack()
|
||||
def on_slider_change(x):
|
||||
label['text'] = str(int(float(x)))
|
||||
slider = Scale(master, from_=0, to=100, command=on_slider_change)
|
||||
slider.pack()
|
||||
|
||||
Button(master, text='Submit', command=submit).pack()
|
||||
Button(master, text='Replay', command=lambda: play_audio(filenames[wav_id])).pack()
|
||||
mainloop()
|
||||
stream.stop_stream()
|
||||
stream.close()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in New Issue