Obviously, your best opportunity is to ask when you first meet the person. Introduce yourself by saying something like
Hi, I'm [Name]. It's good to meet you.
You can use your first name or your full name; if you use one convention, the other person will probably mirror that level of formality. So if you want their full name, you should give your full name.
Immediately afterward, check your pronunciation. For instance, if the name is "Heinrich", you could say
"Heinrich" - is that how you pronounce it? I'm [cultural background], and I'm not good with [non-cultural background] names. Nice to meet you, Heinrich.
You win some sympathy points here. Everyone has names or words they can't pronounce. By explaining that these sort of names aren't your strong suit, you make it understandable if you have any mess-ups with their names in the future. Additionally, by repeating the name (clearly!), you can make sure you've heard correctly. If the person is truly soft-spoken, perhaps what they said wasn't totally clear.
Repetition is key. Repeat the name in this conversation - unless it's going to be too awkward - to sear it into your head. If you don't use a skill - in this case, pronouncing a name - then your ability might deteriorate. Make sure that doesn't happen early on.
At the end of the conversation, you could say
It was nice talking, Heinrich!
as a final pronunciation check.
Most of this idea comes from times when I've spoken to someone from India or Pakistan; I'm usually quite bad with Indian names. "Aditya" in particular took me a while to get. Be careful of multiple names that sound or look alike but aren't. I called someone named "Adil" by the name "Adel" for two months, because I already knew someone with the latter name.