|
Author |
Message |
Blueberry
Member |
Around one and a half years ago, I started developing a new, tiny synth for use in Amiga 500 productions. It has been used (in various versions) in five intros so far, plus two oldskool music entries at this Revision. In the weeks following Revision, I have polished it a bit, and it is now ready for its first public release. :-D You can find the source and documentation in the BitBucket repository. Everything you need, plus some examples, can be downloaded together in this archive. Use this forum for suggestions and the like, and have fun! :-D
|
Jazzcat
Member |
Wow, super exciting news, Jagoda!
Gave it a try, but no luck so far. Metasynth seems to work with Sonar, but I can't get any sound out of it. And Reaper doesn't recognize it as a VST instrument.
I'll look into it tomorrow as I'm off out soon.
|
Blueberry
Member |
Looking forward to hearing about it. :)
Remember that Cinter doesn't give any sound with default parameter values. Raise decay and bpitch to hear it...
|
LaBodilsen
Member |
Seems pretty nice. have been playing around with it in the free VSTHost program, and it's pretty easy to produce some good sounding samples.
this combined with your 4k startup, might just be what i need to get startet coding again :)
|
blakkhar
Member |
Unfortunately, I get SSL error with IBrowse because of https:. Can I download it from somewhere else?
|
Blueberry
Member |
The URLs work just as well with http. I edited the links.
|
Blueberry
Member |
Also, Jazzcat and LaBodilsen: keep in mind that different VST hosts apparently have different opinions about what the octaves are named. In Renoise the valid notes match up with octaves 1-3, but they may not in others.
One way to figure out which octave is which is to play some E notes throughout the octaves. When it writes a sample, you have hit E-4, so the valid octaves are the three below that. :)
|
blakkhar
Member |
Change URL to http: was the first thing I tried. However, IBrowse doesn`t support it but thanks for trying.
|
Blueberry
Member |
|
Blueberry
Member |
There are a few things on my "ideas for improvements" list. Let me know if you have some preferences/comments:
- A more memory efficient data format. The current format is designed for simplicity of decoding and minimal compressed size, sacrificing uncompressed size. This can be problematic in terms of memory usage - as memory can be quite scarce on Amiga 500 - and is also inconvenient when you want to make relocation free code, as you cannot reach across the data with PC relative addressing as soon as it exceeds 32k. It could be nice to devise a format which is more compact while resulting in a smaller (or at least not larger) total compressed size, and not significantly higher decode overhead.
- Ability for the player to stop when the music is done or to loop it indefinitely. Perhaps with a custom restart point specified using the B command.
- More "control flow" commands - B (positionjump), E6 (loop), ED (notedelay), EE (patterndelay). These are redundant, as the same thing can always be expressed using other commands, but they can be convenient to the musician sometimes. Full support can be quite tricky, as it can be difficult to figure out when the song has actually finished. Take a look at any module by Dreamer and you will know what I mean. ;)
- Mix Cinter instruments with other samples for hybrid replay. This could allow you to use samples for some of the instruments or generate some using other techniques. Or simply to use the Cinter replayer as a generic Protracker replayer.
- Selectively omit parts of the replay code based on which features are used, similarly to the "usecode" in The Player. Most features use the same, generic period/volume sequencing system, but distortions, vpower, sampleoffset and sample repeat each take up a few bytes. Stop/restart and hybrid replay would take up some as well.
- A MacOSX build of the MetaSynth VST. There has been some interest in this.
|
h0ffman
Member |
Dam!! My secret weapon is no longer a secret!! Anyway, really glad to have been a part of this tiny piece of genius. I still remember the day when blueberry sent me the first version with the distortion parameters!! I lost my shit!!!!!
|
Blueberry
Member |
There have been a few reports of problems with the MetaSynth. There is a new build in the MetaSynth and Cinter downloads which seems to work better. If you run into problems, try downloading the new version.
Thanks to Virgill and Jazzcat for reporting issues.
The download also contains a few minor fixes to the converter and readme: - Command 9 with arguments 00 (repeat last offset) works correctly now. - Report error if music contains more than 512 different note IDs. - Description of note IDs in the readme. - Computation speed range in the readme fixed to match actual measured speed as estimated by the converter (2-6k rather than 5-7k per second).
|
tEiS
Member |
h0ffman: I lost my shit!!!!! :D :D :D so ye . .. while slowely going back to my roots, i've found out some stuff which i've never knew of .. a 4k synth for amiga .. i was gone for too long, from the beloved gurlfriend machine .. and had a demoscene break for 3 yrs. now i'm sort of back again, and want to HIT IT .. on any damn plattform .. first tracked mod (after more than a decade) sort of finished already .. the typical tEiS intro choonalism .. and now for some 4k amiga agdchun! gonna checkout bluberry's synth ;) .. sounds promisin!
|
Blueberry
Member |
Hello everyone! :-D I uploaded a new version of Cinter with some significant bug fixes and new features: - Fixed a bug in the replayer code which would play the 9 command with argument greater or equal to 80 incorrectly. - The Lua synth would sometimes write a sample with a max-valued parameter using an incorrect sample name (100 instead of XX), resulting in bad conversion. Fixed. - The converter now supports conversion of samples with lowercase names, so you can edit the names inside Protracker. - Rather than playing into random memory garbage at the end of the music, the player will now restart from the beginning, just like Protracker does. New effect command support: - The F command now supports argument 00 to stop the music (thus it will not restart). - The B command is now supported. Can be used to restart from a different place than the beginning of the music. Music state carries over correctly to the restart point, even when this causes the music to sound differently the second time around. - The ED command (notedelay) is now supported, including the useful Protracker 2.3 quirk discovered by Wasp (pitch changes at subsequent row if delay is greater or equal to speed). - The EE command (patterndelay) is now supported. Figuring out the correct behavior of this command required some experimentation in Protracker, as it has some nontrivial interactions with other commands (in particular commands 0, EC and ED). It also has its share of quirks. Did you know that if you use EE and patternbreak (B or D) on the same row, the target row is skipped and the music continues one row further down? ;) Enjoy!
|
blakkhar
Member |
The issue with EE and pattern break (B or D) on the same row is interesting. Did you tried the same with a pattern loop (E6)? Will this affect on the loop?
|
Blueberry
Member |
I just tried that. The loop repeats indefinitely, and the first line is sometimes skipped, sometimes not, in a pattern that depends on both the loop count and the delay value.
There's a reason I have not implemented loops yet. ;)
I want to implement them eventually, mostly because it is going to be a fun challenge figuring out how all these weird behaviors emerge from some underlying logic (or lack thereof).
|
Blueberry
Member |
I have been talking about this for some time... well, now it's here: Cinter with samples! :-D You can simply give the Cinter converter a module which uses a few instruments which are not produced by Cinter on top of the Cinter ones. The converter will output a separate data file to included with your music and given to the player. The player is slightly bigger, but not by much (especially compressed, since the new code is quite similar to some of the existing code). It supports Cinter music both with and without extra ("raw") samples. A pure Cinter module (without any raw samples) can still be played by the old player. A few other, minor changes are included: - Using fineslide (E1 or E2) directly on a note will now give an error. This never worked, as it is incompatible with the music data representation. - Setting tempo with the F command is now supported, as long as that tempo is 125. :) Have fun, and let me know what you think. I already found one buggy corner case. Can you find it? ;) Download link is still the same.
|
Blueberry
Member |
Hi ADA! A new, major version of Cinter has been released: Cinter 4! The version number is increased because some of the parameters work differently from before: The mpitch and bpitch parameters are now adjusted in semitone increments instead of linear frequency. This should be more intuitive and useful, and also allows for a greater range of frequencies. The mpitchdecay, bpitchdecay and moddecay parameters can now go upwards as well as down. This allows for a greater variety of sounds and is the main new feature. If you pull up the value very high, it starts overflowing, creating new, interesting effects. Thanks to Hoffman for suggesting making these parameters two-way. The new version also takes advantage of new features in MetaSynth 2.1 (included) for having default values and custom text display of parameters. So the parameters now start out at sensible values and show meaningful text in the UI (instead of the generic 0 to 1 ranges). The estimation of precalc time by the converter is now more accurate. In particular, it takes into account that the mpitchdecay, bpitchdecay and moddecay updates are faster if the parameters have neutral values (in the middle). For coders wanting to integrate the synth into their intros, an option has been added for you to take over responsibility of performing the note triggering DMA write. This way, the synth code will not waste any precious raster time busy waiting for the DMA to reset. The new version is backwards compatible in the sense that old samples created using Cinter 3 can be used in modules together with new Cinter 4 samples. The converter detects which version the sample was created with and does the conversion accordingly. To facilitate this detection, the first character of the sample name is now used as a version indicator. Thus, it can no longer be changed arbitrarily. The converter recognizes it as Cinter 4 if the first character is a number, or Cinter 3 otherwise. The number itself is reserved for future use.
|
corial
Member |
I just read through the readme.txt. What options do I have for sync'ing - I would imagine that there are some sync-handlers available? I'm a very happy "The Player row'n'pos-sync'er" and would like something similar, as I don't fancy rewriting my demosystem. Is that technique somewhat supported in this new version, Aske? Or what do others do? Does everybody else really wire up Rocket?!
|
Blueberry
Member |
There is no such feature in the player at the moment, but it could potentially be added.
The music data itself does not contain any information about the original structure of the module (it is entirely vblank-oriented), so some extra data structure containing this information would be needed. This could be something like a list of pattern lengths for each position, and the number of vblanks for each row in each pattern. Such a data structure could be easily generated by the converter. It gets somewhat more complicated if you do funny things with the B command, but you would be confusing yourself anyway in this case. :)
|
corial
Member |
I would certainly be interested in the "row/pos"-ish feature. And of course I volunteer as tester :-)
|
dodge
Member |
Let me ramp up the demand on such a feature. I too am synchronising my scenes by pos/row conditions. Even wrote a ton of macros for it. I had vowed on Revision to implement Cinter this year in our framework, so this would be totally rad, since I'm completely at a loss regarding rocket. Mostly because I develop on a native environment.
|
Blueberry
Member |
I hear you regarding the position/row feature. I will look into that at some point... Meanwhile, I have re-implemented the instrument building part of the synth as a stand-alone VST. Thus, the music-making workflow gets somewhat simpler, as you don't have to mess around with MetaSynth (which also happens to be unavailable due to a DMCA takedown). The VST is built in versions for Windows, Mac and Linux and the usual variety of bit widths. So whatever platform the musician uses, it is no longer an excuse to not use Cinter. :) I hope this update will result in more usage of Cinter. I am especially curious about the additional potential of the new features of Cinter 4. The opportunity to be the first to use it in an intro is not yet taken! ;) Get the new version here!
|
tecon
Member |
Kudos Aske! I was trying it out just now, but there was no 'Cinter4.lua' file... instrument wasn't saved. I tried renaming Cinter3.lua but it didn't magically fix the problem like I hoped..
EDIT: Now I recognize that I didn't have the original archive for this version, but that didn't help me though.. I'm playing an E4 note but no raw sample appears in the supposed folder.
|
FIREB0Y
Member |
Hi, I´m on the same problem with the latest version.
I had to find some 2015 version of Metasynth, that just works:
When i select Metasynth as the VST, shows a requester and i select cinter4.lua and voila! It saves RAW file when i press e-4 on the keyboard, as expected.
Then i create a little test mod, and converted with Python 2.7.13. and convert.py script.
I gave the result file to a friend and he codes it into an executable, but the song notes plays offnote a lot.
I just want to use the latest version of Cinter, but it does not save the sample on the folder...
Any help?
Thanks in advance.
|
Blueberry
Member |
The synth writes the sample to the current directory, which in the case of a VST plugin running in a host is the current directory of the host. You need to make sure that it has write access to that directory. On Windows, a program running from a "Program Files" subdirectory typically has that directory as its current directory and does not have write access. Try running the host as administrator and see if the sample shows up. I would like to have some mechanism for specifying the output directory, but I am not sure how should work. Suggestions are welcome! FIREB0Y: I gave the result file to a friend and he codes it into an executable, but the song notes plays offnote a lot. Hmm, that's not good. Post a link to the test module, then I will investigate.
|
FIREB0Y
Member |
Blueberry: The synth writes the sample to the current directory, which in the case of a VST plugin running in a host is the current directory of the host. You need to make sure that it has write access to that directory. On Windows, a program running from a "Program Files" subdirectory typically has that directory as its current directory and does not have write access. Try running the host as administrator and see if the sample shows up. Thanks a lot Blueberry, you are right! I have run as administrator Renoise and the VST now saves the sample on the main Renoise dir. I will move my Renoise dir to a different location so it will have always write enabled to that dir. Perhaps the Readme file is also wrong, as it says that the sample will be on the same folder as the .lua file, that isn't needed anymore with the new release, so you have to guess where the sample is generated. I have created some folder containing the mod, the Python script generated code(the script says no errors on the file), and the executable done by my friend, it is just a exec that change screen to grey and plays the mod using the replayer routine, exits by mouse click. I am not a coder, so I cannot say if has been well compiled or not :/ The folder is here: https://mega.nz/#F!TsRknS7I!oMjTLtGx7vKnD-iBRU3zwQ It will be nice to get a requester to save files when selecting the VST, so you can put them anywhere ;) Thank you again, you are great! ;D
|
Blueberry
Member |
OK, so I finally got around to looking into the module you linked. Sorry for the delay. It turned out there was a serious bug in the converter script, so it would convert the pitches of Cinter 4 samples incorrectly for all pitches that were not whole octaves. This is now fixed. And you requested a requester, which was a reasonable request, so you got it. The VST now opens a directory dialog when you play E-4, so you can choose where to save the sample file. The name is still fixed, of course. All that talk about Lua files was just outdated documentation. This is also corrected now. Get the new version here. :-D
|
FIREB0Y
Member |
Blueberry: OK, so I finally got around to looking into the module you linked. Sorry for the delay. It turned out there was a serious bug in the converter script, so it would convert the pitches of Cinter 4 samples incorrectly for all pitches that were not whole octaves. This is now fixed. And you requested a requester, which was a reasonable request, so you got it. The VST now opens a directory dialog when you play E-4, so you can choose where to save the sample file. The name is still fixed, of course. All that talk about Lua files was just outdated documentation. This is also corrected now. Don't worry, it have been Christmas holydays, so we have to stay more with our family, etc... Great news! I am so happy to help you finding and getting rid of that annoying bug! I have tested the requester requested at my request, so renoisable requested request of a requester works perfect! Now is time to do some noises on PT and test them on the script!!! Also the requester helps to put the generated sample on a location, so you can do some dirs to classify them(bass, drums, etc...). Very nice an good work! Nice to see the Readme file was also corrected to avoy mistakes using it! I and my friend will do some tests and posting here, Thank you again for the hard work! Cheers, Fireb0y
|
flynn_nrg
Member |
Hi Blueberry,
I'm trying to integrate Cinter into our framework (https://github.com/flynn-nrg/tornado-amiga) but can't seem to get any audio out for no obvious reason.
I assembled your example and could not get any audio out either. I've gone through the source code and can't figure out why this is happening.
I'm testing on fs-uae at the moment with my standard A1200 with blizzard 1260 config, the same I always use for development and that has always worked flawlessly.
I'm using the CurtCool's automatic song, converted the python script and the output of the converter looked all ok.
Do you have any ideas of what could be causing this?
|
|
|