begin process at 2010 02 10 04:17:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Divers

 > 

Aide et documentation

 > 

Stratégie pour décaler des bits


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Stratégie pour décaler des bits

mercredi 7 mai 2008 à 11:48:44 | Stratégie pour décaler des bits

Francky23012301

Membre Club
Salut la compagnie ,

Je travaille sur les fichiers midi : les évènements midi utilisent un paramètre qui est un DeltaTime et qui peut (et doit ) codé sur 32 bits et doit être non signé. Un petit LongWord colle nikel . Sauf qu'il y a un sauf  (ben oui sinon c'est pas drole).

Z'explique le truc :

Prenons un longword bidon :

10000001   10110001   10110001   1010001

Selon la norme Midi il faut sucré pour chaque Bytes le premier bit (ou le dernier si on va de la gauche vers la droite)

On obtient donc ceci

(1)0000001   (1)0110001   (1)0110001   (1)010001

On rafistole le tout (Encore un truc à la Mac Gyver ) :

On obtient  0000001 0110001  0110001 010001

On remplace les bits "perdus" par des zéros

On obtient : 0000 0000001 0110001  0110001 010001

Même si je connais les opérateurs binaires, je n'ai aucune idée de comment faire la chose.

Merci à vous
mercredi 7 mai 2008 à 12:48:37 | Re : Stratégie pour décaler des bits
mercredi 7 mai 2008 à 13:13:16 | Re : Stratégie pour décaler des bits

Francky23012301

Membre Club
Salut Cirec : j'ai vu cette source mais elle ne fait pas avancer rmon schmilblic .
mercredi 7 mai 2008 à 13:13:37 | Re : Stratégie pour décaler des bits

Tavounet

J'ai été voir le lien sur ta réponse cirec et là, il me semble que le problème est bien plus complexe, il ne s'agit pas d'une vulgaire opération. ^^

Francky, est-ce que tu peux récupérer tes bits un par un?
Si oui, j'ai peut-être une idée.

Tu pars d'un longword 00000000 00000000 00000000 00000000.

Tu récupères le premier bit puis tu décales ton longword à droite en insérant le bit récupéré.

Idem pour le deuxième, troisième...

Tu as juste à "sauter" les 1 que tu veux virer.

Une fois tes 28 bits récupérés, tu fais un décalage à droite avec insertion de 0 quatre fois, et tu obtiendras ta valeur normalement.

Je ne sais pas si ça fonctionne, mais à tester ^^

Bon courage
mercredi 7 mai 2008 à 14:04:38 | Re : Stratégie pour décaler des bits

Francky23012301

Membre Club
Salut

En fait je ne récupère pas les messages midi : c'est pour faire un fichier midi.
Un lien pour les explications .

Si l'utilisateur veut ajouter une note : la procédure suivante est lancée :
procedure TMidiWriter.Add_NoteOn_Event(Const DeltaTime : LongWord; Const Channel, KeyNumber, Velocity: byte);
Et là il faut transformer le Delta Time en virant les premiers bits.

Pour être honnète j'ai trouvé ceci :

void WriteVarLen (register long value)
{
register long buffer;
buffer = value & 0x7f;
while ((value >>= 7) > 0)
{
buffer <<= 8;
buffer |= 0x80;
buffer += (value & 0x7f);
}
while (TRUE)
{
putc(buffer & 0xFF,outfile);
if (buffer & 0x80)
buffer >>= 8;
else
break;
}
}

doubleword ReadVarLen ()
{
register doubleword value;
register byte c;
if ((value = getc(infile)) & 0x80)
{
value &= 0x7f;
do
{
value = (value <<7) + ((c = getc(infile)) & 0x7f);
} while (c & 0x80);
}
return (value);
}

Manque de bol c'est du C donc j'y comprend que dalle et cette saloperie d'opérateur <<= je l'ai trouvé nul part donc je sais pas ce que c'est.

Merci A++
.


mercredi 7 mai 2008 à 14:06:23 | Re : Stratégie pour décaler des bits
mercredi 7 mai 2008 à 14:18:55 | Re : Stratégie pour décaler des bits
mercredi 7 mai 2008 à 14:50:17 | Re : Stratégie pour décaler des bits

Francky23012301

Membre Club
Salut Cari : la fonction de f0xi AllToBinStr(const Buffer; const bSize : integer; var OutBinStr : string); pourrait éventuellement me dépanner. Mais je trouve ca lourd tout ca pour déplacer 4 octets . Ca fait pas propre à mon gout (Je sais je suis chiant mais apres c'est qui qui va se faire gronder quand il va poster le source???? C'est francky ).

Je vais voir du coté de l'Assembleur (En même temps mon pc est plus sous garantis donc j'hésite : l'asm peut etre dangereux  sous les mains de Francky )
mercredi 7 mai 2008 à 14:51:16 | Re : Stratégie pour décaler des bits

Francky23012301

Membre Club
Pardon 4 bits (une fonction éditer serait la bienvenue )
mercredi 7 mai 2008 à 16:05:45 | Re : Stratégie pour décaler des bits

Kenavo

Elle est où la contrepèterie dans le titre ??

procedure Virons4Bits (var v: longword);
begin
  v := v and $7F7F7F7F;
  v := (v+ v and $7F) div 2;      // 2^7 - 1
  v := (v + v and $3FFF) div 2;   // 2^14 - 1
  v := (v + v and $1FFFFF) div 2; // 2^21 - 1
end;

C'est pour décaler les sons ??

Ken@vo

Code, Code, Codec !


1 2 3

Cette discussion est classée dans : midi, bits, stratégie, obtient, décaler


Répondre à ce message

Sujets en rapport avec ce message

Piano midi [ par sebrs1 ] Comment faire pour jouer des ons de piano en midi?@+Sebrs1PS (qui ne signifie pas playstation :-)) : visitez mon site qui fait ses début svphttp://pro Couleurs 24 Bits [ par MAsterC ] J'ai une question ....Est-ce que Delphi prend en charge dans les bouton les image (bmp) 24bits couleurs... parce que moi l'image dans mon bouton me se Décaler une PaintBox de n pixels vers la gauche [ par greg505 ] Bonjour a tous,Je cherche a décaler le contenu d'un PaintBox d n pixels vers la gauche. Merdi d m aidé sur une Exemple ARCHI SIMPLE car ceux que g tro extraire les composantes R, G, B d'un bitmap 16 bits [ par ericamiens ] bonjour, j'aimerais donc extraire ces composantes mais les fonctions GetRValue, GetGValue et GetBValue attendent un RGB (32 bits) en entrée. ça foncti MIDI files [ par magic123 ] Salut tout le monde, J'aurais besoin d'informations pour savoir comment faire pour lire et décoder un midi file, ceci afin d'effectuer quelques modifi Insérer un fichier Midi sous Delphi [ par frutygirls ] Bonjour ! Nous avons un TP à faire en cours et nous souhaitons y ajouter un fond musical, mais nous galèrons ! Nous avons commencé à insérer un objet Vitesse de la carte reseau [ par manu00 ] Bonjour,Une petite question...savez vous comment faire en delphi pour connaitre la vitesse (et pkoi pas les references) d'une carte reseau en local... Cryptage 128 bits [ par Artegon ] Salut a tous, j' aimerais savoir comment crypteune chaine de caractere en 128 bits...J' ai bien vus l' algorithme crypter/decrypter 128/256 bits, mais Modification de la Luminosité [ par gastou ] Bonjour,J'ai une application qui fait modifier la luminosité. Problème, sur une carte RADEON X300 Series, elle ne fonctionne que sur le mode 256 coule cle de 128 bits et cryptage [ par MoveX ] une cle de 128 bits en cryptage ca correspond a quoi? je veux dire, ca n est pas une cle de 128 caracteres?


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales