strindexk

strindexk — Retourne la position de la première occurence d'une chaîne de caractères dans une autre chaîne.

Description

Retourne la position de la première occurence de S2 dans S1, ou -1 si elle n'est pas trouvée. Si S2 est vide, 0 est retourné. strindex s'exécute à la fois pendant l'initialisation et pendant l'exécution.

Syntaxe

kpos strindexk S1, S2

Exemples

Voici un exemple de l'opcode strindexk. Il utilise le fichier strindexk.csd.

Exemple 1043. Exemple de l'opcode strindexk.

Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac     ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o strindexk.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

seed 0

instr 1 
;get one element of the input string whenever the metro
;triggers, and call a subinstrument to play the file

Smember   strget    p4
istrlen   strlen    Smember
kprint    init      0
ktrig     metro     .6 

if ktrig == 1 then                              ;whenever the trigger gives signal
 kel       random    0, 3.9999                  ;choose a random element (0, 1 or 2)
 kel       =         int(kel)
 Scopy     strcpyk   Smember                    ;make a copy for leaving Smember intact 
 kndx      =         0                          ;set the initial index for reading substrings
 kcount    =         0                          ;set counter for searching the element
 
 loop:                                          ;start looping over the elements in Smember
 kdelim    strindexk Scopy, ":"
  
  if kdelim > 0 then                            ;as long as ":" occurs in Scopy, do:
   if kel == kcount then                        ;if this is the element to get
     Sfile     strsubk   Scopy, kndx, kdelim    ;read it as substring
     kprint = kprint+1
          kgoto     call                        ;and jump out
   else                                         ;if not
    Scopy     strsubk   Scopy, kdelim+1, istrlen ;cut off this element from Scopy
   endif 
    kcount   =  kcount+1                        ;if no element has been found,go back to loop 
          kgoto     loop                        ;and look for the next element
  else                                          ;if there is no delimiter left, the rest is the searched element
   Sfile     strcpyk   Scopy
  endif
 call:                                          ;print the result, call the subinstrument and play the file
          printf    "kel = %d, file = '%s'\n", ktrig+kprint, kel, Sfile
 S_call   sprintfk  {{i 2 0 1 "%s"}}, Sfile
          scoreline S_call, ktrig
 endif

endin

instr 2 ;play
Sfile     strget    p4
ilen      filelen   Sfile
p3        =         ilen
asig      soundin   Sfile
          outs      asig, asig
endin
</CsInstruments>
<CsScore>

i 1 0 30 "marimba.aif:fox.wav:beats.wav:flute.aiff"
e
</CsScore>
</CsoundSynthesizer>


Voir aussi

strindex

Crédits

Auteur : Istvan Varga
2006

Nouveau dans la version 5.02