MATL, 29 bytes
';#'&mXz!"@o?T}vn127\c&YD]]vx Input is a string enclosed in single quotes.
The FizzBuzz program is too long for the online interpreters; see it working offline in this gif:
###Explanation
Explanation
The accumulator value is implemented as the number of elements in the stack. This makes the program slower than if the accumulator value was a single number in the stack, it but saves a few bytes.
';#' % Push this string &m % Input string (implicit). Pushes row vector array of the same size with % entries 1, 2 or 0 for chars equal to ';', '#' or others, respectively Xz % Remove zeros. Gives a column vector ! % Transpose into a row vector " % For each entry @ % Push current entry o? % If odd T % Push true. This increases the accumulator (number of stack elements) } % Else v % Concatenate stack into a column vector n % Number of elements 127\ % Modulo 127 c % Convert to char &YD % Display immediately without newline ] % End ] % End vx % Concatenate stack and delete. This avoids implicit display 
