This method is expensive time-wise during 8 consecutive calls to analogRead
You can also keep the 8 previous samples in a buffer and only execute analogRead once per iteration instead of 8, much faster at the cost of more memory for the buffer.
If concern for time is an overriding factor the greatest time hog will be sensor noise/bounce being transmitted at a serial baud rate of 32150 constantly, a debounce function would also help,
but even then the project would keep transmitting at a duty cycle of whatever the debounce length is.
Musical projects need control and repeatability. With light sensing you'd need an average of as many readings as you can get away with before lag and if it's only one sensor eight readings definitely isn't a problem, and also, one could create the buffer array you speak of to save on time.
Take Reading
Reading different than last?
Send Controller Change Message.
Without doing a good amount of averaging change messages would be sent repeatedly, even when nothing is being sensed or the musician is holding perfectly still.
Although by analysis .1(current reading) + .9(last value) is pretty close to the average of eight. Each multiplication in that equation takes up one operation cycle. If I knew how to simulate in AVR studio I could analyze this. I'm going to get on that one of these days.
I think I like your method better come to think of it but mine works on my current project.