Can “d” transform to “n” after nasal vowel? Example: Je viens de Paris (Je viens d’ Paris or je viens n’ Paris) Tant de livres (tant d’ livres or tant n’ livres)
Well spotted. All stop consonants (p, t, k, b, d, g) can be realised as the homorganic nasal (t, d > n; p, d > m; k, g > [ŋ] -the English ng-) when stuck between a nasal vowel and another consonant. This can happen within words, between morphemes and between words:
lendemain /lɑ̃dmɛ̃/ [lɒ̃ːnmɐ̃], en dedans /ɑ̃d(ə)dɑ̃/ [ɒ̃ːndɒ̃], rentre pas /rɑ̃t(rə) pa/ [ʀɒ̃ːnpa]
somptueux /sɔ̃ptyø/ [sõːmtyø], lampe-torche /lɑ̃ptɔrʃ/ [lɒ̃ːmtɔχʃ], bombe sale /bɔ̃bsal/ [bõːmsal/
sanctuaire /sɑ̃ktyɛːr/ [sɒ̃ːŋtyɛːʀ], longuement /lɔ̃gmɑ̃/ [lõːŋmɒ̃], ne prends que ça /n(ə)prɑ̃ k(ə) sa/ [npχɒ̃ːŋsa]
There are different factors that govern whether this nasal assimilation happens or not:
Chief among them is that while the nasalisation is almost systematic for the voiced stops (b, d, g), it's a lot more variable with their voiceless counterparts (p, t, k).
When a voiceless stop is followed by a voiceless fricative (s, f, ch), it's common for nasalisation to only be partial, creating a homorganic stop-nasal sequence: fonction /fɔ̃ksjɔ̃/ [fõŋksjõ]
If the second consonant is nasal itself, it favours nasalisation of the preceding stop: i.e. the /m/ rondement favours the transformation of the d into [n]. This is because another nasal assimilatory process turns voiced stop into nasals when followed by another nasal even in the absence of a nasal vowel: submerge /sybmɛrʒ/ > [sʏmːɛʁʒ], abnegation /abnegasjɔ̃/ > [amnegasjõ]
Nasalisation is strongly inhibited when it would create a geminate (long) nasal: maintenance /mɛ̃tnɑ̃s/ [mɐ̃ːtnɒ̃ːs], cinquantenaire /sɛ̃kɑ̃tnɛːr/ [sɐ̃kɒ̃ːtnɛːʀ]. Even then, this inhibition can be broken in sufficiently commonplace words like maintenant or cinquante-neuf.
While I explained this process as happening to stops "stuck between a nasal vowel and another consonant", a more accurate description would be that it happens in simple coda stops of a non-utterance final syllables containing a nasal vowel. In other words, it only happens if the stop is in the same syllable as the nasal vowel. This means that in words that be syllabified in two different manners, like tomberai (tɔ̃b.re or tɔ̃.bre), assimilation can be blocked when the stop consonant escapes to the the following syllable (tõm.re but tõ.bre)
Surprisingly, Malecot found that this happens more often in cases where a branching coda has been simplified (ne rentre pas -> ne rent' pas), then with original simple codas (rente mensuelle, for exemple)
As with most assimilation processes, this one is allophonic and native speakers will often not realise they're doing it.
This has been well documented for Northern France French (Malecot, Duez) and Canadian French (Walker), and I can attest to it happening in Belgian French, so I suspect it's global, but probably with dialectal variation in the frequency of the assimilation, and the contexts where it can happen. In some dialects (Picardy, Canada), this has been documented as happening utterance finally (i.e. j'ai mal à la jam[m]e pour j'ai mal à la jambe) for example.
Danielle DUEZ, On spontaneous French speech : aspects of the reduction and contextual assimilation of voiced stops, 1995
F. LONGCHAMP, La transcription phonétique du français, 2010
A. MALECOT, G. METZ, Progressive Nasal Assimilation in French, 1972
Douglas C. WALKER, The Pronunciation of Canadian French, 1984 (section 4.4)