r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Sound] discussion about sound and audio implementation in REBOL

Maxim
16-Mar-2009
[167]
did you try using audigy?
amacleod
16-Mar-2009
[168]
no
I'll have a look..
Maxim
16-Mar-2009
[169x2]
its the best freeware multi platform recording/editing software
doesn't even need an install  :-)  and it works the same on mac and 
linux.
amacleod
16-Mar-2009
[171x3]
thanks
I do not see it..keep getting references to  a sound blaster card..
Is there a web site? or an other name?
Maxim
16-Mar-2009
[174]
doh... its audacity... stupid me.
amacleod
16-Mar-2009
[175x4]
got it thanks
Maxim, It works...Thank you very much!
How can you test if the sound port is already open?
Never mind just used an "if error? try [" statement..
Anton
19-Apr-2009
[179]
ICarii, I just quickly tried your synth2.r. It plays the song here 
on Linux, and matches the score. I wonder, though, how you are going 
to scale the program. Rebol's sound port is currently underpowered, 
and Rebol isn't fast at number crunching which is necessary for audio 
work. I don't like the idea of waiting for hours for a full song 
to render.. I would be looking for an audio processing system to 
hook into rebol.
ICarii
19-Apr-2009
[180x2]
im going to port it to R3 tomorrow and rely on Call to play sounds
but yes it is horribly slow.
Anton
19-Apr-2009
[182]
Well, I've been fiddling with Tiny C Compiler - maybe it can eventually 
be used for fast crunching.
ICarii
19-Apr-2009
[183x5]
R3 build-song speed (without optimization) plus write to disk is 
1810ms vs R2 of 2862ms. So even without optimizing in R3 there is 
a large difference in performance.
added an interpolate function for dual channel sound and works fine 
:)  still slow on initial build though :(
interpolate: func [series1 series2 chunksize /local ts1 ts2 c][
	ts1: copy series1
	ts2: copy series2
	c: copy #{}
	forall ts1 [
		insert tail c copy/part ts1 chunksize
		insert tail c copy/part at ts2 index? ts1 chunksize
		take/part ts1 chunksize - 1
	]
	c
]
hmm that works with the take/part in the forall but: 		loop chunksize 
- 1 [next ts1]
may be safer?
ahh.. i should have used forskip .. never used that before
interpolate: func [series1 series2 chunksize /local ts1 ts2 c][
	ts1: copy series1
	ts2: copy series2
	c: copy #{}
	forskip ts1 chunksize [
		insert tail c copy/part ts1 chunksize
		insert tail c copy/part at ts2 index? ts1 chunksize
	]
]
Dockimbel
19-Apr-2009
[188]
Try with :

interpolate: func [series1 series2 chunksize /local ts1 ts2 c][
	ts1: copy series1
	ts2: copy series2
	c: copy #{}
	forskip ts1 chunksize [
		insert/part tail c ts1 chunksize
		insert/part tail c at ts2 index? ts1 chunksize
	]
]


Why do you copy the 2 series? It's not required here, you're not 
modifying them.

You should also pre-allocate the 'c buffer : c: make binary! <max-size>.
ICarii
19-Apr-2009
[189x2]
ahh thx - re copy - that was an artifact from the first iteration 
of the function where i was using take in a loop.
next on the list of todo's is to separate top and bottom notes and 
timings and add in rests.
Dockimbel
20-Apr-2009
[191]
Just tried synth2.r, nice work by the way.
ICarii
20-Apr-2009
[192]
:)  its getting there slowly - i really need to look at ADSR envelopes 
so 16bit samples dont sound so horrid :)
Rebolek
20-Apr-2009
[193x2]
ICarii, have a look at my PM-101 http://www.rebol.org/view-script.r?script=pm-101.r
I use 8-point free envelope there (ADSR can be easily emulated using 
just 3 points), maybe it will be of some use for you
ICarii
20-Apr-2009
[195]
will do :)  ive been looking at using piano waveforms but they require 
too much number crunching for rebol :(
Rebolek
20-Apr-2009
[196]
I was compiling the math functions to C and the result was about 
5-10x faster (not optimalized), but I cannot find that code right 
now.
ICarii
20-Apr-2009
[197]
pm-101 reminds me of an aircraft console ;)   once it stops scaring 
me ill look more closely :)
Rebolek
20-Apr-2009
[198]
hehe :)
ICarii
20-Apr-2009
[199]
i was thinking of prebuilding and saving envelope shapes and modifying 
the tone like a mask
Rebolek
20-Apr-2009
[200x3]
I was also working on tracker-like program (not published). I had 
a simple format for notes there that was similar to sequencers - 
I was using tuple! for timing information, it may be better than 
having two blocks, one for notes and one for timing.
so it looked like 1.1.1.1 C1 0.0.1.0 1.1.2.1 D1 0.0.1.0 etc
I think it was used in my demo pitch.green for Rebol demo contest
ICarii
20-Apr-2009
[203x2]
i intend to fully reproduce sheet music so the format is still a 
little in teh air at the moment
the next version of synth is using a top/bottom stave block with 
separate timings
Rebolek
20-Apr-2009
[205]
Ah, OK
ICarii
20-Apr-2009
[206x2]
i am also trying to make the R3 conversion as simple as possible 
by keeping most of it generic
its taking me a little longer than i thought as im having to learn 
acoustic physics :P
Rebolek
20-Apr-2009
[208]
Yes it's better to have the generator totally separated from the 
UI.
ICarii
20-Apr-2009
[209]
yes - i have an R3 synth version now that can build the wav files 
in the same manner as R2
Rebolek
20-Apr-2009
[210x2]
nice
I should have a drumsynth for R3 somewhere, I'll try to find it.
ICarii
20-Apr-2009
[212x2]
heh :)
wait ... for R3? can that do sound now?
Rebolek
20-Apr-2009
[214]
No, just save the sound as WAV or AIFF
ICarii
20-Apr-2009
[215]
ahh ok
Rebolek
20-Apr-2009
[216]
it uses vector! for storing sound data