Annonces Google
Serveur IRC
Serveur : irc.portlane.se
Canal : #AmigaNG
Activité du Site

Pages vues depuis 25/07/2007 : 25 318 637

  • Nb. de membres 187
  • Nb. d'articles 1 270
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» question multiview

question multiview#1380

8Contributeur(s)
sinisrusTarzinCreolsthellierzzd10hElwoodLioAmiDARK
3 Modérateur(s)
K-LElwoodcorto
zzd10h zzd10hicon_post
sinisrus sinisrusicon_post
As-tu reçu les nouvelles icon guillaume?
--
Coin coin... amitheme.amiga-ng.org
Sam460 1,15Ghz - OS4.1FE - Radeon Saphir HD7750 R7 250E - 2Go de ram
zzd10h zzd10hicon_post
Oui, oui tony,
Je les ai reçus, je pensais t'avoir répondu par mail...mais je ne le retrouve pas :-?

Ils sont superbes, sobres, top !

Merci... Et désolé pour la non-réponse (je vais me mettre à YAM pour voir)
AmiDARK AmiDARKicon_post
zzd10h,
J'ai téléchargé ton dernier exemple utilisant les signaux et ... impossible d'avoir un son.
Je précise, j'ai testé mes .WAV avec ton prog et ils fonctionnent ! Idem avec MultiView.

Alors je copie colle ce qui pourrait servir d'informations. Peut-être me suis-je gourré en copiant/collant/modifiant pour correspondre à mon moteur :

Ma définition de datas :
#define?END_SOUND_SIGNAL?(1L<<19)

#ifdef?__MORPHOS__
??#define?uint32?unsigned?int
??#define?uint16?unsigned?short
??#define?int32?long
?#endif


struct?DTSoundMessage
{
??struct?Message?sound_Msg;
??char?*soundMessage?;
};

/*?Variables?globales?au?fichier?lib?*/
struct?AudioStruct{
??BOOL?Exist;??????????????????//?Object?Exist??
//??APTR?ObjectPTR;????????????//?Object?buffer?pointer?useless.?now?use?zzd10h?sample.
??int Loop;???????????????????//?Is?loop?enabled?or?not??
??int Playing;????????????????//?Sound?is?actually?played?or?not.
??char*?FileName;??????????????//?Pointer?to?the?sound?filename.
??int?Audio3D;?????????????????//?Flag?for?3D?Sound?/?no?3D?Sound.
??//?eXtended?for?the?Audio?system?from?zzd10h?//
??char?*?nom_msgport;
??APTR?dtobject;
??ULONG?res;
??uint32?longueur;
??LONG?duree;
??int32?samplesParSec;
??int?nb_cycle;
??int?nb_cycle_temp;
??int8?balance;
??int16?volume;
??int16?increment;
??ULONG?dores;
??struct?MsgPort?*?DTMsgPort;
?};
struct?AudioStruct?AESound[?256?];
struct?dtTrigger?mydtt;

int?AHIAudioInitialized;


Ma fonction pour charger un fichier audio datatype :
void?DELoadSound(?char?*szFilename,?int?iID?){
??if?(?iID?>?0?){
????if?(?iID???????if?(?DESoundExist(?iID?)?==?0?){
????????if(?DEFileExist(?szFilename?)?==?TRUE?){
??????????AESound[?iID?].balance?=?0;
??????????AESound[?iID?].volume?=?64;
??????????#if?defined(?__amigaos4__?)
???????????????AESound[?iID?].dtobject?=?IDataTypes->NewDTObject(?(STRPTR)szFilename,
????????????????????????????????????????????????????????????????DTA_GroupID,?GID_SOUND,
????????????????????????????????????????????????????????????????SDTA_Pan,?AESound[?iID?].balance,
????????????????????????????????????????????????????????????????SDTA_Volume,?AESound[?iID?].volume,
????????????????????????????????????????????????????????????????SDTA_SignalTask,?(ULONG)IExec->FindTask(NULL),
????????????????????????????????????????????????????????????????SDTA_SignalBitMask,?END_SOUND_SIGNAL,
????????????????????????????????????????????????????????????????TAG_END?);
???????????#else
????????????AESound[?iID?].dtobject?=?NewDTObject(?(STRPTR)szFilename,
?????????????????????????????????????????????????????DTA_GroupID,?GID_SOUND,
?????????????????????????????????????????????????????SDTA_Pan,?AESound[?iID?].balance,
?????????????????????????????????????????????????????SDTA_Volume,?AESound[?iID?].volume,
?????????????????????????????????????????????????????SDTA_SignalTask,?(ULONG)FindTask(NULL),
?????????????????????????????????????????????????????SDTA_SignalBitMask,?END_SOUND_SIGNAL,
?????????????????????????????????????????????????????TAG_END?);
???????????#endif
??????????if?(?AESound[?iID?].dtobject?!=?NULL??){
????????????AESound[?iID?].Exist?=?TRUE;
????????????AESound[?iID?].Loop?=?0;
????????????AESound[?iID?].Playing?=?0;
????????????AESound[?iID?].Audio3D?=?0?;?//?This?sound?IS?NOT?a?3D?Audio?sound.
????????????AESound[?iID?].FileName?=?LCreateString(?256?);
????????????LCopyString(?szFilename,?AESound[?iID?].FileName?);
????????????AESound[?iID?].res?=?IDataTypes->GetDTAttrs(?AESound[?iID?].dtobject,
?????????????????????????????????????????????????????????SDTA_Pan,?&AESound[?iID?].balance,
?????????????????????????????????????????????????????????TAG_END?);
????????????//?Creation?du?message?port?de?l'exemple?de?zzd10h?//
????????????AESound[?iID?].nom_msgport?=?DEAppend(?"DataT_SDPort_",?DEStrI(?iID?)?);
????????????#if?defined(?__amigaos4__?)
??????????????AESound[?iID?].DTMsgPort?=?IExec->AllocSysObjectTags(?ASOT_PORT,
????????????????????????????????????????????????????????????????????ASOPORT_Name,?AESound[?iID?].nom_msgport,
????????????????????????????????????????????????????????????????????TAG_END?);
?????????????#else
??????????????AESound[?iID?].DTMsgPort?=?AllocSysObjectTags(?ASOT_PORT,
?????????????????????????????????????????????????????????????ASOPORT_Name,?AESound[?iID?].nom_msgport,
?????????????????????????????????????????????????????????????TAG_END?);
?????????????#endif
???????????}
?????????}
???????}
?????}
???}
?}


Mon fichier pour lancer la lecture du son chargé :
void?DEPlaySound(?int?iID?){
??if?(?DESoundExist(?iID?)?==?1?){
????if?(?AESound[?iID?].Playing?>?0?){
??????DEStopSound(?iID?);
?????}
????if?(?AESound[?iID?].DTMsgPort?!=?NULL?){
??????//?Default?DTM_TRIGGER?method?from?zzd10h?datatype?play?sample?//
??????mydtt.MethodID??????=?DTM_TRIGGER;?/*?Fill?in?the?dtTrigger?struct?*/
??????mydtt.dtt_GInfo?????=?NULL;
??????mydtt.dtt_Function??=?STM_PLAY;
??????mydtt.dtt_Data??????=?NULL;
??????#if?defined(?__amigaos4__?)
????????AESound[?iID?].dores?=?IDataTypes->DoDTMethodA(?AESound[?iID?].dtobject,
????????????????????????????????????????????????????????NULL,?NULL,?(Msg)&mydtt?);
???????#else
????????AESound[?iID?].dores?=?DoDTMethodA(?AESound[?iID?].dtobject,
????????????????????????????????????????????NULL,?NULL,?(Msg)&mydtt?);
???????#endif
??????AESound[?iID?].Playing?=?1;
?????}
???}
?}


Ma fonction pour arrêter la lecture d'un son :
void?DEStopSound(?int?iID?){
??if?(?AHIAudioInitialized?==?1?){
????if?(?DESoundExist(?iID?)?==?1?){
??????if?(?AESound[?iID?].Playing?>?0?){
????????//?Default?DTM_TRIGGER?method?from?zzd10h?datatype?play?sample?//
????????mydtt.MethodID??????=?DTM_TRIGGER;?/*?Fill?in?the?dtTrigger?struct?*/
????????mydtt.dtt_GInfo?????=?NULL;
????????mydtt.dtt_Function??=?STM_STOP;
????????mydtt.dtt_Data??????=?NULL;
????????#if?defined(?__amigaos4__?)
??????????AESound[?iID?].dores?=?IDataTypes->DoDTMethodA(?AESound[?iID?].dtobject,
??????????????????????????????????????????????????????????NULL,?NULL,?(Msg)&mydtt?);
?????????#else
??????????AESound[?iID?].dores?=?DoDTMethodA(?AESound[?iID?].dtobject,
??????????????????????????????????????????????NULL,?NULL,?(Msg)&mydtt?);
?????????#endif
???????}
?????}
???}
?}


Bon il y a aussi une routine pour pause et une pour résume ... mais c'est comme STOP ou je change le STM_ avec STM_PAUSE & STM_RESUME.
Et la fonction pour supprimer un son de la mémoire :
void?DEDeleteSound(?int?iID?){
??if?(?DESoundExist(?iID?)?==?1?){
????if?(?AESound[?iID?].Playing?!=?0?){
??????DEStopSound(?iID?);
?????}
????#if?defined(?__amigaos4__?)
??????IExec->FreeSysObject(ASOT_PORT,?AESound[?iID?].DTMsgPort);
??????IDataTypes->DisposeDTObject(?AESound[?iID?].dtobject?);
?????#else
??????FreeSysObject(ASOT_PORT,?AESound[?iID?].DTMsgPort);
??????DisposeDTObject(?AESound[?iID?].dtobject?);
?????#endif
????LDeleteString(?AESound[?iID?].FileName?);
????AESound[?iID?].dtobject?=?NULL;
????AESound[?iID?].Exist?=?FALSE;
????AESound[?iID?].FileName?=?NULL;
???}
?}


Voila les fonctions que j'ai fait.

Par contre, la démo qui utilise ces fonctions est ici :
#!!!!!include!!!!!?"libamidark.h"
int?InKey;
void?DarkLoop(?void?){??
??//?Setup?Display.
??DESetDisplayMode(?640,?480,?32?);
??DESyncOn();
??DESyncRate(?60?);
??//?Load?the?4?samples?using?DataTypes.
??DELoadSound(?"Medias/oceanwave.wav",?1?);
??DELoadSound(?"Medias/break.wav",?2?);
??DELoadSound(?"Medias/DREAM.WAV",?3?);
??DELoadSound(?"Medias/electricarc.wav",?4?);
??InKey?=?0;

??while(?!DELoop()?){
????DECls();
????DESetCursor(?0,?0?);
????DEPrint(?"AmiDARK?Engine?now?play?Audio?Sounds?using?DATATYPES"?);
????DEPrint(?"Press?default?QUIT?KEY?to?stop?replay?music."?);
????DEPrint(?"?"?);
????DEPrint(?"Press?1?to?play?OceanWave.wav"?);
????DEPrint(?"Press?2?to?play?Break.wav"?);
????DEPrint(?"Press?3?to?play?Dream.wav"?);
????DEPrint(?"Press?4?to?play?ElectricArc.wav"?);
????//?Keyboard?key?1?to?4?start?replay?of?a?sound.
????InKey?=?DEScancode();?InKey--;
????if?(?InKey?>?0?){
??????if?(?InKey?????????DEPlaySound(?InKey?);
???????}
?????}
????DESync();
???}
??//?We?delete?sounds?from?memory.
??for?(?InKey?=?1;?InKey?????if?(?DESoundExist(?InKey?)?==?1?){
??????DEStopSound(?InKey?);
??????DEDeleteSound(?InKey?);
?????}
???}
?}

Cette démo charge 4 sons, et attends des touches clavier.
Les touches 1 à 4 lancent le son correspondant.
le !DELoop() force la démo à quitter lorsque la touche ESCAPE est pressée. Sinon la démonstration tourne en boucle...
J'ai beau presser une touche ... aucun son ne sort.
(j'ai fait un output debug du clavier, idem pour quand on joue un son, le charge, etc ... et tout est bien géré... Le pbe est donc bien dans les sons ... mais où ??? :( )...
D'ailleurs, j'ai un petit bug bizarre. Le dossier ou se trouve le .exe ne peut pas être supprimé... je dois redémarrer le 'Miga pour pouvoir le supprimer... Je n'ai pas ce soucis avec mes App. développées sous l'AmiDARK Engine qui n'utilisent pas les sons DataTypes... Zarb tout ça ...



Message édité par : AmiDARK / 21-10-2012 20:40
Message édité par : AmiDARK / 21-10-2012 21:14
zzd10h zzd10hicon_post
Juste pour étre sûr que ta fonction DEPlaySound laisse le temps à DTMethodA de jouer le son,
peux-tu ajouter un petit "Delay(100)"
Entre

????????AESound[?iID?].dores?=?IDataTypes->DoDTMethodA(?AESound[?iID?].dtobje ct,
????????????????????????????????????????????????????????NULL,?NULL,?(Msg)&myd tt?);

Et

? ? ? AESound[ iID ].Playing = 1;?

Parce que là, je ne vois pas de boucle d'attente de signal pour laisser le son finir et envoyer son signal de fin...

je suis sur un autre projet pour lequel je me sers des datatypes sons et du signaling et je n'ai pas de problème de lecture.

Pour le pb de delete de repertoire,
ça ma fait ça aussi avec des apps MUI, dés le 1er openlibrary MUI (j'ai testé en ayant qu'un open/close MUIMaster.library) si et seulement si le prog à un .info et qu'il a été lancé au moins une fois avec en info "démarré depuis le workbench".
Bizarre en effet...ça fait peut-étre ça aussi avec d'autres library que MUI...

A+




AmiDARK AmiDARKicon_post
zzd10h :
Je pense que tu as pas compris ce que je programme en fait.
l'AmiDARK Engine est une sorte de langage BASIC pour le C/C++
Je crée des commandes. Le seul but de la commande DEPlaySound est de lancer la lecture du son... Après, la commande rends la main au développeur.
Il pourra stopper le son à tout moment avec DEStopSound.
Le dernier code source boucle sans arrêter les sons. Tu peux lancer la lecture d'un son avec les touches 1 à 4 du clavier ... Puis le son se joue jusqu'à ce que soit il soit terminé soit tu fait ECHAP qui quitte l'application ...
Donc techniquement, pas besoin de WAIT...
Tu comprends mieux le schmilblik ?
@+
zzd10h zzd10hicon_post
OK,
peux-tu tout de même tester avec un Delay(xxx) pour voir ?
thellier thelliericon_post
Moi je rajouterai bien qques

VAR(AESound[ iID ].dtobject)

juste pour voir si on le perd pas en route....
Alain

Voici VAR et qques #define utiles que j'utilise sans cesse

A noter le ZZ a ajouter en debut de lignes pour voir où un prog plante ;->

/*==================================================================*/
#define et &&
#define ou ||
#define AND &
#define OR |
#define ILOOP(nbre) for(i=0;i#define JLOOP(nbre) for(j=0;j#define MLOOP(nbre) for(m=0;m#define NLOOP(nbre) for(n=0;n#define XLOOP(nbre) for(x=0;x#define YLOOP(nbre) for(y=0;y#define SWAP(x,y) {temp=x;x=y;y=temp;}
#define CHECK(a) if(a==NULL) return;
#define RCHECK(a) if(a==NULL) return(NULL);
#define STEP(tex) OSAlert(#tex);
#define ZZZ OSAlert("OK");
#define ZZ printf("Line:%ld\n",__LINE__);
#define XX(message) printf(#message"\n"); OSAlert(#message);
#define REM(message) if(debug) {printf(#message"\n");}
#define VAR(var) if(debug) {printf(" " #var "=" ); printf("%ld\n", ((ULONG)var) );}
#define VARP(var) if(debug) {if(var!=0) {printf(" " #var "=" ); printf("%ld\n", ((ULONG)var) );} else {printf(" " #var "=NULL\n");}}
#define VARF(var) if(debug) {pfloat(" " #var "=" , &var,1);}
#define VARF3(var) if(debug) {pfloat(" " #var "=\t" ,(float*) var,3);}
#define VARF4(var) if(debug) {pfloat(" " #var "=\t" ,(float*) var,4);}
#define VARFN(var,n) if(debug) {pfloat(" " #var "=\t" ,(float*) var,n);}
#define VARS(var) if(debug) {printf(" " #var "=<%s>\n",var); }
#define VARC(var) if(debug) {printf(" " #var "='%c'\n",var); }
#define VARRGBA(var) if(debug) {printf(" " #var "=%d %d %d %d\n",var[0],var[1],var[2],var[3]); }
#define VARB(var) if(debug) {if(var==TRUE) printf(" " #var "=TRUE\n"); else printf(" " #var "=FALSE\n");}
#define MYNEW(obj) (obj*)MMmalloc(sizeof(obj),#obj)
AmiDARK AmiDARKicon_post
@zzd10h : Same

@Thellier : ?
zzd10h zzd10hicon_post
Désolé, pas d'idée...
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme