You want to perform supervised learning, i.e., you have set of training examples (in this case, a set of 4-vectors with a label that corresponds to one of the 100 songs). So in particular, you want to do classification: given a 4-vector, predict a song. It might feel silly to call the songs a "category", but when you look past the naming in this particular case it should make sense: given an "activity vector", what is the song out of the 100 possible songs that will be chosen?
A fair starting point is scikit-learn's flowchart for choosing an estimator. Assuming the vector entries come from a predefined set of possibilities, you can simply map the strings to integers. For example, replace "walking" by 0, driving by "1", or replace "nothing" by 0, reading by "1", and so on. So for concreteness, your training data might be a file, where each line is something like "{0,1,0,8},47" meaning that activity 0, mob act 1, session 0, and mood 8 corresponds to song 47.
Now, assuming you have less than 100k samples, a good starting point is a linear support vector machine as per the flowchart. Depending on your results, the flowchart guides you towards other choices.