-
Fototrend
Új hozzászólás Aktív témák
-
emitter
őstag
válasz emitter #1477 üzenetére
átírtam, szerintem most jónak kell már lennie, viszont még mindig az #1477-ben leírt hibát adja
nem is értem ezt a sort:
sa.sa_handler = sigchld_handler;
miközben a fv definíciója ez:
void sigchld_handler(int s){
while(wait(NULL) > 0);
}
hogyan hívhatok egy paraméteres fv-t paraméter nélkül az az érdekes, hogy ugyanez a fv-hívás működött régebben, mikor még osztály nélkül írtam meg a progit...
szerinted hol a hiba, mit javítsak?
és felraktam a táramra a legújabb server_oop.cpp-t.. -
emitter
őstag
válasz Jester01 #1484 üzenetére
a minimal playback program ([link]) kódját próbáltam egy-az-egyben futtatni, és egy sor hibát dobott:
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ gcc -Wall -o wav2 wav2.c
wav2.c:89: warning: return type defaults to 'int'
wav2.c: In function 'main':
wav2.c:127: warning: passing argument 3 of 'snd_pcm_hw_params_set_rate_near' makes pointer from integer without a cast
/tmp/ccIhl5R0.o: In function `main':
wav2.c:(.text+0x34): undefined reference to `snd_pcm_open'
wav2.c:(.text+0x4b): undefined reference to `snd_strerror'
wav2.c:(.text+0x87): undefined reference to `snd_pcm_hw_params_malloc'
wav2.c:(.text+0x9e): undefined reference to `snd_strerror'
wav2.c:(.text+0xd9): undefined reference to `snd_pcm_hw_params_any'
wav2.c:(.text+0xf0): undefined reference to `snd_strerror'
wav2.c:(.text+0x12d): undefined reference to `snd_pcm_hw_params_set_access'
wav2.c:(.text+0x144): undefined reference to `snd_strerror'
wav2.c:(.text+0x181): undefined reference to `snd_pcm_hw_params_set_format'
wav2.c:(.text+0x198): undefined reference to `snd_strerror'
wav2.c:(.text+0x1d7): undefined reference to `snd_pcm_hw_params_set_rate_near'
wav2.c:(.text+0x1ee): undefined reference to `snd_strerror'
wav2.c:(.text+0x22b): undefined reference to `snd_pcm_hw_params_set_channels'
wav2.c:(.text+0x242): undefined reference to `snd_strerror'
wav2.c:(.text+0x27d): undefined reference to `snd_pcm_hw_params'
wav2.c:(.text+0x294): undefined reference to `snd_strerror'
wav2.c:(.text+0x2c8): undefined reference to `snd_pcm_hw_params_free'
wav2.c:(.text+0x2da): undefined reference to `snd_pcm_prepare'
wav2.c:(.text+0x2f1): undefined reference to `snd_strerror'
wav2.c:(.text+0x33a): undefined reference to `snd_pcm_writei'
wav2.c:(.text+0x354): undefined reference to `snd_strerror'
wav2.c:(.text+0x393): undefined reference to `snd_pcm_close'
collect2: ld returned 1 exit status
---
ennek mi lehet az oka? ha int main()-re írom át, akkor is majdnem ugyanezeket dobja
pl. ''passing argument 3 of 'snd_pcm_hw_params_set_rate_near' makes pointer from integer without a cast'' - ha erre a függvényt így hívom, az jó?
snd_pcm_hw_params_set_rate_near (playback_handle, hw_params, (void*)44100, 0)
vagy honnan tudjam, hogy ez a fv milyen típusú mutatót vár 3. arg-ként?
és a többi undefined reference mit jelent?
---------
van egy másik próbálkozásom is, ez alapján: [link]
itt viszont vannak BYTE meg DWORD típusok, amit az ansi C nem ismer... ezek helyett írhatok CHAR, ill. INT típust, vagy ezeknek nem ugyanakkora a méretük?
[Szerkesztve] -
emitter
őstag
válasz Jester01 #1487 üzenetére
köszi, de sajna az asoundlib.h-ban csak újabb includok vannak, függvények nem... viszont egy (void*) casttal most szépen lefordul, nem warningol, viszont nem tudom, hogy milyen argot adjak meg indításkor:
...
if ((err = snd_pcm_open (&playback_handle, argv[1], SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
fprintf (stderr, ''cannot open audio device %s (%s)\n'',
argv[1],
snd_strerror (err));
exit (1);
...
szóval ezalapján szerinted mit adjak meg neki, és hova írjam, hogy milyen wavot játsszon le? -
emitter
őstag
válasz Jester01 #1490 üzenetére
de nekem olyan progi kéne, ami _tényleg_ lejátsza a fájlt!
akkor a minimal-playback nem jó, helyette ott van ez a wav-loader [link]
viszont sajna ez is hibákat dob:
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ gcc -Wall -o wav1 wav1.c
wav1.c: In function 'main':
wav1.c:36: warning: pointer targets in passing argument 1 of 'strcmp' differ in signedness
wav1.c:38: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
wav1.c:41: warning: pointer targets in passing argument 1 of 'strcmp' differ in signedness
wav1.c:44: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
wav1.c:45: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
wav1.c:46: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
wav1.c:47: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
wav1.c:48: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
wav1.c:49: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
wav1.c:50: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
itt a kódom: [link]
ha ez a hivatalos kód, akkor miért hibázik ennyit? castoljam az összes kérdéses részt? -
emitter
őstag
válasz Jester01 #1492 üzenetére
oké, köszi
már csak 2 warning maradt, azokkal egyelőre nem foglalkozom, viszont az id 4 bájtos karaktertömbbe egyáltalán nem csak az első négy bájt kerül, hanem valami szemét is, ugyanis kiíratva ezt kapom:
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ gcc -Wall -o wav1 wav1.c
wav1.c: In function 'main':
wav1.c:39: warning: pointer targets in passing argument 1 of 'strcmp' differ in signedness
wav1.c:44: warning: pointer targets in passing argument 1 of 'strcmp' differ in signedness
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./wav1
RIF˛˘żą˘żŘą˘ż˘^ޡ
Error: not a RIFF file
ahol az id értéke mindig ''RIF...'', azaz az első 3 karakter állandó, utána random szemét
kód: [link]
----
a minimal-playbacknél pedig ez van:
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./wav2 hw:0,0
Szegmens hiba
kód: [link]
a lejátszást akkor hogyan oldhatom meg? a végén a for ciklusban kell valamit csinálnom a bufferral - mit is pontosan? melyik fv küldi a buffer tartalmát a hangkártyának? -
emitter
őstag
válasz Jester01 #1494 üzenetére
wav1.c:
most tettem a 4 karakter után egy lezáró \0-t is, de most is szegmens hibázik [link]
---
wav2.c:
gdb-t hogyan kell használni? ad egy promptot, oda mit írjak? (előtte -g-vel fordítottam a kódot)
egyébként mit értesz az alatt, hogy nem a wav-ból veszi a paramétereket a progi? ha nem abból, akkor honnan?
szóval ha jól értettem, akkor a snd_pcm_writei elé kell egy fread, ami a bufba beolvassa a wav tartalmát, kivéve az első x (44?) bájtot? -
emitter
őstag
válasz Jester01 #1496 üzenetére
az a negyedik karakter: id[4] nem
gdb még mindig nem okés
(gdb) set args -Wall -g -lasound -o wav2
(gdb) run gcc wav2.c
Starting program: gcc wav2.c
No executable file specified.
Use the ''file'' or ''exec-file'' command.
(gdb)
???
mit nem csinálok jól?
---
a bedrótozás azt jelenti, hogy megpróbálja a legáltalánosabb paraméterekkel lejátszani a wavot? -
emitter
őstag
válasz Jester01 #1498 üzenetére
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./wav2 hw:0,0
Szegmens hiba
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ gdb wav2
GNU gdb 6.3-debian
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type ''show copying'' to see the conditions.
There is absolutely no warranty for GDB. Type ''show warranty'' for details.
This GDB was configured as ''i486-linux-gnu''...Using host libthread_db library ''/lib/tls/i686/cmov/libthread_db.so.1''.
(gdb) set args hw:0,0
(gdb) run
Starting program: /home/emitter/BME_nemet/Prog2/Nagyhazi/wav2 hw:0,0
[Thread debugging using libthread_db enabled]
[New Thread -1212152128 (LWP 9322)]
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1212152128 (LWP 9322)]
0xb7ea183c in snd_pcm_hw_param_set_near () from /usr/lib/libasound.so.2
(gdb) bt
#0 0xb7ea183c in snd_pcm_hw_param_set_near () from /usr/lib/libasound.so.2
#1 0xb7e98699 in snd_pcm_hw_params_set_rate_near () from /usr/lib/libasound.so.2
#2 0x08048a59 in main (argc=2, argv=0xbf935a74) at wav2.c:44
(gdb) quit
The program is running. Exit anyway? (y or n) y
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$
a wav2 binárist az elején jó argumentummal indítottam?
mi az hogy szegmens hiba?
neked ez a progi működik?
itt van a jelenlegi wav2.c: [link] -
emitter
őstag
válasz Jester01 #1504 üzenetére
kirrály!!! megszólalt a hangszóróm! csak az egyetlen dolog ami beárnyékolja az örömömet, hogy végre sikerült hangot lejátszanom - az, hogy csak egy hangon zümmög, valami a bufferral nincs rendben
megnéznéd a wav2.c-t?
mekkora buffert érdemes foglalni neki, és milyen gyakran érdemes a kártyára küldeni a hangot? -
emitter
őstag
válasz emitter #1505 üzenetére
nagyon nem vagyok tisztában azzal, hogy végülis egy wavban milyen infó hol található (fejlécre gondolok), és hogy mi történik akkor, ha nem a neki megfelelő paraméterekkel játszom le... ez utóbbiról azt olvastam, h kárt is okozhat akár, szernecsére nekem csak idegesítő zaj jött a hangszórómból
itt találtam egy wav-felépítést: [link]
viszont nekem így néz ki a wav fájlom (eddig kettőt néztem meg, mindkettő fejléce azonos hosszú):
RIFF~DÝ^@^@WAVEfmt ^P^@^@^@^A^@^A^@^Q+^@^@''V^@^@^B^@^P^@data...
szóval a 40.-ik karakternél kezdődnek a tényleges adatok. Egyébként attól, hogy véletlenül a 44. karaktertől kezdem el lejátszani, attól még kéne szólnia, nem? csak legfeljebb ''kicsit'' később kezdve
segítsetek, mert egyedül nem tudok túljutni ezen a dolgon
ui: és arról sem találtam még infót, hogy mekkora buffert ajánlatos fenntartani, ez gondolom megegyezik azzal az adatmérettel, amit egyszerre kiküld a hangkártyának - ez mekkora legyen? próbálkoztam már 1-16384 bájtig, egyik se jött be, csak zümmögés...
mod: a wav fejlécénél ''fmt'' után egy szóköz van, és természetesen az egész fejléc egy sorban van
és felraktam a legújabb wav2.c-t
[Szerkesztve] -
emitter
őstag
válasz Jester01 #1508 üzenetére
nem értem ezt a paraméterezést!
pl. van egy PCM 16bit mono 11025Hz-es wavom, ezesetben mit mekkora értékűre állítsak?
snd_pcm_hw_params_set_format (playback_handle, hw_params, SND_PCM_FORMAT_S16_LE)
snd_pcm_hw_params_set_rate_near (playback_handle, hw_params, 11025, 0)
snd_pcm_hw_params_set_channels (playback_handle, hw_params, 2)
snd_pcm_writei (playback_handle, buf, 128)) !=128)
vagy egy másik wavnál: PCM 8bit mono 44100Hz - itt mekkorára állítsam a fentieket?
vagy tudnál adni egy linket, ahol ezek normálisan le vannak vezetve, hogy hova mekkora érték kell?
amúgy lejátsza a cuccot, csak kicsit érdekes hangon/gyorsasággal
és nem hw:0,0-val, hanem csal plughw:0,0-val (ez asszem konvertál, ha nem jók a paraméterek) -
emitter
őstag
válasz Jester01 #1510 üzenetére
hát eléggé nehezen tudtam rájönni a megoldásra, de szerencsére megvan a dolog
akkora buffer kell neki, amekkora a mintavét-freki kétszerese (mono 16bit esetben)
szóval most szépen lejátsza a wavokat, viszont lejátszás után ilyeneket ír ki:
write to audio interface failed (Unknown error 44096)
vagy
Szegmens hiba
a kód: [link]
egyébként azt nem nagyon értem, hogy hogyan tudja a wavot úgy lejátszani, hogy csak egyszer fread()-eli, és utána egyszer hívja az snd_pcm_writei()-t tehát nem is kell az egész köré a while(!feof(wav_handle)) {...}
ezt nem értem szóval hogyan fér bele a ~44kb-os pufferembe az egész hanganyag??
ui: most felraktam a puffer méretét 88200-ra, így szépen hiba nélkül lefut... viszont így egy nagyobb wav-stream esetében hogyan fogom megoldani tudni a álózaton való átküldést, ha ez egyszerre akarja kinyomni a hangkártyának a puffer tartalmát ... erre mi lehet a megoldás szerinted? -
emitter
őstag
válasz emitter #1511 üzenetére
az mitől lehet, hogy a progim más formátum-hosszt ismer fel egy adott wavnál, mint a 'file' progi
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./wav2 rexi.wav
Begin fileposition: 0
RIFF
10676
WAVE
fmt
format_length: 16
format_tag: 1
channels: 1
sample_rate: 44100
avg_bytes_sec: 44100
block_align: 0
bits_per_sample: 1
...
----------
emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ file rexi.wav
rexi.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 8 bit, mono 44100 Hz
----------
és ezáltal persze rosszul is játsza le a rexi.wav-ot..
itt a kibővített kód [link], ugyanis átírtam, hogy ő olvassa ki a wav headerjéből az infókat... mindezt ezen az oldalon találtam: [link]
az az érdekes, hogy az írója szerint a 38.-ik bájttól már jön a wavban a 'data', szóval a hasznos rész, ezzel szemben az én wavomnál csak a 41.-ik bájt az első adatbájt
akkor a maradék 3 bájt mi lehet?
asszem erre az írásra mondtad Jester, hogy nem tudja a fazon, mit is csinál valójában, ez lehet, mert elég zavaros a dolog, pl szerinte köv. sor
fread(&bits_per_sample, sizeof(short), 1, fp); //8 bit or 16 bit file?
egy mintavétel méretét adja meg bitben. Ehhez képest nekem bits_per_sample: 1
mit javítsak a kódon, hogy jól felismerje a wav sample-méretét? -
emitter
őstag
válasz emitter #1512 üzenetére
tárgytalan a dolog, tényleg nagyon sz@r sorrendben és teljesen összevissza volt leírva a wav-file felépítése hogy lehet ilyen munkát kiadni valakinek a kezéből fejből, elméletben írta és soha ki nem próbálta
úgyhogy most szépen fut a progim, felismeri a wavokat - minden OK! [link]
most már csak annyi a problámám, hogy a lejátszás végén elég sokáig tart (5-6 mp), míg kilép a progiból... ez vajon mitől lehet?
mégegy dolog: szeretném kibővíteni majd a tudását mp3-ra is, tudtok mondani olyan libet, ami mp3-at tud dekódolni? mert eddig a neten sajna nem sok mindent találtam, persze keresek tovább, de azért ha tudtok kapásból ilyet, az jól jönne
emitter
mod: Jester, köszi szépen az infót, sokat segítettél ja, a kódom mostantól nem wav2.c, hanem a linkelt
[Szerkesztve] -
emitter
őstag
válasz emitter #1515 üzenetére
méretesebb (100kb-nál nagyobb) wavoknál nem jó a lejátszás a buffer méretét nem sikerül eltalálni. Az a baj, hogy eddig sehol nem találtam normális leírást arról, hogy mekkora is kell legyen a puffer mérete - ami gondolom a mintavételi frekitől/ minták méretétől/ csatornák számától függ.
általában elkezdi lejátszani, és kis idő után - az első puffer kiírása után - elkezd akadozni, recsegni, stb...
most így néz ki a kód: [link]
amúgy és azt sem értem, hogy bármelyik wav végén mindig azt írja ki, hogy ''Hiba fajlolvasas kozben!'' Egy tipp: ez attól lehet, hogy a puffer mérete nem egész-számszorosa a hang-adat méretének, ezért picit hamarabb abbahagyja a lejátszást? Mondjuk ez néha hallható is, hogy nem fejezi be teljesen a wavot. -
emitter
őstag
egy folyamat egyszerre csak egy porton tud kommunikálni?
azt szeretném valahogy megoldani, hogy a kliensprogim ne csak a wav-streamet küldje át a szervernek, hanem egyfajta vezérlőjeleket is, amivel tudnám utasítani mondjuk a wav megállítására, új wav lejátszására, stb.
mindezt persze valahogy párhuzamosan kéne megcsinálni, hogy épp lejátszás közben is tudjak más parancsot küldeni a szervernek.. -
emitter
őstag
válasz emitter #1531 üzenetére
hát nem teljesen világos ez a select:
ha 2 fájlleíró közül akarok selectelni, azt hogyan - szerver- és kliensoldalon is kell 1-1 select?
szerveren (ez fogadja az adatot) readfds, kliensen meg writefds?
a select milyen gyakran nézi meg, hogy melyik bemeneten jött adat?
és egyáltalán szintaktikailag hogyan kell használni? ez így jó lesz:
while(1){
select(sockfd1+1, &readfds, NULL, NULL, NULL);
if(IS_SET(sockfd1, &readfds)){...} //sockfd1 fogad adatot
else{...} //sockfd2 fogad adatot
} -
emitter
őstag
válasz emitter #1532 üzenetére
fel!
szóval az elképzelésem mégegyszer a következő:
-kliensprogi wav-játszás közben figyeli a select()-tel a standard inputot, ha mondjuk azt írom, hogy ''pause'', akkor a szervernek küld egy pasue-nek megfelelő vezérlőjelet, mire a szerver leállítja a wav-játszást, stb.
Szóval lenne két socketem, egy vezérlő- és egy adat-socket. Odáig rendben, hogy mind kliens-, mind szerveroldalon kell 1-1 select a fő-ciklusban, a kérdés, hogy konkrétan hogyan valósítsam meg a dolgot...
nem értem pontosan, hogyan is működik a select()... ez itt a baj -
emitter
őstag
válasz Miracle #1535 üzenetére
majdnem teljesen igazad van, de most már nem tudok ettől a vállalt feladattól visszalépni, és nem is igazán akarok, valahogy csak kiizzadom még van idő...
az lehet, hogy a select-nek nincs man-ja a gépemen? (2.6.12 kernel, g++ elfogadja, és működik is a programban), de man select nem működik
kerestem guglin egy csomó helyen a selectnek bármiféle doksiját, de nem találtam semmi jót... szóval ha tudtok, nyugodtan kisegíthettek ilyesmivel - persze közben még én is tovább keresek -
emitter
őstag
válasz emitter #1536 üzenetére
Úgy látom, mégsem biztos, hogy jó a select() az én helyzetemben, ugyanis ugye minden egyes ciklusiterációban meg kéne néznie a selectnek, hogy éppen melyik socket küld neki adatot (a vezérlő-, vagy az adat-socket), és ha utóbbi küldi, akkor fogadni, belerakni a pufferba, majd újra előlről kezdeni a figyelést... nem lesz ez túl lassú folyamat?
Ezt csak azért kérdezem, mert gőzöm sincs, hogy a processzor szempontjából ez mennyi időt vesz igénybe, nem fog-e egy idő után kiürülni a puffer az ''adatátvitel lassúsága'' miatt nemtudom, érhető-e a kétségem?
vagy inkább azt a megoldást válasszam, hogy az adatokat becsomagolom, mindig megvizsgálom a fejlécét, és ha vezérlőcsomag érkezik, akkor azalapján döntök a lejátszásról, stb...
melyik lenne a gyorsabb megoldás - vagy mindkettő megfelelő nekem? -
emitter
őstag
getch() miért nem működik nekem linuxon?
olvastam, hogy a curses.h-val meg lehet csinálni, de hogyan...
nekem ilyet ír ki #include ''curses.h'' mellett a getch()-re:
emitter@LAPTOP:~/sdl-talk$ gcc -Wall -lSDL -lSDL_mixer -o mixer-demo mixer-demo.c
/tmp/cc0ENjYn.o: In function `main':
mixer-demo.c.text+0x86): undefined reference to `stdscr'
mixer-demo.c.text+0x8f): undefined reference to `wgetch'
collect2: ld returned 1 exit status
milyen opcióval fordítsam, hogy jó legyen?
thx -
emitter
őstag
és egy másik kérdés
nem nagyon értek sajnos a headre-fájlokhoz, ezért fordulok ide:
van ez az sdl_mixer.h [link]
ebben pedig a mixloadmus() fv
extern DECLSPEC Mix_Music * SDLCALL Mix_LoadMUS(const char *file);
viszont mixer.h a beinklúdolt többi headerjében nem igazán találom a fv definícióját... pedig szeretném megnézni, mit csinál pontosan - hol találhatom meg szerintetek ezt?
bocs ha láma a kérdés, és köszi előre is!
ui. egyébként azt akarom megtudni, melyik fv olvassa be - gondolom egy pufferből - a lejátszandó streamet, ugyanis ez az sdl (ha jól láttam) közvetlenül játsza a zenét, nem enged pufferszinten manipulálni - nekem pedig a hálózati átvitelhez pont ez kéne
mod: izé, kicsit utánajártam az előző kérdésemnek és -lncurses-sel jól efordul, viszont a getch() valami miatt nem működik nem csinálja azt, amit kéne, még ha utána entert ütök, se..
[Szerkesztve] -
emitter
őstag
válasz Jester01 #1551 üzenetére
ez alapján próbálkoztam, már működik a getch() , csak akadtak egyéb problémák...
[link]
...
initscr();
cbreak();
do{
printw(''Pause - 'p' '');
printw(''\nResume - 'r' '');
printw(''\nStop - 's'\n'');
refresh();
do{
switch( c=getch() ){
case 'p' :
printf(''\nPaused\n'');
Mix_PauseMusic();
break;
case 's' :
printf(''\nStopped\n'');
Mix_HaltMusic();
exit(1);
break;
default :
break;
}
}
while(c!='r');
Mix_ResumeMusic();
}
while (Mix_PlayingMusic());
endwin();
...
szóval ez a kódom, de nagyon érdekes dolgokat csinál: ha 's'-t nyomok, akkor leállítja ugyan, kilép a progiból, csak:
- a promptot behúzza egy tabbal, és nem látom, amit beírok utána
- amit látatlanba írok parancsot, végrehajtja, de minden egyes kiírást eltol egy tabbal..
- ctrl+c-re sem lép ki ebből a hülyeségből, egy újabb tabbal odébbrakja a promptot
- csak exit-re lép ki a konzolból
ez mitől lehet??? -
emitter
őstag
válasz Jester01 #1557 üzenetére
köszi!
egy újabb kérdés, ezt kapom fordításkor:
emitter@LAPTOP:~/Letoltesek/sdl-talk-1-examples$ gcc -Wall -lncurses -lSDL -lSDL_mixer -o mixer-demo mixer-demo.c
mixer-demo.c: In function 'LoadMusic':
mixer-demo.c:128: warning: implicit declaration of function 'Mix_LoadMUS_RW'
mixer-demo.c:128: warning: assignment makes pointer from integer without a cast
mixer-demo.c: [link]
ezt a kódrészletet, amivel pufferből mix_music-ot csinálok, itt találtam: [link]
a srácnak se működött valami miatt, de nem értettem, hogy mi is pontosan a megoldás, amit válaszoltak neki.. -
emitter
őstag
válasz Jester01 #1559 üzenetére
no és én most mit csináljak ezzel?
music = (Mix_Music*) Mix_LoadMUS_RW(rw); // ---itt van a forditasi hiba---
ezt írtam, de ettől még éppúgy implicit deklarációra hivatkozik...
el tudnád magyarázni az utolsó link alapján, hogy a srácnak hogyan sikerült megoldani hasonló problémáját? sajna nekem nem világos a válaszokból ([link])
köszi -
emitter
őstag
Fordítási hibák, valszeg én vagyok a béla, de mi a rák van ezzel
emitter@LAPTOP:~/Letoltesek/sdl-talk-1-examples$ gcc -o mixer-music mixer-music.c -Wall -lncurses -lSDL -lSDL_mixer -I/usr/include/SDL
mixer-music.c: In function 'Mix_LoadMUS_RW2':
mixer-music.c:187: error: invalid application of 'sizeof' to incomplete type 'Mix_Music'
mixer-music.c:192: error: dereferencing pointer to incomplete type
mixer-music.c:280: error: dereferencing pointer to incomplete type
mixer-music.c:282: error: dereferencing pointer to incomplete type
a kérdéses sorok a kódomban:
187: music = (Mix_Music *) malloc(sizeof(Mix_Music));
192, 280, 282: music->error = 0;
---
megnéztem, a patchelt SDL-példakódban a MixMusic* típus így néz ki:
static Mix_Music * volatile music_playing = NULL;
ezalapján hol lehet a hiba?
köszi!
ui: mindez egy hivatalos SDL-példakódban volt..
[Szerkesztve] -
emitter
őstag
válasz Jester01 #1564 üzenetére
hát azt meg honnan tudjam, h jók-e a headerek
egyébként igazad van, ez tényleg csak egy mutató, de a progimban is mindenhol csak ilyen mutató típusú változókat deklaráltam, szóval elvileg ezzel nem kéne porbléma legyen..
ha átírom a
187: music = (Mix_Music *) malloc(sizeof(Mix_Music));
sort
187: music = (Mix_Music *) malloc(sizeof(Mix_Music*));
-ra, akkor már nem ad hibát erre, persze a, másik 3 hiba még marad..
egyébként mit jelent az, h dereferncing pointer.. szóval a többi hibaüzi mi miatt lehet?
ja, és ha vissza akarnám szedni a patchelt SDL-mixer libet, visszaállítani a régi hivatalost, akkor mit kell csnálnom? csak simán csomagból felrakom a régit? -
emitter
őstag
válasz emitter #1565 üzenetére
hát végülis a 3 music->error-t kikommenteztem (jó kis favágó módszerrel), a
187: music = (Mix_Music *) malloc(sizeof(Mix_Music*));
sort pedig így átartam, most lefordul, csak hang nem jön...
megkérhetnék valakit, hogy próbálja meg linuxon lefordítani, megy-e neki? [link]
thx
(kell hozzá SDL-mixer, meg -dev-files, meg asszem smpeg-lib is) -
emitter
őstag
válasz Jester01 #1574 üzenetére
mod: frissítettem a kódomat a weblapomon..
asszem megtalűltam a headert: [link]
így inklúdoltam: #include ''music.h'' (azonos könyvtárban van a music.c-vel), de hibaüzit dob, hogy akadnak a music.h fv-ei más headerekével:
gcc -o music music.c -Wall -lncurses -lSDL -lSDL_mixer -I/usr/include/SDL
...
/usr/local/include/SDL/SDL_mixer.h:529: error: conflicting types for 'Mix_FadingMusic'
music.h:941: error: previous definition of 'Mix_FadingMusic' was here
/usr/local/include/SDL/SDL_mixer.h:530: error: conflicting types for 'Mix_FadingChannel'
/usr/include/SDL/SDL_mixer.h:532: error: previous declaration of 'Mix_FadingChannel' was here
/usr/local/include/SDL/SDL_mixer.h:567: error: conflicting types for 'Mix_GetChunk'
/usr/include/SDL/SDL_mixer.h:569: error: previous declaration of 'Mix_GetChunk' was here
....
stb
egy másik srác kipróbálta ugyanígy, neki nem akadtak, mi lehet a probléma?
----------------
megpróbáltam átrakni a Mix_Music definícióját a music.c kódomba:
struct Mix_Music {
Mix_MusicType type;
union {
#ifdef CMD_MUSIC
MusicCMD *cmd;
#endif
#ifdef WAV_MUSIC
WAVStream *wave;
#endif
#ifdef MOD_MUSIC
UNIMOD *module;
#endif
#ifdef MID_MUSIC
#ifdef USE_TIMIDITY_MIDI
MidiSong *midi;
#endif
#ifdef USE_NATIVE_MIDI
NativeMidiSong *nativemidi;
#endif
#endif
#ifdef OGG_MUSIC
OGG_music *ogg;
#endif
#ifdef MP3_MUSIC
SMPEG *mp3;
#endif
} data;
Mix_Fading fading;
int fade_step;
int fade_steps;
int error;
};
---
ha ezt a main elé berakom, így ahogy van, akkor jónak kéne lennie, nem? pedig nem jó, a fordító ugyanazt a hibát adja...
emitter@LAPTOP:~/Letoltesek/sdl-talk-1-examples$ gcc -o music music.c -Wall -lncurses -lSDL -lSDL_mixer -I/usr/include/SDL
music.c: In function 'myMix_LoadMUS_RW':
music.c:165: error: invalid application of 'sizeof' to incomplete type 'Mix_Music'
[Szerkesztve] -
emitter
őstag
válasz Jester01 #1580 üzenetére
nekem pedig nem jó
mind1, leszedtem libsdl-mixer1.2-dev csomagot, mindenhol beírtam egy struct-ot, elvileg jó kéne legyen, de nem:
(nem inklúdoltam a nemlétező SDL_mixer.h-t)
emitter@LAPTOP:~/Letoltesek/sdl-talk-1-examples$ gcc -o music music.c -Wall -lncurses -lSDL -lSDL_mixer -I/usr/include/SDL
music.c:24: error: syntax error before 'Mix_MusicType'
music.c:24: warning: no semicolon at end of struct or union
music.c:50: error: syntax error before 'fading'
music.c:50: warning: type defaults to 'int' in declaration of 'fading'
music.c:50: warning: data definition has no type or storage class
music.c:54: error: syntax error before '}' token
music.c: In function 'main':
music.c:72: warning: implicit declaration of function 'Mix_OpenAudio'
music.c:72: error: 'MIX_DEFAULT_FREQUENCY' undeclared (first use in this function)
music.c:72: error: (Each undeclared identifier is reported only once
music.c:72: error: for each function it appears in.)
music.c:73: error: 'MIX_DEFAULT_FORMAT' undeclared (first use in this function)
music.c:74: error: 'MIX_DEFAULT_CHANNELS' undeclared (first use in this function)
music.c:82: warning: implicit declaration of function 'Mix_PlayMusic'
music.c:85: warning: implicit declaration of function 'Mix_PlayingMusic'
music.c:90: warning: implicit declaration of function 'Mix_CloseAudio'
music.c: In function 'LoadMusic':
music.c:135: error: 'Mix_Music' undeclared (first use in this function)
music.c:135: error: syntax error before ')' token
music.c: In function 'myMix_LoadMUS_RW':
music.c:154: warning: implicit declaration of function 'Mix_SetError'
music.c:167: error: 'Mix_Music' undeclared (first use in this function)
music.c:167: error: syntax error before ')' token
emitter@LAPTOP:~/Letoltesek/sdl-talk-1-examples$
-----------
ha pedig inklúdolom a nemlétező headert, akkor csak ennyit ad:
emitter@LAPTOP:~/Letoltesek/sdl-talk-1-examples$ gcc -o music music.c -Wall -lncurses -lSDL -lSDL_mixer -I/usr/include/SDL
music.c: In function 'main':
music.c:82: warning: passing argument 1 of 'Mix_PlayMusic' from incompatible pointer type
music.c: In function 'LoadMusic':
music.c:135: warning: assignment from incompatible pointer type
music.c: In function 'myMix_LoadMUS_RW':
music.c:167: error: invalid application of 'sizeof' to incomplete type 'Mix_Music'
music.c:167: warning: assignment from incompatible pointer type
emitter@LAPTOP:~/Letoltesek/sdl-talk-1-examples$ -
emitter
őstag
válasz Jester01 #1583 üzenetére
emitter@LAPTOP:~/Letoltesek/sdl-talk-1-examples$ gcc -o music music.c -Wall -lncurses -lSDL -lSDL_mixer -I/usr/include/SDL -I /usr/local/include/SDL/
music.c: In function 'main':
music.c:83: warning: passing argument 1 of 'Mix_PlayMusic' from incompatible pointer type
music.c: In function 'LoadMusic':
music.c:136: warning: assignment from incompatible pointer type
music.c: In function 'myMix_LoadMUS_RW':
music.c:168: error: invalid application of 'sizeof' to incomplete type 'Mix_Music'
music.c:168: warning: assignment from incompatible pointer type
emitter@LAPTOP:~/Letoltesek/sdl-talk-1-examples$
pedig leszedtem a csomag SDL-t, majd újraraktam forrásból a patchelt SDL-t, és forgattam volna a kódomat... [link] -
-
emitter
őstag
vszeg azert mert extern..
az extern arra valo hogy megadod a fv interfeszet, es jelzed hogy ennek nem lesz implementacioja a forrasaid kozott. viszont a forrasodban ettol fuggetlenul tudod hasznalni.
és ez mit jelent az én esetemben? szóval van egy ilyen extern fv:
extern DECLSPEC Mix_Music * SDLCALL Mix_LoadMUS(const char *file);
ezt hol definiálhatják? mert működik ez a fv, csak nem találom sehol a definícióját...
se includolt headerekben, máshol meg hol keressem?
tanácstalan vagyok..
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- Samsung Galaxy S21+ 5G 256GB Phantom Silver
- HP 255 G8 15.6" FHD IPS Ryzen 7 5700U 16GB DDR4 512GB NVMe SSD gar
- Latitude 7420 14" FHD IPS i7-1185G7 16GB 256GB NVMe ujjlolv IR kam., gar
- FULL HD Carbon DELL Latitude 7400/7490(Touch) Core I7-8665U 8x4.8GHz 256/512Gb SSD WIN11 Gar Laptop
- FULL HD Lenovo Thinkpad T490/Touch Core I5/I7 256/512Gb M.2 SSD Nvidia MX 250 WIN11 Gar Laptop
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Ozeki Kft.
Város: Debrecen