Pulsar TODO List
----------------

28/06/97
--------
1- add-ons : add bdirectory of appdir and addondir so that add-on can
easily load images stored there. 
RDane
2- change threading :
- the stream fills in a buf with raw sound
- the master thread has a loop : issue double buffering with sound buffers
  (within a lock) compute 2 fft (in two threads ? only usefull on dual) and
  synchronise the two child threads (always two).
- the first child thread outputs the fft and the raw into the sound monitor
  window
- the second calls the filters with the info and wait for them to terminate
  then blits the output if it is in a window or just swap buffers if it is
  in the game kit.

3- Must have a way to handle parallelizing of filters.
   Is that usefull ? They will blit in the same output buffer so not
   as good as it could be. Multiple output buffers will be just pain.
   Image filters with a graph like in AudioElements.
   Problem : the graph may change at any timecode ! :-( gui design...

4- discussed of interface with Jean-Marc yersterday until 4'am...
   there good feedback with him. Feedback from Dylan Norstrup too.

5- Preview window for filters, with a sample sound test [Sophie/280697]

29/06/97
--------
6- Add key shortcuts for : Start stream, stop stream, monitor of two
   windows + CD access (play,stop,pause,next,pref) even if no interface

7- by default, at startup enable ADC & Start of stream, then if Start button
   on check the two monitor windows if not checked. (auto mode = pref)
   No windowscreen by default, it's a bad idea (hang on macs ?)

8- img directory with BDirectory in struct SFilterInfo.
   Also recreate directories at startup if do not exist.

9- try using a class rather than a struct for SFilterInfo

30/07/97
--------
10- ok, now CFilter add-on work for the Sample Add-on.

01/07/97
--------
11- more time for coding... in that order :
    a) start interface window,
    b) support brutal-force full screen,
    c) rebuild underneath structure with correct threading,
    d) check datatype lib linkage and add usefull html/txt documentation
       before releasing.

02/07/97
--------
12- only coded some dummy test for the interface transparency, then
    removed it. Unsucessfull changes to the CFilter stuff.
    Add some luser comments in the CFilter.h and SampleAddOn.

12b- beta test for Pulsar with Jacques Brel songs (a well known French
     singer) and I must say that it looks great. FFT on human voice of
     Jacques Brel is funny but hardly usable as is.

03/07/97
--------
13- Great idea while documenting the CFilter.h !! I've totally
    reorganised the add-on, it would be (almost) final like that,
    there is also stuff for the filter to declare if it wants to be
    at the beginning or the end of the filter stream
14- While re-implementing the Copper Bar add-on by SpH, I also included
    the code in the app to support the order of the add-on.
15- I must code the interface for add-on parameters now...

16- The only stuff I will add is a way for the add-on to know its order
    in the list -- and possibly let him rearrange itself.

17- Well, I'll better introduce a reoderer-add-on, as well as a scheduler
    add-on. The ReOrderer : it has the power of modifying the order of the
    filters in the stream. The scheduler : it has the power of saying, for
    each frame, which add-on will be used.
    Nice effect : the Scheduler add-on can use the FFT values to switch
    between one or more add-on depending on the bass or the high frequencies.

18- I must add a window filter on the FFT input. A gaussian like should be
    sufficient.

06/07/97
--------

19- Add-ons : for filter or others, button "parameters" in the interface
    that call the addon showParams() --> display window, etc, the addon
    does what it likes / i.e. params not related to a specific track.

20- change add-on params to BMessage : filter and others create a model
    BMessage that is stored in a database of tracks/filters/params.

21- Filter parameters should have controllers keys like in 3dsmax, i.e.
    default controller is the linear interpolation, but should also have
    a spline/log/threshold/etc. interpolation.

22- BMessage vs. BList of SFilterParams ?
    Another method : the filter allocates a new SFilterParam[N] and
    defines mNbParam=N. Pulsar uses this as a model and duplicates it
    and changes the duplicated version occording to the database of
    keys.
    The advantage of the BMessage : easy to store.

11/07/97
--------

23- Change add-on :
    a) position is a float, with 0.0=first in stream, 1.0=last in stream.
    b) add callback to display & manage a view, used when the addon
       info window is opened.
    c) give the add-on an entry_ref on himself for getting attributes and
       resources.

24- Change threading, hard stuff.

15/07/97
--------

25 - added 32 bits support, multithread is correctly semaphorised,
     filter now have processFrame8 and processFrame32, and then also
     have full hooks to graphics driver, and can now know which amount
     of video memory is free in game kit and maybe use it.
26 - still lacking 32 bit support in preview window.
     still has to support float position when loading,
     line_array hook is yet to be inserted,
     fft/sound means and 16-block means are yet to be done,

16/07/97
--------

27 - added Keftale & rotozoom algo with SpH. Not yet an addon.

17/07/97
--------

28 - corrected 32 bits. now works. added icons and name in 
29 - still lacking mono-flipping mode (!!) for game kit card with
     only 2 MB of RAM for 32 bits mode.

18/07/97
--------

30- still lacking full doc about CFilter. Blended addon and slider addon
    using fade out sucks in 32 bits. Too slow.
31- inserted stuff for managing tracks, input methods, keys and filters
    parameters, but still no way to use them in the interface.
32- should make the play CTrack-centric rather than gApp-centric. Sure ? :-/
33- should have more icons for showing 8/32/stream position of filters.

19/07/97
--------

34- What I MUST do :
	(a) an addon for playing QT,
	(b) prepare the interface window for showing filter info,
	(c) include default param management there,
	(d) code stuff for tracks, keys and CD input method. A lame version first.
	(e) have an interface for showing ONE track and ONE input method (CD).
	Just so that JiM can make the bitmaps.
	(f) Make all this work under PR [Interface : :), Game Kit :( ?]

20...21...22...23/07/97
-----------------------

35- Too much hack. Time to distribute a scratch version tomorrow,
    then distribute a better one the 25th. What I did this last week :
    - make it work under PR,
    - adapt to BWindowScreen
    - correct BWindowScreen bugs in my own code,
    - code the tracks : mouse code, drop stuff, etc.,
    - debug the track,
    - use the track info,
    - audio CD interface,
    - datatypes 1.6.3 support,
    - write tutorial & add-ons guide (not yet finished for the add-ons)
    - have Chris Herborth correct my tutorial English :)
    - integrate the latest buttons from JiM,
    etc, etc.

36- More to go tomorrow : finish the QT stuff, the rotozoom and keftale
    stuff...

37- even more to do before the BeDC...

24->25/07/97
------------

Latest stuff changed tonight and that's not referenced in the tutorial html document :
1- CD player stuff:
	- it's plugged in the interface
	- it always assume your CD is stoped and will play the track 1 if any
	- when you press FullScreen or Preview, the CD will play if it's not already doing so.
	- I now correctly find the SCSI CD, at least mine , thanks for cdplay.c source code
	  and for Huber Andreas for illuminating me on the right way :)
	- I didn't test with an IDE Audio CD device.
	- Backdoor : export PULSAR_CD_DEVICE to your Audio CD device if it doesn't show up in the
	interface.
	- In the interface you can switch between several Audio CD devices. This has not been tested
	but it should work !
	- No time to add a track number view :(
2- Full Screen:
	- you enter by pushing the button "FullScreen",
	- 8 or 32 bpp mode is IGNORED, Frame Refresh rate is taken into account,
	- I've heard that this doesn't work in Full Screen on 603-based PowerMac.
	Don't know why nor if I can rely on this information, but a friend told me it won't
	run on its UMAX bi-180 (Seb' Bouchex, Mailit author, with its Master Awards machine :)
	Too late to go and debug on his UMAX S900 & TwinTurbo 128, sorry ! :(
	- You can exit the FullScreen mode by pressing either X, Q, Z, F or the ESCAPE keys.
	- Pressing ALT-Q won't quit Pulsar. That's a bug but I like to see it as a feature.
2bis- You stop the preview by clicking the "preview" button again.
2ter- There is no backdoor to enable the 32 bpp stuff, it's just totally disabled until
      I have it run this week end.
3- Filters:
	- I didn't have time to code the filter parameters, even the simpliest ones.
	- there is a keftale addon, and a keftale rotozoom one too. More addons on next distribs
	I wasn't able to debug/test a couple of other in order to release them.
	- the filter that are presents should be (almost) bug free.
	- the source for the slider addon is a real ugly hack. Don't even try to look at it.
4- It successfully passed the MALLOC_DEBUG test ! 
   Nethertheless, you may sometimes crash when you exit while the Track View is rendering, I
   know this bug but you can always piss me off to make me correct it faster :)
   If you encounter any crash, please enter the debugger and type "sc", then copy paste me
   the result by email : raphael.moll@inforoute.cgs.fr
   You can also run Pulsar from the command line with a line like "Pulsar 1 > foobar.txt"
   then you send me foobar.txt. In fact, inserting *any* command line arguments enters
   the debug mode :)
5- I've just added the Input selector : CD, AIFF and MIC. The MIC is Bosted +20 dB on the BeBox
   hardware. Switching from CD to MIC can be done at any time, even when rendering in the preview
   but for the AIFF -> CD/MIC switch, I prefer you to stop the preview first. If you don't it
   will (try to) do it for you. :)

Too much things for a 24->25/7/95 coding ? Hummm let's read BeNewsLetter 83 and Kick it in.

25/07/97
--------

38- Presentation of Pulsar at BeEurope's HQ.

26/07/97
--------

39- Sleepy day...
a) added a zoom in/out box to the preview, cleaned up the code for the preview window,
   fixed its bpr (one pixel too much wide, bpr was 644 instead of 640).
b) fixed the filter icon list : icons were drawn one pixel to much at right
c) fixed the yellow/orange fillrect in the track, one pixel less at left & top,
d) changed arrows in the track by half-arrows : |/ and \|

27/07/97
--------

40- reinstalled PR bcoz it was losing more and more mimetype associations and wasn't
    able to open text files, jpg files, html files, etc...
    Maybe a mimeset all would have been enougth :)

41- optimized the Keftale Roto,

42- The Answer !
42a-Things I said SpH and that I must do in filters :
a) add info to know the location of the filter in the stream,
b) filter must also get the current time,
c) filter must also know when it starts playing and when it will stop for every bar,
d) prepare : the filter may get access to the parameters of its line,

43- map up-arrow and down-arrow on low/high master volume in game kit & interface

44- Now I added this :
a) the audio CD position is read at startup, so that when the preview/fullscreen starts,
   the CD is not reset but continues playing if it was doing so.
   I stil have to detect that the CD doesn't play anymore because it reached the last
   track and restart playing from track 1.
b) the CFilter now contains average info on the fft b/h and 8 infos per blocks of 32
   from the fft.

0208967
-------

45- Cool stuff, parts that must be optimized :
a) globals.cpp : streamer_fftlib : memmove -> use rotating buffer ?
   ok but must change CFilter::sFrameInfo.rawBass with :
   rawBassStart, rowBassEnd, rowBassCurrent.
b) CPulsarApp::pulsarThread, several things to come up there :
   1) get sound buffer copy : use double copy
   2) compute ffts in separate threads on multiprocessors machines
   3) disassemble fft suppress N/2 im part
   4) update fft window : separate thread may not be usefull here
   5) when using game kit, still render in windowed bitmap then blit
      to game kit using memcpy_c2nc or double copies
   6) when using windowed bitmap, use double bitmat buf too
   7) CPulsarApp::processFrameFilterAddons : dcbz for double erasing
   8) structural bug : mFilterReference.sFilter.eraseScreen is not frame dynamic

46- re-enable update fft window

47- make minimal distribution sets now, since that is no longer a BeDC distrib.

070897
------

48- Hacked a menu bar. Not all items are managed.
49- Definitively adopted the name of "PowerPulsar"
50- Bug correction : the about box text is not complete.

130897
------

51- Todo list for Apple Expo 97 :
a) Message for keys,
b) tracks : 2 modes, repeat and freehand,
c) vumetre & sound level, mapped on keys [CD level, master output level, input level]
d) 16-bit screen depth
e) Optional : make vertical addon optimal

140897-->170997
180997-->131097
---------------
Update this file.

051097
------
Coding party week-end for the active kernel of the PowerTeam.
Finally put up the CSimpleTrack (separated from the window), protected by a benaphore
(a real Benoittriquetphore in fact), which items can be atomically changed at any time
even during a play. Addons can be prepared and terminated on the fly while others are
playing when they are added or suppressed from the track. Addons can now display a custom
view inside pulsar Filter Info window, and they can create BMessage models (RSN the messages
will be displayed in the GUI and modified by the user and then dispatched back to the addon).
You can now develop more easily since add-ons can be reloaded on the fly (but this still erase
the current document).

121097
------
Used PowerPulsar at Tao's rave party. Lots of great ideas and collective knowledge from this fuzzy
experience.

141097
------
52- Keep the todolist up to date
53- Let's make two versions of PowerPulsar : the personnal edition and the party edition.
    (or the performing edition, cf. Monkey Island "we are performing")
a)  the personnal edition is for someone's own use, on a standalone computer, preferably grabing
    sound from the computer itself (cd, mod, mp3, aiff) and rendering on one screen. The computer
    has no noticeable hardware attached to it.
b)  the party edition will use dedicated hardware. Either it uses two machines, one or more rendering
    the video effects from some tracks values and the input music ; Or simply one machine with
    two video cards, one for running BeOS and the second one dedicated to the output. The music
    will preferably be acquired on the fly through the mic or the line in rather than generated by
    the machine (this also makes the machine speed more stable since there is no power less to
    decode mp3 or the like).
c)  the file format are the same between the two versions and there is very few difference in the
    internal engine, only semantic of usage and knowledge of the user changes.
    Both may be able to use the network detached interface to remote control the play.
54- advance the CFilter API
a)  now the structure is different, you link against the app, no longer include the CFilter.cpp
    file in your add-on project,
b1) must provide a way to cycle colors,
b2) must terminate the 16 bpp 
c)  provide more info about the current play and what's next,
d)  as a feedback, the filter increase an energy level that can be used by successive filters,
e)  add-ons can now display a custom view inside pulsar Filter Info window,
f)  and they can create BMessage models (RSN the messages will be displayed in the GUI and
    modified by the user and then dispatched back to the addon).
g)  integrate SpH simplied 3d when available.
55- Rendering engine
a)  feature a multi threaded engine that works more faster
b)  change the FFT,
c)  use separate frame buffers rather than poking directly to the video ram,
d)  better control of the UMAX hack
e)  select all this into a nice (?) preference window
56- Use libprefs
57- Advanced track. Finally find some time to code the track like I originally designed it.
58- Add an API for plug'in audio input methods -- forward it to Adnans so that he can create a MP3
    player.
59- Make it a Blanket add-on,
60- Make an add-on that creates a plugeable interface for Blanket add-ons so that they can be used
    into Pulsar :-) [hey, 59-60 is recursive...]
61- Try a 3dfx card with some help from Stephane.
62- Create add-ons derivated from this cool Chtugha source code !

161097
------
63- Change the track to include beats, selections, cut&paste, nice & efficient redraw
    by correctly caching the bounds.
64- Change the input method display for more buttons, the api and a cool display
65- Fix the CD detection stuff, it sucks a lot (mostly by lack of documentation).
66- Optimize main interface redraw speed.

181097
------
67- I changed the MIME type of the documents to "application/octet-powerpulsar"
    and associated them both an icon and an internal string ("PowerPulsarDoc").
    Also when an add-on is loaded, if it has a large "BEOS:L:STD_ICON" ressource icon,
    this one will be used if sFilter.icon is set to NULL (i.e. unchanged) when the addon
    is loaded.

231097
------
68- Now uses libprefs, create a pref for the app itself and one for the add-ons.

241097
------
69- Good number, I like it.
70- the main interface window now correctly saves its position and restore it. Going to make a
    generic way of storing window positions. Easy. Also want to keep a pref flag to hide/show
    the about box at startup.
71- Looking at the pattern view in the background of the main window to see if it can render
    faster.

031197
------
72- Updated the text file and build up an archive for 0.7.6b :
	Version 0.7.6 correct many features.
	- Mainly you can use it with ATI cards and IMS128 cards on Macintosh in fullscreen
	correctly, I mean with a descent speed and flicker-free.
	- There is a Preference window : play with the options and close the window. The
	options as used as soon as you change them (options relative to the fullscreen are
	only used when you stop and restart the fullscreen mode).
	- If you put a Matrox Millenium 2064 as your second video card, it will be correctly
	handled. I will see later to support any videocard there.
	- Prefs are saved with libpref 1.2.2.
	- You can change the content of the track while you're playing. Usefull in preview
	mode or when you use two video cards !
	- You can now see the volume change (-/+ keys) or the CD change (n,v keys) on the
	game kit screen while playing -- you can disable this in the pref/other by unchecking 
	the "use gk sup interface".
	- You can also get rid of the useful frame rate display :-p
	- The add-ons API has been a bit improved. You know need to link against the _APP_.
	Your addon can now display a view for settings in the info window -- check the fft2
	sample code for an example of ... well see yourself, guess and then ask me.
	- Don't care but I will change the addon API soon :-) I have bunch of things to add
	to them :-)
	- There are many others improvements but I can't remember them all right now. And I
	have bunch of things to code so just stay tuned.
73- Used the Register application of Kagi

// eot
