Po co Bass, skoro można samemu :-)
Struktura wava jest dość prosta, ale przetworzenie rozdzielczości bitowych nie jest takie proste z punktu widzenia jakości dźwięku. Tzn w górę jest łatwo, w dół trudno.
Z 8 na 16 bit w teorii należałoby bajt z 8-bit użyć jako bardziej znaczący bajt słowa 16-bitowego. Rzecz w tym, że w 8-bit amplituda jest kodowana jako unsigned byte. Czyli zero =127, minimum to 0, a maximum to 255. W 16-bit wartość próbki jest zapisywana sensowniej, tzn jako signed word. zero=0, minimum to -32768, maximum to 32767. Zwróć na to uwagę przy konwersji.
Przy zmniejszania rozdzielczości bitowej (np z 16 na 8) teoretycznie wystarczy urwać mniej znaczący bajt, a bardziej znaczący zostawić przekształcając go zgodnie z podanymi powyżej zasadami. Jednak jeśli cichy sygnał 16-bitowy po konwersji do 8-bit takiej jak powyżej będzie w okolicy jednego bita, wtedy będzie dziwnie brzmiał, zanikał, pojawiał się itd. Dlatego stosuje się dithering, czyli dodanie niewielkiej ilości szumu przy konwersji. Szum nieco wzrasta, ale poprawia się jakość w porównaniu do normalnej konwersji. Dodatkowo, stosuje się odpowiednią funkcję gęstości prawdopodobieństwa dithera żeby wzrost szumu był niewielki a jednocześnie żeby szum nie był zmodulowany przez sygnał. Dalej, widmo szumu zwykle kształtuje się w dziedzinie częstotliwości, by maksimum energii przypadało na pasmo słabo słyszalne. Jak już sobie z tym poradzisz, to ostatni problem będzie doprawdy pikusiem. Otóż formatów wyższych niż 16-bit jest kilka, jest 24-bitowy (być może z podformatami), jest kilka standardów 32-bitowego float. Kowerter musi poprawnie je wszystkie obsłużyć :-);