Since my ATtiny lacks a UART I made a simple and short (100 bytes) serial transmission routine. Great for debugging/development when you don't want to include a 2KB USB stack. Instead you can add sprintf. I transmitted 250 bytes/s.
It toggles a pin on the avr. Between two edges there is a peak. Single width peaks code a 1 bit. Double width peaks code a 0 bit. Triple width peaks code end of byte. LSB transmitted first. Trailing 0 bits not transmitted.
The avr output pin connects to to the sound card via a voltage divider. I used 220ohm:2200ohm with 5V levels to get .5V to the line in input of the sound card.
On the PC side I use the linux command line
brec -s 44100 -b 8 -r|./comm2
brec records 8 bit samples at 44100 Hz, pipes it to comm2 which decodes and prints the data.
The delay loops are for use with a 1 MHz avr. You may tweak them for higher clock speeds or transmission rates. brec might also do 96000 Hz. However, there is a limit because the edges are sloped.
Uncomment the '// printf("%4d %2d %3d\n",sum,age,t);' line to see edge height, edge width and peak width when you tune your voltage divider, sound card input gain and decode timings. The peak height should be no more than 1/2 the sound card input range (256/2=128). Input gain should be mid to high, to avoid excessive input voltages. Probably you must set your line in as recording device with some mixer app. Try the other stereo channel if one does not work.