picadae calibration programs
doc | ||
.gitignore | ||
AudioDevice.py | ||
calibrate_plot.py | ||
calibrate.py | ||
common.py | ||
convert.py | ||
COPYING | ||
do_td_plot.png | ||
elbow.py | ||
keyboard.py | ||
LICENSE | ||
MidiDevice.py | ||
MidiFilePlayer.py | ||
p_ac.py | ||
p_ac.yml | ||
plot_all_note_durations.ipynb | ||
plot_calibrate.ipynb | ||
plot_calibrate.py | ||
plot_note_analysis.py | ||
plot_seq_1.py | ||
plot_seq.py | ||
plot_us_db_range.ipynb | ||
README.md | ||
result.py | ||
rms_analysis.py | ||
rt_note_analysis.py | ||
velMapD.h | ||
velMapD.json | ||
velTableToDataStruct.py |
Picadae Calibration Programs
Install
sudo dnf install python3-devel jack-audio-connection-kit-devel
prerequisites: pyyaml sounddevice soundfile pthon-rtmidi
export PYTHONPATH=${HOME}/src/picadae/control/app python p_ac.py -c p_ac.yml
Data collection
Record a sequence of notes of decreasing dynamic level
python p_ac.py # start the interactive data collection program
Capture note 60 and 61 using the full_pulseL[] and holdDutyPctD{} from the p_ac.yml
c 60 61
Plot Cheat Sheet
python plot_seq.py ~/temp/p_ac_3_od p_ac.yml 60 10
do_td_plot(inDir,cfg.analysisArgs, pitch, take_id )
python plot_seq_1.py p_ac.yml ~/temp/p_ac_3_od us_db 84
python plot_seq.py p_ac.yml ~/temp/p_ac_3_od td_multi_plot 60 3 60 4 60 5
plot_seq.py `do_td_multi_plot(inDir,cfg.analysisArgs,[(36,4), (48,2)] )
# pitch0 takeId0 pitch1 takeId1
python plot_seq.py p_ac.yml ~/temp/p_ac_3_od plot_spectral_ranges 60 3 60 4
python plot_seq_1.py p_ac.yml ~/temp/p_ac_3_od us_db_map 84 72
python plot_seq_1.py p_ac.yml ~/temp/p_ac_3_od min_max 36 48 60 72 84
The last number in the list is the 'takeId'
# pitch0 pitch1 pitch2 pitch3 pitch4 takeId
python plot_seq_1.py p_ac.yml ~/temp/p_ac_3_od min_max_2 36 48 60 72 84 2
python plot_seq_1.py p_ac.yml ~/temp/p_ac_3_od manual_db
Interpolate across the min and max db values to form the min/max curves for the complete set of keys. The anchor points for the curves are taken from cfg record manuMinD,manualAnchorPitchMinDbL, and manualMaxDbL.
# select the event (takeId, eventIdx) to use to represent the min value for each pitch
manualMinD: {
36: [2, 10],
48: [2, 10],
60: [2, 10],
72: [2, 10],
84: [2, 10]
},
# leave 60 out of the min anchor point list
manualAnchorPitchMinDbL: [ 36,48,72,84 ],
manualAnchorPitchMaxDbL: [ 36,48,60,72,84 ],