Support and General Use > Recording
New recording idea, a bit crazy
lenny:
yeah. it would record all the tracks to seperate wav files. I'm not suggesting that new tracks get mixed in with the old, or that it re-records the old tracks over again, that's not really how a multi-tracker is supposed to work. (And I'm not upset at all if all of you didn't understand what I was saying, I'm know the way I said it was very unclear/incomplete.)
I'm hearing from you guys for the most part that cpu wise it's possible, after all, how hard is it to play/write uncompressed wav?
I think there is a plugin already that can split mp3 tracks (and wav?), but it hasn't been ported to the iriver yet. As far as the other stuff OtisFunkmeyer, that sounds cool too.
fizze- I suppose there would be a delay, but is it possible that it would be the same everytime and therefore automatically adjusted? also, could you explain what you mean by that memory bandwidth stuff, do you mean loading multiple wav files for simultaneous playback would fill up the memory quickly, meaning more disk access. I do suppose this is something one would want to do with the charger.
And MoAv, when I was reading your post I remembered something funny. Awhile back I encoutered a bug that let me play an mp3, go into the recording screen and while it was still playing start recording, and it recorded the song! So I'm pretty sure (while having no technical knowledge) that cpu wise, it can handle this idea. I'd be curious as to find out how many tracks it can handle. Even two would be worthwile to me, but I would hope for more. I suppose one would have to write the plugin to find out for sure which reminds me...
--- Quote from: lenny on December 10, 2005, 08:16:12 PM ---If I were to say that I wanted to learn how to program just so I could write this thing I'm dreaming up, what would I need to learn and how long would it take me to do learn so I could write this assuming I've got a good head on my shoulders? (the most complex I ever got language wise was php)
--- End quote ---
fizze:
No, I mean that you have to interleave (mix down) multiple WAVE audiostreams to a single one. and this means a lot of memory activity.
think of an 8-track:
44.1kHz, 16bit, mono sources means 88200bytes / sec., times 8 means 705600bytes / sec.
you have to downmix these to 1 stream (which takes some cpu) (essentially shifting them 3 bits to the right and adding together).
so, you have the 8 sources somewhere in memory (in different locations), so caching will miss (if the unit has (half-decent) caching *shrugs*)
so thats RANDOM memory bandwidth, combined with a lot of cpu.
sequential memory access is a LOT faster, cos CAS / RAS delays may be bypassed, and let alone caches. almost true random access is slow. so thats why its the limiting factor.
still, one could work at 22050kHz @ 16bit which would half the b/w amongst other tweaks.
pabouk:
lenny - Yes, the delay will be constant and it can be (easily) eliminated.
fizze - The (possible) problem with intensive memory access to many different locations can be solved by interleaving the audio buffer. Example of 16 bit words storage for 3 channels playing and one recording (channel number 4):
Representation: [5s20] is the 20th sample of the channel number 5.
--- Code: ---[1s01][2s01][3s01][4s01][1s02][2s02][3s02][4s02][1s03][2s03][3s03][4s03]...
--- End code ---
Interleaved disc storage would be useful too but I do not know if it is possible with the standard wav format.
Edit after a little bit of thinking: The interleaved memory buffer without the interleaved file format (i.e. single file for all the channels) would be difficult or impossible with DMA transfers between the disc and the memory...
The limit of number of simultanously playing channels can be overcome by preparing the mixed track before playing it (i.e. not mixing it in real time) while still retaining the unmixed channels but I think hardly anyone would like to use more than 5 channels.
Another idea: It would be almost perfect tool if one could prepare a "mixing profile" i. e. another (meta) track with stored volume changes, position in stereo, filters etc. of the channels to mix.
fizze:
erm ? 5 is a wicked number. leave it to powers of two, as the mixing is a SHR, and ADD, then.
4, or 8 should suffice.
and anyway, about 32megs of memory (for the H300's at least) could fit 8x20sec of 44.1kHz, 16bit audio plus a final out buffer.
so one would have to align the individual track buffers with the RAS/CAS for ideal thruput and downmix it, maybe once, doesnt have to be in realtime (although it would be neat)
so essentially it wouldnt be multi-tasked in terms of playback. the only still remaining problem is full duplex. playing back the final-buffer and recording to one of the 8 track buffers. when recording is complete, the final buffer is updated, and there you go.
while this would essentially work, it lacks the nice features of an 8track (insert your favorite sampler here):
no real-time track mute/unmute
no real-time track volume adjustments
and, no real-time filters whatever (yeah yeah ;))
but Id say, once the basic concept (above) works, one would see how/if the hardware does suffice. right ?
@ your other idea ? mixing profile ?
please explain, I dont get it.
filters ? are you insane ? ;) the coldfire isnt a DSP *g*
pabouk:
Mixing profile - maybe it is not the best name for it..
It would contain information for mixing the channels together:
- volume envelopes
- stereo panning envelopes
- filters settings / envelopes - yes, it is too much for real time
The aim is to prepare the mix (with possible channel attenuating and muting) before recording the next channel because you will not have much time to set the channel volumes or mute the playing channels during recording.
It can be also used for mixing (mastering) the channels together (not completely in real time) directly on the DPA. The problem is that you do not have enough controls (buttons) on the DPA to mix multiple channels together in real time as on a real mixing panel with many potentiometers, buttons etc.
Navigation
[0] Message Index
[#] Next page
[*] Previous page
Go to full version