Answer to original question:
The "frequency of red, represent in bits" you asked for is 480 to 405 THz, so in bits that is 111100000 to 110010101. But you also said "its defined in nanometers", so that is 630 to 740nm which is 1001110110 to 1011100100 in binary. If you want to drive a loudspeaker with a waveform, you need either a sample audio waveform or a speech synthesis chip. In either case, the binary values I have given you have nothing to do with the sound of the word "red" which would need many more bits to represent any audible sound (eg a minimum of 0.5 second at 16 kbps PCM would be 8 kbp = 1 kbyte).
Another way representing a colour in binary is the RGB system where red would be 0xFF0000, which is 111111110000000000000000 in binary.
Answer to question on how to get bits in wav file
First we have to determine where the wav file is stored. It could be stored as a const array in the PIC, or in an external memory device where you have to read it over some kind of serial or parallel bus. Since the PIC18F4550 has 32k bytes of flash, if your program is fairly small there could be enough room left for the 3 wav files.
Then we have to determine how the hardware is going to play the sound. You seem to be attempting to send a byte value out of bit port by shifting it. But to get this right we need to know more about the hardware, because you cannot connect a speaker to a bit port and expect sound out (not without further processing of a PCM signal anyway - are you attempting a 1 bit DAC design? If so, there are further notes here but this is quite ambitious).
Apart from that, the bit values in wav file, would be obtained by obtaining each sample (8 bit?) in the file and shifting a mask value of 0x01 round with a bitwise AND operation to determine which bits were set.