* Fixed Bug where "F" could not be produced When attempting to produce the tone 'f', the program would not produce the tone as the range(0x0, 0xF) function allowed for inputs up to but not included 0xF. * Use 0x10 instead of 0xf + 1 in the range test for selcall.tones, add unit tests against regression
|2 years ago|
|pyselcall||2 years ago|
|.hgignore||3 years ago|
|README.md||3 years ago|
|setup.py||2 years ago|
This package is a series of generators that build up a SelCall squelch tone from a set of numbers (the tones were 5 or 11 numbers, but this generator lets you use any number of numbers.)
Note that this (while possibly serviceable, I tried to make the tone and frequency generators produce correct frequencies) isn't a serious attempt to make call tones for analog radios, it is just a silly project that stemmed out of me hearing a sound in a Let's Play of Mutant Year Zero that I recognized from old Swedish TV that had cops with radios in them; a shrill beeping sound.
I googled around, and it turns out it was a SelCall tone for Ericsson radios from the system called S70 or S80 from the 70's and 80's.
Melody generator, feed this class an iterable list or tuple of tuples with first a frequency value (in Hz) and then a duration (in ms) and it will generate audio samples in the given sample rate and bit depth. This is most usefully done with a selcall.Code object.
Maps numbers to various frequency standards, the default is CCIR
Tone durations, mostly here because the first tone of Ericsson devices is 700ms followed by 100ms for subsequent tones.
Ties the selcall.Tones and selcall.Durations generators into one that outputs tuples with (frequency, duration) in Hz and ms, respectively.
tones.Sine, tones.Saw, tones.Ramp, tones.Square
The subclasses of tones.Tone infintely generates samples at a given rate from the waveform that they represent.
The setup script automatically installs a pyselcall script that lets you easily interface with (almost) all the features of the package.
The one thing that you can do that the script doesn't do is that you can feed arbitrary frequencies and durations to the Melody class, and thus make any melody you like (I tried a simple music scale and it worked perfectly)