Skocz do zawartości

[Atmega8][C]Generowanie dźwięku


Skowron93

Pomocna odpowiedź

Witam. Od pewnego czasu nurtuje mnie jedna rzecz: jak generować dźwięk? Troszkę szukałem, ale znajdowałem same duuże projekty z wielkimi schematami i masa kodu, tymczasem zależy mi na prostym programiku dla zrozumienia. Mógłby on generować pikanie( 1 sekunda dźwięk, 1 sekunda przerwy i tak w kółko ). Głośniczek mam podłączony tak: PB0->rezystor 1k->głośniczek->gnd

Za wszelką pomoc z góry dziękuję 🙂

Skovv

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Ale zanim to zrobisz, obiecaj że jeszcze to przemyślisz, OK? Ludzie wynaleźli znacznie bardziej efektywne mechanizmy wywoływania zdarzeń okresowych niż pętle opóźniające. Już pomijam fakt, że Twój procesor ma zasoby sprzętowe do tego, by w ogóle nie zajmować się generacją dźwięku ale jeśli nie przewidziałeś tego w projekcie sprzętu i oprogramowania, możesz mieć je zajęte na coś innego.

Link do komentarza
Share on other sites

Tzn... pracuję nad pseudo konsolką do gier i dźwięku miało wcale nie być( w pierwszej wersji ), bo skupiłem się bardziej na najważniejszym( wyświetlanie, rozgrywka, system ), jednak ciągle męczyło mnie jak generować dźwięk :] Na razie chyba sobie wogle odpuszczę ten dźwięk, jeśli projekt wypali to wolałbym odtwarzać dźwięki z karty MicroSD aniżeli pisać jakieś brzęczące melodyjki 🙂

Link do komentarza
Share on other sites

Jeśli nie będzie to konsolka z wyjściem video do telewizora, gdzie rzeczywiście panują ostre reżimy czasowe i tam zrobić dobrze dźwięk jest naprawdę trudno, to mając tylko wyświetlacz LCD spokojnie zrobisz to (granie i dźwięk) na jednym procesorze. Dźwięk z karty SD też możesz robić różnie. Może to być MIDI i wtedy trzeba się trochę się narobić i raczej nie będzie bardzo polifoniczny, MP3 na AVR bez wsparcia zewnętrznego dekodera odtwarzać się nie da a z kolei WAV jest trywialny tylko że.. te wszystkie metody nie dają dźwięku proceduralnego. Grasz to co masz w pliku, co najwyżej jako muzyka w tle do generowanych na bieżąco FXów. Nie możesz muzyczki przyśpieszyć gdy akcja tego wymaga, nie możesz zmienić płynnie jej charakteru gdy robi się straszno itp. Może przeczytaj jakąś książkę o tworzeniu gier. Tam zwykle jest pokaźny rozdział o dźwięku bo to ważny etap projektu gry. Polecam "Game Coding Complete" MrMike'a - niezła cegła przygotowująca potencjalnych projektantów do zderzenia z niesamowitym światem rzeczywistych gier. Zainteresuj się też syntezą dźwięku - metodami i regułami. Będą Ci potrzebne gdy przyjdzie kogoś (w grze) zastrzelić, zrobić wiatr, kopnąć puszkę albo rozpalić ognisko. Tutaj w szczególności polecam "Designing Sound", opartą na powalającym systemie tworzenia dźwięków proceduralnych PureData. Ostrzegam jednak, że do tego trzeba przynajmniej liznąć trochę metod cyfrowego przetwarzania sygnałów.

Link do komentarza
Share on other sites

Szkoda że kolega nie przyznał się jaki procesor używa. Ja bym tam się na jego miejscu na WAVy itp. nie rzucał, a raczej poszukał archiwalnych metod z ZX Spectrum czy C64 (choć tam był specjalizowany układ),. Przecież już w tych czasach gry miały efekty dźwiękowe. Natomiast na pewno warto zastanowić się nad tym PWMem, czy synteza dzwonków z Nokii, jest wiele opracowań pod AVRy.

Przy czym należy pamiętać że programowanie gier to specyficzne programowanie, w którym stosuje się specyficzne podejście i metody. To bardziej sztuka oszukiwania zmysłów, niż klasyczne programowanie.

Link do komentarza
Share on other sites

Użyję ATmegi32( DIP40 ), do wyświetlenia LCD 162x64( z lispol.com ) no i własny, kozacki pad który już wykonałem 😃 Myślałem jeszcze nad wczytywaniem gry z MicroSD, przy okazji mógłbym tam upchnąć dźwięki do odtwarzania, tylko nie wiem co zrobić, czego użyć żeby był w miarę dobry dźwięk czytany z MicroSD i nie zamulający pracy procka ;/

Link do komentarza
Share on other sites

Mając 32Kb FLASH, i wiedzę o programowaniu gier (konkretnie sztuczkach), spokojnie obejdziesz się beż MMC/SD. Zerknąłem na ten wyświetlacz z lispola, i taki nieciekawy bo na taśmie chyba, co ci może skomplikować życie. Pamiętaj że jeszcze zawsze masz EEPROM w procku, który ma tę przewagę że da się go przeprogramować bez, konieczności kasowania FLASH.

Troszkę dużo RAMu ci pożre sam wyświetlacz bo aż 1296B czyli prawie 65%

Ogólnie jeżeli nie masz procesora który pozwala obsługiwać zewnętrzny RAM jak np. ATMega 162, gdzie możesz sobie ładować WAVy, tekstury itd. to raczej nośnik masowy mija się z celem.

Ale wszystko zależy jaka to ma być gra ?

Ale z SD/MMC 2KB RAM może okazać się niewystarczające. Pamiec ekranu 1,2KB, obsługa SD ok 0,7KB to daje 1,9KB, co chcesz teraz zrobić na ok 128 do 256B RAMu, który ci zostanie ?

PS. Nie twierdzę że się gry zrobić nie da, ale trzeba znać sztuczki na ominięcie problemów, jak np. zmniejszyć bufor dla wyświetlacza.

Link do komentarza
Share on other sites

No właśnie dlatego pierw chcę zrobić jak najprostszą konsolkę, jeśli ona wypali to zapewne dopiero wtedy zabiorę się za coś bardziej rozwiniętego :] Ta konsolka ma być do prostych kilku gierek typu: są 3 pasy. Jedziesz autem i zmieniasz pasy, by nie zderzyć się z innymi... 🙂 W przyszłości na 100% pomyślę nad prockiem który może korzystać z zewnętrznego ramu :]

Czemu mam mieć problemu z tym wyświetlaczem? Co jest nie tak w taśmach( jeszcze z takowymi nie miałem do czynienia.

Link do komentarza
Share on other sites

Taśmy lubią się złamać, jak będziesz tym często manewrował. Ja przynajmniej jeden wyświetlacz tak sobie załatwiłem, a pisze o tym bo są wyświetlacze o takiej jak twoja organizacji czyli 162x64, które maja złącze na goldpin, czyli takie jak LCD alfanumeryczne np. 16x2. Ja taki mam tylko ze 128x64 pix.

A chcesz skopiować "Ruskie" gierki z la 90, spokojnie to uciągniesz na M32, nawet taki wielki wyświetlacz ci nie potrzebny, z Nokii 3310 by wystarczył.

Ja kiedyś pisałem gry, przynajmniej interesowałem się żywo tematyką, jak by co mogę doradzić jak się zabrać za to czy owo. Coś tam nawet na PC upociłem jeszcze w PASCALU, węża w labiryncie i coś ala Asteroids tylko samolotem.

Link do komentarza
Share on other sites

Ja na PC pisałem wiele gierek, kilka silniczków w D3D i troszkę programików :] Od zawsze jednak interesowałem się składaniem układów elektronicznych, dlatego postanowiłem połączyć oba hobby w jeden projekt :]

Link do komentarza
Share on other sites

No pisanie gry na mikrokontroler to jednak trochę inna bajka, mocno ograniczane zasoby, konieczność działania często na poziomie sprzętu. Ja tam pisałem tylko w DOSie, choć szczerze mówiąc zawsze marzyłem o napisaniu Wolfensteina na C64, na pewno się da, bo jest nawet Doomowski silnik na ten komputerek.

AVRy nawet spokojnie się nadają, przy czym mile widziany byłby procesor z DMA jak XMEGA32 lub 64, żeby zautomatyzować pewne procesy. Szczególnie uprościłoby to obsługę dźwięku i grafiki.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.