Table of contents
JuneHeartTraits
The Second of the Seven Sketches for the MinaCoding Prompt of Humans is JuneHeartTraits
JuneHeartTraits uses SonicPi code to sonify the speculative nature of what traits a digi-physical human heart may sound like in this realm that is being built.
As explained in https://blog.illestpreacha.com/decibelschallengepersonaldata:
I wanted the sounds to represent the various stages a heart goes through in a workout. This explains some of the chaotic tension/feelings that can be heard in this track
JuneHeartTraits
IllestPreacha · MInaCoding Humans: JuneHeartTraits
Poem
Magic that is within
Others may not see
But for the beholder
it is never hidden
As it is a folder
That holds the gateway to the rhythm
That has its own ocean, its own sea
That may open to its own breeze
The magic that is within
That others may not see
Previous SonicPi Audio
IllestPreacha · Decibels 2023 March Challenge ; Personal Data : Heart Edition
SonicPi Code
require 'csv'
#Compared to the original, there are more math functions added to this
#and more samples
#naming the Dataset DipInCode and going to read the file
Heart = CSV.parse(File.read("E:/Creatuve Code Challenges/Sonification Challenges/March 2023/HeartRatePrep.csv"), headers: true)
i = 0
live_loop :HeartZone do
#using this equation to add more variance to the sounds
use_bpm Math.hypot(Heart[i]['HR_MIN'].to_f,Heart[i]['HR_MAX'].to_f)
#these effects are going to be affected by the zones, since they are between 0 and 1, which is the range for the mix function
with_fx :echo, mix: Heart[i]['Other Zones'].to_f do
with_fx :ixi_techno, mix: Heart[i]['Zone3'].to_f do
with_fx :krush, mix: Heart[i]['Zone2+3'].to_f do
#a trio of synths to add more musicality/variance to the listening experience
use_synth [:organ_tonewheel,:mod_sine,:mod_sine,:piano,:beep].choose
#Corresponds to the note being played
play Heart[i]['HR_MIN'].to_f, decay: Math.hypot(Math.sin(Heart[i]['Other Zones'].to_f * 5),Math.sin(Heart[i]['Other Zones'].to_f)), amp: dice(12)
#We can even pass a list of times which it will treat as a circle of times:
play_pattern_timed chord(Heart[i]['HR_MIN'].to_f, :m13), [Heart[i]['Zone2+3'].to_f, Heart[i]['Other Zones'].to_f ,Heart[i]['HR_MAX'].to_f/ Heart[i]['HR_MIN'].to_f]
end
end
end
i += 1 #counter
if i == Heart.length #make the loop nonstop
i = 0
end
#spacing
sleep Math.sin(Heart[i]['HR_MAX'].to_f/ Heart[i]['HR_MIN'].to_f)
end
live_loop :HeartBeat do
use_bpm 45
#same as the previous loop, with the difference being a random choosing of 3 effects instead of 3 synths in this portion
with_fx :ping_pong do
with_fx :flanger, depth: Heart[i]['Other Zones'].to_f do
with_fx :echo, mix: Heart[i]['Zone2+3'].to_f do
with_fx [:ping_pong,:vowel,:whammy].choose, mix: Heart[i]['Other Zones'].to_f do
sample [:ambi_piano,:elec_bong],beat_stretch: Heart[i]['Zone2'].to_f ,pitch: Math.cbrt(Heart[i]['CaloLoad'].to_f) * 3
sample :perc_impact1,beat_stretch: Math.hypot(Heart[i]['Other Zones'].to_f,Heart[i]['CaloLoad'].to_f), decay: Heart[i]['CaloLoad'].to_f
end
end
end
end
i += 1
if i == Heart.length #make the loop nonstop
i = 0
end
sleep Heart[i]['HR_MAX'].to_f/ Heart[i]['HR_MIN'].to_f
end
live_loop :HeartBeat2 do
#same as the previous loop, with the difference being a random choosing of 3 effects instead of 3 synths in this portion
#added more samples
with_fx :ping_pong do
with_fx :flanger, depth: Heart[i]['Other Zones'].to_f do
with_fx :echo, mix: Heart[i]['Zone2+3'].to_f do
with_fx [:ping_pong,:vowel,:whammy].choose, mix: Heart[i]['Other Zones'].to_f do
sample [:ambi_piano,:elec_bong].tick,beat_stretch: Heart[i]['Zone2'].to_f ,pitch: Math.cbrt(Heart[i]['CaloLoad'].to_f) * 3
sample [:elec_beep,:perc_snap].choose, beat_stretch: Math.hypot(Heart[i]['Other Zones'].to_f,Heart[i]['CaloLoad'].to_f), decay: Heart[i]['CaloLoad'].to_f
end
end
end
end
i += 1
if i == Heart.length #make the loop nonstop
i = 0
end
sleep Heart[i]['HR_MIN'].to_f/Heart[i]['HR_MAX'].to_f
end