Initial commit
This commit is contained in:
commit
4a011689ab
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
*.mkv
|
||||||
|
out/
|
||||||
|
|
||||||
|
.venv
|
||||||
|
mscz/
|
||||||
|
recordings/
|
||||||
|
**/__pycache__
|
100
src/mscz_to_mp3.py
Normal file
100
src/mscz_to_mp3.py
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
import music21
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
MSCORE="mscore"
|
||||||
|
REMOVE_MID_FILES=False
|
||||||
|
|
||||||
|
|
||||||
|
def get_elements(stream, classe):
|
||||||
|
elements = []
|
||||||
|
for el in stream[classe]:
|
||||||
|
offset = el.activeSite.getOffsetBySite(stream.parts[0]) + el.getOffsetBySite(el.activeSite)
|
||||||
|
elements.append((offset, el))
|
||||||
|
return elements
|
||||||
|
|
||||||
|
|
||||||
|
def add_elements(stream, elements):
|
||||||
|
st_elements = [(offset, el.number) for (offset, el) in get_elements(stream, 'MetronomeMark')]
|
||||||
|
#print(st_elements)
|
||||||
|
for offset, el in elements:
|
||||||
|
if (offset, el.number) not in st_elements:
|
||||||
|
stream.insert(offset, el)
|
||||||
|
#print(f"Inserting {el}@{offset}")
|
||||||
|
|
||||||
|
return stream
|
||||||
|
|
||||||
|
def separate_instruments(input_midi_path, output_folder):
|
||||||
|
# Load MIDI file
|
||||||
|
stream = music21.converter.parse(input_midi_path)
|
||||||
|
outputs = []
|
||||||
|
|
||||||
|
elements = get_elements(stream, 'MetronomeMark')
|
||||||
|
#print(elements)
|
||||||
|
|
||||||
|
# Extract each part (music21.instrument) and create a separate MIDI file for each
|
||||||
|
for i, part in enumerate(stream.parts):
|
||||||
|
part.makeRests(fillGaps=True, inPlace=True)
|
||||||
|
part.makeMeasures(inPlace=True)
|
||||||
|
part.makeTies(inPlace=True)
|
||||||
|
|
||||||
|
# Create a new music21.stream for each part
|
||||||
|
instrument_stream = music21.stream.Score()
|
||||||
|
instrument_stream.append(part)
|
||||||
|
|
||||||
|
instrument_stream = add_elements(instrument_stream, elements)
|
||||||
|
|
||||||
|
# Create a new MIDI file for each music21.instrument
|
||||||
|
output_path = f"{output_folder}/instrument_{i + 1}.mid"
|
||||||
|
instrument_stream.write('midi', fp=output_path)
|
||||||
|
outputs.append(output_path)
|
||||||
|
return outputs
|
||||||
|
|
||||||
|
|
||||||
|
def change_instrument(input, output):
|
||||||
|
s = music21.converter.parse(input)
|
||||||
|
|
||||||
|
for el in s.recurse():
|
||||||
|
if 'Instrument' in el.classes: # or 'Piano'
|
||||||
|
el.activeSite.replace(el, music21.instrument.Piano())
|
||||||
|
|
||||||
|
s.write('midi', output)
|
||||||
|
|
||||||
|
def basename(name):
|
||||||
|
return '.'.join(name.split('/')[-1].split('.')[:-1])
|
||||||
|
|
||||||
|
def create_audios(files, dest="out"):
|
||||||
|
if len(files) == 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
for el in files:
|
||||||
|
subprocess.call(["mscore", el, "-o", os.path.join(dest, basename(el))+".mp3"])
|
||||||
|
print(f"Converted {basename(el)}.mp3")
|
||||||
|
|
||||||
|
|
||||||
|
def __main__():
|
||||||
|
SCORE=sys.argv[1]
|
||||||
|
OUT=sys.argv[2]
|
||||||
|
os.makedirs(OUT, exist_ok=True)
|
||||||
|
|
||||||
|
# Create midi file
|
||||||
|
subprocess.call([MSCORE, SCORE, "-o", f"{OUT}/{basename(SCORE)}.mid"])
|
||||||
|
|
||||||
|
midi_files = separate_instruments(f"{OUT}/{basename(SCORE)}.mid", OUT)
|
||||||
|
|
||||||
|
for file in midi_files:
|
||||||
|
change_instrument(file, file)
|
||||||
|
|
||||||
|
print("=== Creating audios ===")
|
||||||
|
#create_audios(midi_files, OUT)
|
||||||
|
|
||||||
|
if REMOVE_MID_FILES:
|
||||||
|
os.remove(f"{OUT}/{basename(SCORE)}.mid")
|
||||||
|
for file in midi_files:
|
||||||
|
os.remove(file)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
__main__()
|
6
src/recording.sh
Executable file
6
src/recording.sh
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
SURFACE=$(slurp)
|
||||||
|
|
||||||
|
sleep 5
|
||||||
|
wlrctl pointer click
|
||||||
|
wf-recorder -g "$SURFACE"
|
36
src/set_audio.sh
Executable file
36
src/set_audio.sh
Executable file
@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
IN=recordings/le_roi.mkv
|
||||||
|
AUDIOS=out
|
||||||
|
OUT=videos
|
||||||
|
#TEMPO=90
|
||||||
|
#ADDED_TEMPS=3
|
||||||
|
#TEMP_DIR=$(mktemp -d)
|
||||||
|
|
||||||
|
#OFFSET=$(bc <<< "scale=20; 60.0/$TEMPO * $ADDED_TEMPS")
|
||||||
|
|
||||||
|
mkdir -p "$VIDEOS"
|
||||||
|
|
||||||
|
add_audio () {
|
||||||
|
#temp_file=$TEMP_DIR/$(basename $2)
|
||||||
|
#echo temp: $temp_file
|
||||||
|
#ffmpeg -i $2 \
|
||||||
|
# -ss $OFFSET \
|
||||||
|
# -acodec copy \
|
||||||
|
# $temp_file
|
||||||
|
|
||||||
|
ffmpeg -y \
|
||||||
|
-i $1 \
|
||||||
|
-i $2 \
|
||||||
|
-c:v copy \
|
||||||
|
-map 0:v:0 \
|
||||||
|
-map 1:a:0 \
|
||||||
|
$3
|
||||||
|
|
||||||
|
#rm $temp_file
|
||||||
|
}
|
||||||
|
|
||||||
|
add_audio "$IN" "$AUDIOS/instrument_1.mp3" "$OUT/soprane.mkv"
|
||||||
|
add_audio "$IN" "$AUDIOS/instrument_2.mp3" "$OUT/alti.mkv"
|
||||||
|
add_audio "$IN" "$AUDIOS/instrument_3.mp3" "$OUT/tenor.mkv"
|
||||||
|
add_audio "$IN" "$AUDIOS/instrument_4.mp3" "$OUT/basse.mkv"
|
Loading…
Reference in New Issue
Block a user