Conlangery SHORTS 26 Phonix
Content from the Conlangery Podcast is licenced as Creative Commons Attribution - Non Commercial - Share-Alike. You are free to copy, distribute, remix, and create derivative works from the show, so long as you give attribution, your work is not commercial in nature, and you also use a the same license on your own product. The same licence therefore applies to the following transcript.
Today I would like to talk about a tool that some of you might like. Most conlangers who have done any kind of historical conlanging will be familiar with the concept of a sound change applier. It saves you the trouble of applying sound changes to every word in your lexicon by hand, freeing up some time for other conlanging work. I had given up on sound change appliers for a long time, because they never seemed to give me what I wanted to do with sound changes. Most sound change appliers only handled fairly simple operations with simple environments. They often aren't aware of syllables or stress, and may stick rigidly to a particular model of phonological features. However, after some time looking I finally tried Phonix, a sound change applier created by Jesse Bangs. It's a simple, lightweight program that does almost all of what I want in a sound change applier.
To use Phonix you need to create two files. First, you need a simple text file with words in the proto-language, one word per line, and second, you need a PHONIX file, which will contain all of your rules. In the Phonix file the first thing you need to do is declare your features and symbols. If you want to get started quickly, you can choose to invoke the standard feature set, which is a pretty typical set of binary features with a bit of geometry, and one of the standard symbol sets, which are either XSAMPA or IPA characters. From there, you define your rules, and then run the program from a command line interface (it's only one command with a few variables).
Of course, being a phonologist, I have a preferred set of features to work with, so I declared those myself. Phonix supports both binary and unary features as well as feature geometry through "node" features, which makes assimilation rules so much easier to write. There are also "scalar" features that have numeric values, something I was initially skeptical of, but I was recently able to use a scalar feature to model a metrical grid, which made life so much easier when assigning stress. I may write up a guide on how to do that sometime in the future.
I was also happy to find out that I was able to underspecify my symbols, to the point that Phonix allows me to declare one segment that has no features at all. Since you can declare your symbols, you could even set up your file to spit out final words in romanized form (or in any alphabetic script in UNICODE), though I prefer to just get IPA and then convert that to romanization myself.
Once you have your features declared, you need to define your rules. The basic rule syntax is basically the same as a basic phonological rule formalism -- input => output / environment. You can, of course, skip the environment, and there are methods of writing insertion and deletion rules. Assimilation is simple with a variable notation and node features.
In addition, there are a number of parameters you can add to rules in order to change how they apply. For instance, you can make a vowel harmony rule by using the "filter" parameter and only including vowels (or a narrower class, such as only high vowels, or all vowels except the one you decided to make transparent). The "persist" filter will cause the rule to reapply after every change, which is handy if you want to model a rule that stuck around for a while in the phonology of a language. You can change the direction the rule applies in, so that you could have your rule propogate from right to left if it's something you want to spread from the end of the word all the way through. You can even make a rule apply inconsistently with "applicationRate", so that maybe this rule only applies to 10% or 20% of words -- something that can add some realistic messiness to your language.
The key thing that makes Phonix useful to me is that it's aware of syllable structure. You can declare the possible syllable structures for your language by declaring the possible onsets, nuclei, and codas of syllables. When you declare the syllable, you can make it persistent, meaning that Phonix will resyllabify words after every rule, which can be handy, or you can declare a new syllable structure later in the rules, which is handy if the history of your language radically changes its phonotactics partway through. Once you have declared your syllables, you can indicate in a rule whether a segment in the input or the environment should be an onset, nucleus, or coda -- basically giving you everything you need to make rules sensitive to syllable structure.
Overall, this is the most solid sound change applier I have found, and if you are into historical conlanging I really recommend it. Be aware that there is a little bit of a learning curve and you have to run a terminal command, but the documentation is very good and should get you started very quickly. In a little bit of spare time, I have started generating the basic roots of two sister langauges to İstatikii and should be more quickly able to move on to the less automatable parts of that process -- like figuring out how the meanings of cognates differ and precisely how morphology is different. If you want to give it a try, I will be linking it in the shownotes.