Witaj
... jeśli chodzi Tobie o otrzymanie cyfrowego dźwięku polifonicznego, musisz stworzyć w swoim programie coś w rodzaju "miksera" (sumatora) próbek sygnału.
Można zrobić to na kilka sposobów
Wszystko zależne jest od tego, czy Twoje próbki dźwięku przechowywane są w ośmiu, czy też 16 bitach.
1. Jeśli przechowujesz próbki w ośmiu bitach, a posiadasz szesnastobitowe rejestry
... załóżmy, że stworzymy polifonię 4 głosową
a).
1). Pobieramy pierwszą ośmiobitową próbkę i rozszerzamy rejestr do 16 bitów
EXT.l próbka
próbka= 1111111111100111
2). pobieramy kolejne próbki i wykonujemy z nimi dokładnie to samo.
b).
Załóżmy, że próbki to rejestry A,B,C,D ...
Wykonujemy operację sumowania próbek ( pamiętając, że pracujemy na rejestrach szesnastobitowych)
ADD.w A,B
ADD.w C,D
ADD.w B,D
c).
Mamy zsumowane próbki ( w rejestrze D ), teraz należy je znów przeskalować do 8 bitów. Uzyskamy to poprzez podzielenie wartości tego rejestru (D) przez sumę ilości próbek, które zostały do siebie dodane ( w naszym przypadku 4) ...
Uzyskujemy to poprzez przesunięcie bitowe w prawo zawartości tego rejestru.
Należy wziąć pod uwagę, że przesunięcie to musi odbywać się ze znakiem ! ... W przeciwnym wypadku stracimy, a tym samym "zafałszujemy" rzeczywisty "kształt dźwięku"
... a więc
ASR.w D - przesuwamy o 1 ( dzieląc przez 2 !)
ASR.w D - przesuwamy o 1 ( dzieląc przez 2 !)
d.
Wysyłamy zawartość rejestru D na przetwornik cyfrowo-analogowy ... i to już koniec
Dodano po 15 [minuty]: 2. Jeśli posiadasz próbki i rejestry ośmiobitowe.
a.
pobierasz 4 kolejne próbki i wykonujesz następujące czynności
ASR.b A ; A=A/2 (ze znakiem)
ASR.b B ; B=B/2 (ze znakiem)
ADD.b A,B ; B=B+A
ASR.b C ; C=C/2 (ze znakiem)
ASR.b D ; D=D/2 (ze znakiem)
ADD.b C,D ; D=D+C
ASR.b B ; B=B/2 (ze znakiem)
ASR.b D ; D=D/2 (ze znakiem)
ADD.b B,D ; D=D+B
... I to by było chyba na tyle ... Myślę, że czegoś nie pomieszałem
Proponował bym jednak tą pierwszą metodę, ponieważ zajmuje mniej czasu procesora, a nawet wielkość rejestrów rozszerzył bym ( gdyby to było możliwe ) do 32 bitów, a wtedy bawiłbym się na 16 bitowych próbkach ...
Pozdrawiam