Just to give you some more data, by analyzing the UPSID, I have come up with the following list of languages that specifically have this three way contrast in stops, and no other phonation distinctions in stops (according to the UPSID data):
? GUAHIBO (has [p, b, t̪ʰ, t, d, k; also t͡s]; Note that [t̪ʰ] is dental while [t] and [d] are alveolar.)
To be precise, these are languages out of the 451 in the UCLA Phonological Segment Inventory Database which have the following properties:
- They have voiced unaspirated plosives
- They have voiceless unaspirated plosives
They have voiceless aspirated plosives
Stops of all three phonations occur at the same place of articulation at least once. (Guahibo almost follows this.)
They do not have breathy plosives
- They do not have implosives (all attested implosives are stops)
They do not have ejective stops
They do not have prenasalized or "larngealized" voiced stops
It's also worth noting that some languages have these distinctions in affricates or even fricatives, but I didn't consider those in determining these lists.
Just as a random addition to this list, I want to point out that Järawa and Great Andamanese, two of the four surviving native languages of the Andaman islands fall in this category. (The other two are Önge, which just has a voiced-unvoiced distinction, and the language of the North Sentinel Islanders, which is completely unattested.) These two languages are not reconstructably related, but have in contact for an extremely long time.
In terms of distinguishing these sounds from each other, the above systems are often thought of in terms of "voicing onset time":
voiced unaspirated = vocal chords are already together and vibrating while the air-stream is still blocked, i.e., before the stop is released
voiceless unaspirated = vocal chords come together at about the same time (maybe very slightly before or after) the stop is released.
voiceless aspirated = vocal chords don't come together until significantly after the stop is released, meaning that the beginning of the next sound (assumed to be nominally voiced for this to make sense) becomes unvoiced.
Note that these definitions based on voicing onset time don't actually say anything about the amount of air being forced out, which seems contrary to the traditional "aspiration = puff of air" understanding. This is partly explained by realizing that the vocal chords partially block air when they are together. Thus, just the difference between leaving them apart after a stop and immediately bringing them together (or just keeping them together) will create a difference in the amount of air coming out, even if the lungs do exactly the same thing.
That being said, I don't think it's quite fair to totally discount the role of the lungs in aspiration, especially if a language distinguishes between aspirated and unaspirated at the ends of words or before voicless sounds (if that ever happens**).
One should realize that the only difference between [p̚ ] and [p] is that [p] has some airflow blasting the stop open. That's why I like to say that, anytime you can hear an unvoiced stop at the end of a word, that means it's actually either at least slightly aspirated (pulmonic=lungs airflow) or at least slightly ejective (glottalic=larynx-pushing-up airflow). (Of course, it could be ingressive, i.e. a click (unless it's pulmonic ingressive), or a voiceless imposive, but those are much less likely if it's just a plain stop-phoneme.)
In this case, the difference between two words like [εt] and [εtʰ] (or maybe [εt] and [εtʼ]) could very easily be the amount of air blown out after the [t] was released, or the force with which it was blown open (probably length, volume, and/or pitch of the aspiration, from an acoustic perspective). (Note that I don't have any data to back this paragraph up.)
By the way, I just randomly ran into this paper about childhood acquisition of Korean stops, which made a claim that voicing onset time (VOT) is also the main way that Koreans distinguish between their stops: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3105898/ , which sounds odd to me, because people normally say that Korean has two different types of "unvoiced unaspirated" stops. (I think these are the "tense" and "lax" stops the paper is talking about.)
On a side note:
One source of confusion in the area of learning distinctions for oneself is that people assume that they can trust traditional phonetic descriptions and transcriptions of their native language (or other languages). There are many reasons why this assumption is questionable, one being pertinent here: In English, as in many other Germanic languages, so-called "voiced" stops at the beginnings of words are often not even voiced at all during the closure. This is not true in all languages. E.g., apparently, Spanish speakers consistently voice their voiced-stops (which actually vary between stops and fricatives). This is related to how our unvoiced stops vary in aspirations. In different environments the interpretations of an unvoiced unaspirated stops will sound different to an unattentive or untrained* English speaker; for example, I believe the following is usually true for English speakers:
#_V: /d/ -> [d~t], /t/ -> [tʰ] (Beginning of a word before a vowel)
V_V: /d/ -> [d], /t/ -> [t] or [tʰ], dep. on stress (Between two vowels)
Thus, to most English speakers, [t] sounds more like /d/ in something like [ta], and more like a /t/ in something like [ˈa.ta], but remember that voicing onset time is a continuum, like almost everything in phonetics is (despite how consonant phonetics is often presented).
*By the way, if you want to train yourself to recognize sound distinctions that you really have trouble distinguishing between, the best way (but not necessarily the easiest way) would probably be to get a set of recordings of the sounds you want to learn to distinguish (preferably large so as to make sure you're not recognizing other differences between the recordings), with labels telling you which is which. Then, listen to them in a random order, guess which sound each is right after you hear it, and then check the label to get immediate feedback as to whether you were right or wrong. I've heard that there is research showing that this has at least measurable results on random adults in as small a time-frame as 1 hour, which doesn't surprise me in the slightest, since that's exactly how musicians and sound engineers train.
**Hindi supposedly has both aspirated and unaspirated unvoiced stops in coda position, e.g., लाख = /lɑːkʰ/ and रोक = /ɾoːk/, and there are probably minimal pairs in writing at least, though I think they are merged at the ends of words, at least for some speakers. Follow links for two audio recordings each for each word. I feel like Klamath, must have word-final aspirated stops, seeing as it has no /θ/ and no dentals or retroflexes, but does have /tʰ/. (but not /t/).
I got this list in the following way:
I used this search engine: http://web.phonetik.uni-frankfurt.de/upsid_find.html
(see more at http://web.phonetik.uni-frankfurt.de/upsid.html)
I copied the language list sections from results pages as strings, which I assigned variables to, in python 3.7.5:
d = '''<from 'voiced no_mod1 plosive'>'''.split()
t = '''<from 'voiceless no_mod1 plosive'>'''.split()
th = '''<from 'voiceless aspirated plosive'>'''.split()
dh = '''<from 'breathy plosive'>'''.split()
dd = '''<from 'implosive'>'''.split()
tt = '''<from 'estop>'''.split()
(The things in angle brackets are just place holders, telling you the search parameters for the pages I actually copied text from.)
I then ran the following code:
langs = 
for i in (d+t+th):
if (i in d) and (i in t) and (i in th) and (not (i in dh)) and (not (i in dd)) and (not (i in tt)) and (not (i in langs)):
maybeLangName = True
for j in '1234567890()':
if j in i:
maybeLangName = False
langs += [i]
Thankfully, this code was enough to weed out all the text that wasn't language names. It doesn't work if the language name is more than one word, so I checked through the "d" list (since everything that should be in the list should be on that list) for muli-word names and found "EPENA PEDEE", "ISLAND CARIB", "KALA YAGAW YA", "KOLOKUMA IJO", and "NYAH KUR", "SOUTHERN KIWAI", "TIDDIM CHIN", and "WEST MAKKIAN" and checked them manually. Only EPENA PEDEE, NYAH KUR, and TIDDIM CHIN belong on this list, so I found "EPENA" and "PEDEE" on my list and made sure they were listed as one language; similarly with "NYAH", "KUR", "TIDDIM", and "CHIN".
Afterwards I checked through the data to look for languages that violate rule 4. If we ignore Guahibo, the following languages do:
ADZERA, FARSI, SOMALI, TUNICA, WAPISHANA (glottal is the only unvoiced unaspirated)
BOBO-FING, EWE, GA (voiceless labial-velar apparently not aspirated)
All these languages contrast unvoiced aspirated stops with voiced unaspirated stops. SOMALI and WAPISHANA also have some contrastive voiced "laryngealized" consonants (which I think pattern with glottal stops in general).
I then checked the remaining languages to look for any other complications. I found out (A) that I forgot to consider prenasalized stops (which maybe I was right not to worry about and should have left in) and (B) that UPSID records some languages as having voiced "laryngealized" stops, which are voiced and unaspirated, but are clearly a bit different than what we would think of as voiced stops. I thus added rule 8 and moved these languages to down here:
CHAM (both voiced stops are "laryngelized", unlike unvoiced stops)
LAKKIA (similar to Cham, except only with [bˀ], and no [dˀ])
LUNGCHOW (like Cham)
NAXI (4 way contrast: aspirated, plain voiceless, plain voiced, prenasalized)
SEDANG (4 way contrast: aspirated, plain voiceless, prenasalized, "laryngealized")
SUI (4 way contrast: aspirated, plain voiceless, plain voiced, "laryngealized")
(All these languages are from South-East Asia, including Southern China.)
It's not exactly clear what "larygealized" is supposed mean. My first thought was that it was some kind of constriction in the back of the throat, like maybe epiglottalization, but I don't think that's it. I think it means exactly what it sounds like, a constriction in the larynx/glottis/voice box; I was just used to the term "glottalized".
Whether you say "laryngealized" or "glottalized", the term is still vague in practice. The most obvious literal interpretation to me would be that they are creaky-voiced/tense-voiced, with the vocal cords brought together tighter than what produces the most sound. I know from experience, however, that "glottalized" is used to mean things that are not this simple.
When I look these languages up on Wikipedia, I find that it lists these sounds as implosive in CHAM and LUNGCHOW (which latter it calls "Nùng"), preglottalized in Sui (i.e., they just have glottal stops before them), and as just plain voiced in LAKKIA and SOMALI.
There are also languages that make this distinction as part of a larger set of stop-types, usually distinguishing more than three series. There are also MANY languages that make other distinctions and not the ones you list, but I'm not going to list all of them. I got rid of the rule 5-7 "not" clauses in my python code, then removed the languages I had already listed and did some extra juggling and checking to get the following data.
One pretty common pattern that made into this list by accident before I removed them is: voiced, aspirated, ejective, & [ʔ]*. Another common system is: aspirated, unaspirated, implosive** (e.g. Vietnamese, also probably some in Africa), similar to the languages. I thought that this would accidentally turn up here, but apparently my UPSID search engine doesn't count implosives as voiced-unaspirated like I thought it would.
Plain Voiceless, Plain Voiced, Aspirated, Breathy; This is very common in South Asia.:
PARAUK (This one is more SE Asian.)
Aspirated, Ejective, Plain Voiceless, Plain Voiced; This shows up sometimes in North American languages.:
HADZA (aspirated, ejective, plain voiceless, plain voiced, & [ʔ])
KIOWA (aspirated, ejective, plain voiceless, plain voiced, & [ʔ])
WINTU (aspirated, ejective, plain voiceless, plain voiced, & [ʔ])
YUCHI (aspirated, ejective, plain voiceless, plain voiced, & [ʔ])
DAKOTA (aspirated, ejective, plain voiceless, & [b]***)
PICURIS (aspirated, ejective, plain voiceless, & [b]***)
3 way, but with oddities that kept them off the top list:
ARCHI (long (plain voiceless), aspirated, voiced)
BRAO (aspirated, voicless, voiced~implosive=[ɓ,ɗ,g]***)
KOHUMONO (Bilabials are shifted: [pʰ, b, ɓ, tʰ, t, d, kʰ, k, g, kʷʰ, kʷ, gʷ, k͡pʰ, g͡b]***)
More than 3-way
SRE (aspirated, plain voiceless, plain voiced, implosive)
MAZAHUA (aspirated, ejective, plain voiceless, plain voiced, glottallic = [ɓ, ɗ̪, kʼ, kʷʼ]***, [ʔ])
IGBO (Differs between dialects, but UPSID gives: plain-voiceless, plain-voiced, aspirated, breathy, voiceless-implosive, voiced-implosive)
SANDAWE (aspirated, ejective, plain voiceless, plain voiced, [ʔ], various types of click)
!XU (plain voiced, plain voicless, aspirated, breathy, voiceless ejective, voiced ejective****, various types of click)
To this list, I want to add that Sindhi and Sairiki are two Northwestern Indo-Aryan languages from Pakistan that both have incredibily robust 5-way stop contrasts of: plain voiceless, plain voiced, aspirated, breathy, and implosive
The TZELTAL language showed up in this second set, but violated rule 4 from above, in that it doesn't distinguish aspriation in the same place of articulation:
[pʼ, p, b, t̪ʼ, t̪, d̪, kʼ, kʰ, g]***
An example of a language that is similar to having the 3-way contrast you describe, but which somehow didn't manage to get on the list, would be SOUTHERN NAMBIQUARA:
[pʰ, pʼ, p, ɓ, t̪ʰ, tʼ, t, ɗ̪, kʰ, kʼ, k, kʷʰ, kʷʼ, kʷ, ʔ]***
This language is in UPSID, but didn't turn up because it has implosives instead of plain voiced stops, which is not that uncommon, as I wrote before. I don't doubt that there are several other languages like this in the UPSID.
I noticed this language because "SOUTHERN" showed up on my list. That is because, if you combine SOUTHERN NAMBIQUARA with SOUTHERN KIWI, which has a simple voiced-voiceless distinction, you find the "SOUTHERN" co-occurs with all 3 of the types of stop you mentioned.
Note that what UPSID and I call "breathy" is often called "voiced aspirated", since that's how it generally patterns in languages and it's a reasonably accurate description.
It's worth noting that the the UPSID only has 451 languages (notably not including many well known languages such as English), while the world has maybe around 7,000. It should be possible to do this sort of analysis with PHOIBLE 2.0, a database with 3,020 phonetic inventories, but I don't know how to do that, and it would probably take longer. It also isn't really part of an answer to what you asked.
*As can be seen by the fact that voiced stops are often plain voiced in Germanic languages, plain voiced and voicless stops are quite similar to each other. Aspirated and ejective stops, however, can potentially have very loud and obvious differences from each other and from the "plain" stops (depending on how "strongly" the speaker chooses to articulate them). That may be why the following system is quite common cross-linguistically:
aspirated vs. plain. vs. ejective
The "plain" consonant in this set up is voiceless in many languages, voiced in some, and probably variable in others (or maybe in most).
Another factor here is that ejectives and aspirates are natural results of putting /ʔ/ and /h/ next to voiceless stops, respectively. In fact, in Navajo, ejective and and asprirated stops are basically followed by full-length [ʔ]s and [h]s.
The aspirated-voiced-ejective-[ʔ] languages in the UPSID, which made it in here before I removed them because [ʔ] is considered a plain voiceless stop, are mainly from the Caucasus and North America.
**Another answer to the the problem that voiced and unvoiced plain stops are very similar is to let the voiced stops become implosive. Similar to ejectives and aspirates, implosives can potentially be quite loud and obvious. More often in languages that don't contrast them with plain voiced stops, they are actually sort of "softer" than than normal voiced stops, in that they don't blast open the stop at all, similar to a sonorant like a nasal. (I think they may contrast plain and implosive voiced stops, but the Kru languages seem to be a standerd example for this common "weak" type of implosive, if only because of people copying Wikipedia.) As I said before, in Spanish, which never aspirates its voiceless stops and therefore requires its voiced stops to alway be fully voiced, voiced stops vary between stops and fricatives. (A similar situation happens in many other languages, like Rotokas, and is, I believe, sometimes reconstructed for Proto-Gemanic.) Many other languages that require voiced stops to be fully voiced allow them to be implosive. A well known example is Swahili. Also, as you may perhaps have guessed from some of the earlier data, this sort of thing often happens in South-East Asian Languages.
Perhaps another reason why langugages that require voiced stops to be fully voiced would allow them to become implosive is articulatory: Voicing requires air to flow through the glottis, which normally requires breathing out. This flow of air from the lungs into to oral cavity would tend to immediately blow open the stop. Maybe this makes it difficult to have a long voiced period during the closer to contrast opening the voice onset at the same time as the closure opens. (Obviously this isn't a problem if voiced stops are allowed to be fricatives.) The basic idea of a voiced implosive is that it's possible to make the vocal folds vibrate (for a short period of time) as if air was being pushed through them without actually using the lungs at all, if one simply pulls the larynx down. Doing this particularly forcefully often has the effect of breaking the oral stop backwards by pulling air in from outside the mouth, but that's not a necessary part of it, and this generally doesn't happen in languages with "weaker" implosives, which makes the "implosives" actually sound alot like plain fully voiced stops or even like sonorants, though does still create the signiture implosive pitch-drop (in the fundamental frequency of vocal fold vibration) caused by the larynx moving down. (These are the "weak" implosives I mentioned earlier as being in Kru languages.)
It's also worth noting that the natural results of putting /ʔ/ and /h/ next to voiced stops are implosives and breathy-voiced stops respectively.
***Implosives (or at least voiced implosives) are easier the further they are from the larynx. I'm not really sure what the exact reasons for this are, but I understand similar tendencies with other types of consants quite well. The thing to understand is that closures further forward in the mouth mean that there is more volume and more air between the oral closure and the larynx. Similarly, there is less volume and air in this space if the oral closer is further back.
Simple voiced-unvoiced distinctions without aspiration or anything else are harder to maintain further back in the mouth, because the airflow needed to create the voicing during the stop is a larger contribution to the small area, and thus blows the stop open faster. This means that voiceing-onset-time differences can't be as different between voiced and voiceless stops (unless the unvoiced stop becomes aspirated or the voiced one becomes a fricative or some such change), and so voiced and unvoiced stops often merge in the back of the mouth.
Ejectives are easier further back in the mouth. Ejectives are made by pumping the closed larynx upwards, which increases air pressure between the larynx and the oral closer, just like collapsing the lungs with the diaphragm does, thus blowing the closure open. If the volume of air between the closure and the glottis is smaller, then the small reduction in volume made by bringing the larynx up will be a larger fraction of the whole, and will create a larger difference in air-pressure.
For some reason, the fact that it takes longer or more air to blow open a closure further from the larynx makes implosives easier. Naturally, this means the air flow from the lungs required for voicing is less likely to blow open the stop (as if it weren't implosive). This also makes it harder for pumping the larynx down to implode the oral closer and pull in air from outside the mouth, since the air pressure difference made by pulling down the larynx is smaller, but that's not a fundamental part of implosives. These lower air pressure differences also suck less air up from the lungs through the glottis to create voicing, but I suppose that that sucking effect might be small compared to the air brought throught the glottis simply by pushing it through the air in the throat and/or any airflow from lung compression.
****Apparently, this is from "Snyman, J.W. 1969. An Introduction to the !Xu Language. Balkema, Cape Town.
Snyman, J.W. 1975. Zu|'hoasi fonologie en Woordeboek. Balkema, Cape Town." I've never heard of a language with a voiced ejective, and Wikipedia even claims they are impossible. I don't think they actually are impossible, though. In fact, I'm pretty sure I can pronounce them.
You should still be able to make an ejective even if your glottis is very slightly open. I would think that this might be kind of like a backwards implosive, if it weren't for the fact that air passing down through the glottis into the lungs produces a very different kind of vibration than normal voicing. My method for pronouncing what I think could be called "voiced ejectives" involves simultaneously pushing up with the larynx and compressing the lungs just fast enough that air is still going out through the glottis as the glottis is pushing up. The result is is a very forceful release where the airflow comes partially from the lungs and partially from the larynx. It sounds very much like an ejective, but also sounds kind of voiced. It is possible to make the voicing sound more salient comparatively by weakening the force of the ejective. I can even reduce the force of the ejective such that the voicing begins to sound more salient than the ejective.
It's possible that these "voiced ejectives" are actually something else, though, like maybe tense-voiced stops. Alternatively, maybe the "unvoiced ejectives" are followed by long glottal stops and the "voiced" ones aren't, basically a VOT difference except that it's also a glottis opening time difference. (? GOT or maybe GCT=glottis closure time or GRT=glottal release time) (This what my "voiced ejectives" must actually if it turns out I'm not really pronouncing them as I describe.)