Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - ArcherCDP

#1
CDP Software Maintenance engineer Richard Dobson writes regarding the question about PVOC frequency & amplitude v. phase shift & amplitude:

The short answer is, yes, we really do mean frequencies. Techncially, "frequency" (as a nominally continuous artefact) is defined as the rate of change of phase. This is why sometimes the phase vocoder has been referred to as a "tracking" vocoder, simnply because it tracks the (rate of) change of phase over time. A zero rate of change would equate to a constant DC level.

In the original pvoc, understood very much as an accumulating (sliding/overlapping frames) FFT-based process, data could be output in all the possible formats: raw "complex" values as delivered by the FFT, or either of amplitude/phase or all the way to ampltude/frequency. For pure analysis tasks, amp/phase is still often used. But in CDP (and likewise in Csound etc), we want to make weird transformations of the source and resynthesise it - this is very much easier and more "intuitive" with the classic amp/frequency format. It means, for example, that resynthesis can be done (from the same data) either by pvoc or by direct oscillator bank.

Some transformations (such as zeroing the amplitudes in some analysis bins) are "incorrect" mathematically (in terms of strict band-limited "linear" DSP), but composers rarely care about that. So long as the results are both interesting and mostly correlate with the intention, we just get on with it!

The "pvocex" program now included in the CDP system is a straight port of the origial pvoc (but creating pvx files), with (almost) all the original flag options.

Cheers,
Richard
#2
General Board / Re: tabula vigilans
September 29, 2024, 05:25:34 PM
Hi, There is not a specific tutorial for Tabula Vigilans apart from the Manual itself.  The example scripts included with the distribution were considered to be the tutorial element.  I have been working sporadically on assembling all the scripts that Richard Orton wrote and placing additional explanatory comments in them.  This query about tutorial material urges me to complete this task and publish the results.  Archer
#3
Hello,  Thank you for your query about PVOC usage.  The references to pre-Release 4 usage flags were put there at the time of Release 4.5 in order to alert existing users at the time to the changes.  These references are now completely redundant and the current usage and descriptions are the ones to be followed.  I will recommend that the yes, confusing, references to pre-Release 4 usage be removed from the Manual.  I myself just use the default settings, so the command lines are very simple, e.g., pvoc anal 1 infile.wav outfile.ana and pvoc synth infile.ana outfile.wav.

As to the query about frequencies and amplitudes v. phase shifts and amplitudes, I will have to check with the experts on this before replying.  To be continued.
#4
General Board / Re: ProcessPack
September 26, 2023, 04:40:21 PM
Hello pmj,

ProcessPack has not been updated this year.  Copies of the software are currently available direction from Archer.  Please email archerhgm@gmail.com.  There is no charge for it as the author, Richard Orton, made it a free download before his untimely death in 2013.  Thanks.  Archer
#5
General Board / CDP and M1
March 18, 2022, 12:30:15 PM
Dear CDP users,

We are getting an increasing number of queries about the new Apple M1 machines (ARM architecture).  At the moment we cannot compile for the M1 and request help from the CDP Community.  In the first place, we do not have an M1 machine nor the resources to purchase one (free software has its drawbacks).  Secondly, the SoundLoom GUI is written in TCL/TK using v8.5 and there appear to be various support problems for M1 that concern SoundLoom.

Ways to help:

- Please let us know if you have successfully compiled the CDP code for the M1 and are able to use CDP with this processor and its related OS.  If so, would you be willing to share the expertise that has enabled you to do this.

 - Forward any information about TCL/TK and M1 support

 - Would someone be willing to try to compile CDP for M1 and correspond with Richard Dobson about how it goes (richard@rwdobson.com)

- A final option would be to donate a spare M1 computer to CDP

We have been doing our best to keep up with the many OS changes that Apple have been making, but the M1 is so far a step too far for us.

Please respond to the Forum and/or directly to the CDP email address: cdpse9@gmail.com

Thanks very much,
CDP
#6
General Board / Re: Having an issue with newmorph2
November 24, 2020, 08:25:27 PM
Dear List,

I can confirm that the problem with NEWMORPH2 was an error in the Usage, which showed an incorrect order for modes 2-3.  It says:  analfileB peaksfile outanalfile. 
This Usage has now been corrected so that it keeps to the conventional order of analfileB outanalfile peaksfile (etc. parameters).  The program should work if entered in this order.

This does not include the sfsys fix for 24bit WAVEX mono. (See thread about DISTORT REPEAT).  This will require a full recompile of all programs on both platforms (along with updating the GitHub repository) -- message from Richard D.

Cheers,
Archer - CDP
#7
General Board / Re: Having an issue with newmorph2
November 11, 2020, 03:59:49 PM
Hello James,

We have confirmed that there are problems with the command line.  Yours was correct, so it's the program which is at fault.  The matter is being referred back to the author.  I'll keep you posted.

Archer
#8
General Board / Re: Having an issue with newmorph2
November 10, 2020, 10:26:49 PM
Hello James,

I have duplicated this error.  I suspect that there is a bug in reading the command line arguments.  We will test this and get back to you.

Thanks for your query.

Archer - CDP
#9
General Board / Re: Run Mix Failed
July 14, 2020, 07:24:18 PM
Hello,

I've been looking at this today, especially as I haven't tried to run a batch file from within Sound Loom before -- I tend to use the command line / terminal for this.

After several boss shots in which my mixfile 'could not be found', I finally realised that the full patch to the batch file has to be used in the batch file.  I had my mixfiletest.mix in c:/p3l/aesrcs and used GRAB to put it on the Workspace, where it showed the full path, but this wasn't enough for the batch process.  When my batch file read:  submix mix c:/p3l/aesrcs/mixfiletest.mix outfilename.wav  (and the mixfile itself included the full path to the soundfiles -- even if they had also been GRABed to the Workspace), the BATCH process ran OK and produced an output soundfile.

I could not duplicate the exact error message re cdptest0.wav  cdptest1 that you posted.

However, a message saying that it cannot open cdptest0.wav will occur if the environment variable CDP_SOUND_EXT has not been set (to wav as the 'value').   If you are running the Version 7.1 CDP program set, however, this should no longer be necessary.

Please check:
a) that you are running the 7.1 program set (dates of the programs will be mostly 2016)
b) or set the environment variable as above
c) and that the mixfile and batchfile both include full paths, as described above.

I hope this helps!

Archer - CDP
#10
Hello,

This query about NEWTEX has revealed a number of issues, both a possible bug and more than one ambiguity in the documentation.  We are doing some work on this and will post more information as soon as we can.  Please note that on the command line some parameters require a flag.  E.g., the flag for the splice parameter is -s, so entry would be for example -s0.35.  Optional parameters are placed inside square brackets [...].

Archer - CDP
#11
General Board / Re: quickest way to compress amplitude?
November 09, 2019, 05:31:59 PM
Hi,

Note that ENVEL RESHAPE uses an envfile as the input, but ENVEL WARP uses a soundfile as input -- i.e., the extraction is built in.  I don't see 'compress' in the list of functions -- which one did you use? Flatten? Gate? Limit? Ducked?  (or is it named differently in your version of the software?).

It's not something I've used, so look forward to other answers.

ArcherCDP

#12
As far as I know, this has been thought about but not done.  Given the potential for scripting with CDP, it could be an extremely powerful tool.

Archer - CDP
#13
General Board / Re: polyrhythm
November 02, 2019, 12:12:22 PM
I take it that by 'polyrhythm' you mean different rhythms played at the same time (as opposed to additive rhythms:  different rhythmic groupings in succession).

There is a trick that can be used via a TEXTURE program that uses defined motifs.  The trick is that a motif does not have to start at 0.  Suppose one motif is a series of quavers (quarter notes), each starting on the beat, the whole motif starting at time 0.0.  A second motif could create off-beats by starting the same motif at time 0.5 (and possibly giving it a higher amplitude) -- in effect creating a quaver rest by starting the motif at time 0.5.  The 'mult' parameter can be used to control tempo.  It's a long time since I've done that, but I think it's how I created a 5-part drum texture.

The motifs/sounds would mix together quite a bit if all done in one ndf.  Or, separate ndfs and their resultant sounds could be done (with motifs not starting at time 0.0)  and then the sounds MIXed, all the soundfiles starting at time 0.0.

Or, make the motifs all starting at time 0.0, creating separate soundfiles, and then mix them, each starting at a different time.

The texture trick is, I think, the easiest way to create a virtual sequencer.  The main consideration is how contrapuntal the result needs to be, i.e. that each rhythm has its own sound.

TEXTURE TMOTIFS will start motifs at the times given in a rhythmic template.

So there are a number of ways in which one could approach creating polyrhythms with the CDP software.

Archer - CDP
#14
General Board / Re: Has TUNEVARY worked for ANYONE?
November 02, 2019, 11:42:11 AM
Hi -- Thanks for your query.  We have tested TUNEVARY and find that it works OK on the MAC but fails on the PC.  It doesn't look like a serious problem, so we hope to have a fix available soon.  It is like PITCH TUNE but allows the user to create a file with separate tunings for separate event times. 

Example datafile:
0.0  48 52 55 60 64 67 72
5.0  48 51 55 60 63 67 72

In this way it is similar to FILTER VARIABLE.

Archer - CDP.
#15
General Board / Re: Texture note generator
November 02, 2019, 11:23:52 AM
 :)

You asked:  "Any advice for routines in C, Python, Basic etc. that can generate note score files for texture?"

The answer is very much Yes.  This raises a topic in which I am very interested, namely the use of scripting to create files for the various CDP programs.  Such scripts can have algorithmic features that would be tedious if not impossible to duplicate by hand.  It is a very powerful aspect of the CDP software that the programs can be run from a command line.  I believe that the development of such scripts can form an important part of CDP's future and am working to this end myself. 

The method for doing so was established a along time ago by Paul Rhys.  He wrote a perper and a script in Richard Orton's 'Tabula Vigilans' scripting language to create Csound score files.  The overall procedure is straightforward:

- establish arrays to hold data
- if applicable, open a data file for reading and read the data into an array
- manipulate this data or create new data by a customised procedure
- optional:  preview the result via MIDI playback
- open a file for writing
- write the data to this file in the format required by the CDP program

Here is a write procedure for a TEXTURE note data file using Tabula Vigilans.  The write functions in Tabula Vigilans are stori (write an integer), store (write a floating point value) and storstr (write text).  They need to be replaced by the appropriate write function in the scripting language being used.  It is assumed that variables would replace most of these numbers.  Some variables are shown below.  Note that steps 1 and 2 are done first and separately:  they are written only once, whereas the procedure for the data lines is called for each line -- the changing values are fed into a Play procedure in the same pass in order to audition them.  This file is for TEXTURE TIMED.  Comments here begin with '//'.

1. write the nominal pitch value:        stori 60
2. write the number of lines to follow:  storstr #
                stori 21  (for a data loop of 21 items)
3. write the data lines, separating data with spaces or tabs:
write_ndfTimedfiles()   //MODE 4: outfndftxTimed.txt, outftxpch.brk,
{         //  outftxvelocities.brk

  //this section stores the data lines for a TEXTURE TIMED ndf
  //Format:  time 1 0 0 0
  //This is simplified when variables and text can be written in the
  //  same line, a feature in C & Python, and coming soon in Tabula Vigilans
  //  thanks to John Ffitch
  store eventtime   //write the event start time
  storstr "\t"      //write a tab
  stori 1      //write the required but non-functional '1'
  storstr "\t"      //write a tab
  stori 0      //write a '0'
  storstr "\t"      //write a tab
  stori 0      //write a '0'
  storstr "\t"      //write a tab
  stori 0      //write a '0'
  storstr "\n"      //write a newline
 
  //this section writes a separate pitch breakpoint file for the pitch
  //     parameter on the command line (optional)
  store eventtime   //write the event (start) time
  storstr "\t  "   //write a tab
  store pch      //write the pitch value
  storstr "\n"      //write a newline
 
  //this section writes a separate breakpoint file for velocity
  store, eventtime   //write the event start time
  storstr "\t"   //write a tab
  store vel      //write the velocity value
  storstr "\n"     //write a newline

  eventtime += dur   //update the event time with the event duration
}

(Tabula Vigilans syntax is a slightly more complicated than what is shown because multiple output files are involved.)

The same basic procedure is followed for other types of note data file, including adding a Harmonic Set option.  (The note data file for TEXTURE SIMPLE Mode 5 has only the nominal reference pitch(es).)

This is a sample (MIDI) Play routine as used in Tabula Vigilans:
play()
{
    xx = try(midiout chan, pch, vel, dur)    //play MIDI output
      if(xx > 0) {
        d += 1                //do nothing dummy
      } else {
        messag1 "\nmidiout has encountered a problem"
      }
    wait dur
}

I would then create a batch file to run TEXTURE TIMED with this (named) ndf file and, optionally, with the pitch and velocity breakpoint files made at the same time.  This creates the rhythm defined in the ndf with one or more soundfiles.  Here is an example batch file:

*****
rem TEXTURE TIMED (if > 1 sfile input, hand-edit ndf to add more nominal pitches)
rem .. mode inf(s) outf ndffile outdur skiptime snd1st sndlast
rem   mingain maxgain mindur maxdur minpch maxpch -aatten -pposition -sspread

texture timed 5 tshc1g.wav r7tshtimed.wav outfndftxtimed.txt 10 0.93333 1 1 outfvelocities.brk outfvelocities.brk 0.5 1 outftxpch.brk outftxpch.brk -a0.9 -p0.5 -s0  -w

pvplay -i r7tshtimed.wav

rem Delete output soundfile before running again.
*****

There follows a complete template script for creating a Csound score file, based on Paul Rhys' original concept.  It shows how the various procedures are put together.


//cssctmpl.tv - TV script template for writing Csound score files

table  FREQS[12]

start()
{
   if(init == 0) {
      call initialise()
   }

   call headings()

   call sample_process()

   call ending()
loop
}


headings()
{
   storefile "acsscore.sco"         //filename
   storstr ";acsscore.sco - a Csound score file\n" //title banner
   storstr ";\ttemplate example written with TV\n" //purpose
   storstr "f1 0 1024 10 1 0 0 \n\n"      //an f statement
   storstr ";instr\tstime\tdur\tamp\tfreq\n"   //pfield names
}


sample_process()
{
   for(i=0; i < 12; i += 1) {
      storstr "i"
      stori instr
      storstr "\t"

      store stime
      stime += 0.75
      storstr "\t"

      store dur
      dur = random(0.25, 1.5)
      storstr "\t"

      stori amp
      if(i < 6) {
         amp += 1000
      } else {
      amp -= 1000
      }
      storstr "\t"

      freq = FREQS[ndx++] //UP: C-Eb-G-A-Bb-C Dwn: C-B-Ab-G-F#-Db
      store freq
      storstr "\n"      //create new line of score data
   }
}


ending()
{
   storstr "e"
   end
}

I hope this goes some way to answering the question.

Archer