@michal_zukowski, post #2
@MDW, post #1
@MDW, post #8
@Hexmage960, post #10
@MDW, post #4
Mając jakiś wielki np. WAVE jestem w stanie czymś wykonać na nim bardzo proste operacje?Interesuje Cię to od strony programowej (sam chciałbyś napisać kod), czy potrzebujesz gotowego narzędzia?
@Krashan, post #14
Interesuje Cię to od strony programowej (sam chciałbyś napisać kod), czy potrzebujesz gotowego narzędzia?
W pierwszym przypadku można zestawić kilka bloków Reggae, dzięki czemu WAVE zostanie zdekodowany i będziesz pracował po prostu na ciągu próbek (np. 16-bitowych). Manipulacja głośnością to nic innego jak mnożenie przez współczynnik.
@MDW, post #16
Tak zmodyfikowaną próbkę potem mogę zakodować przy pomocy Raggae znów do np. WAVE?Jak najbardziej.
O ile pixele jeszcze jakoś czuję to w świecie dźwięku jestem zupełnie zielony. Nawet sobie nie wyobrażam jak ciągi bajtów są zamieniane na dźwięk.Podobnie jak ciągi bajtów są zamieniane na obraz, tylko prościej. Wyobraź sobie obrazek, który ma tylko jedną linię pikseli, obrazek jest w odcieniach szarości i poziom tej szarości jest zapisany na 16 bitach. I masz dźwięk. Analogią regulacji wzmocnienia dźwięku jest regulacja kontrastu obrazu.
@Krashan, post #17
@MDW, post #18
Tylko nie rozumiem jak z tej jednej wartości w danym momencie można wyczarować różną głośność, inną barwę, wysokość dźwięku.Nie można. Tak samo jak z jednego piksela obrazka nie można wyczarować kompozycji, wrażenia perspektywy, faktury, znaczenia przedstawionych na obrazie symboli i figur. O ile obrazek potrzebuje dwóch wymiarów przestrzeni, o tyle dźwięk potrzebuje wymiaru czasu. Gdybyś miał analogowo zapisany wspaniały utwór muzyczny i odtworzył z niego 0,01 sekundy, to usłyszysz tylko trzask. Mimo tego, że w tym czasie ten utwór zapisany w jakości CD ma 441 próbek.
Co z tym zrobić żeby to zamieniło się w dźwięk płynący z głośnika?1. Możesz wziąć klasę Reggae memory.stream, połączyć ją z obiektem klasy audio.output, wykonać na tym ostatnim metodę MMM_Play().
@Krashan, post #19
dźwięk potrzebuje wymiaru czasu.
Możesz wziąć klasę Reggae memory.stream, połączyć ją z obiektem klasy audio.output, wykonać na tym ostatnim metodę MMM_Play().
@MDW, post #20
Domyślam się, że jest też coś w stylu "disk.stream"?Tak, file.stream dokładniej. Z tym, że to ma sens wtedy, jeżeli miałbyś na dysku taką surową tablicę int16. Jeżeli masz tam plik w jakimś typowym formacie, to wystarczy wywołać MediaNewObject() z nazwą pliku i "file.stream" jako typ strumienia danych. Wtedy Reggae samo rozpozna format, stworzy i połączy odpowiednie obiekty: strumienia, demultipleksera (czyta nagłówek, zbiera metadane) i dekodera (dekoduje strumień), umieszczając je w grupie i zwróci jeden gotowy obiekt, z którego można pobierać te int16 (albo floaty albo int32 jak sobie pan programista zażyczy).
@Krashan, post #21