0
0

Hi,

I am a rookie when it comes to using the FMOD soundsystem, but I am in the process of studying it for a decision if we can use it for our software.
I’ve seen the record example that records a sample of 5 seconds using FSOUND_Record_StartSample.
That’s not that difficult to understand, but what if i want to record a sound of an undetermined length? In other words, when I push a button, the recording starts, when I push the button again, the recording stops.
How can I implement this, or is there a useful example somewhere?

Thanks in advance!

Regards
Ronnie

  • You must to post comments
0
0

Hi,

I’m a rookie too ๐Ÿ˜‰

I am playing around with FMOD for two days now and I’m trying to do exactly the same thing as you.

To record for an undetermined time, I guess you can set the recording on loop:

FSOUND_Sample_SetMode(samp, FSOUND_LOOP_NORMAL);
FSOUND_Record_StartSample(samp, true);

Or at least, that’s what I tried and it seems to work. The only thing you need to take care of, is that the reading can’t pass the recording when you are playing the sample while you are recording. This is explained well in the same recording example and the documentation:

cited from the docs:

[quote:1lufx49l]
The recording/playback rates are slightly innacurate and are not identical (ie 44100.0 for playback, 44100.1 for recording), so one could possibly be faster or slower than the other. In this case the recording and the playback cursor could overlap, and the output will sound corrupted.
To counter this you might adjust the playback frequency of the channel you are playing the record sample on while it plays, using FSOUND_GetCurrentPosition and FSOUND_Record_GetPosition as calibration points.
In the recording sample there is an example of trying to play back sound as it records, and the mechanism to try and keep the 2 cursors a safe distance from each other is employed.
[/quote:1lufx49l]

So this part isn’t too difficult I guess.
But with manipulating the captured data, I can’t really help. I’m trying to figure that out myself right now.

I suggest you take a look at the thread where I posted my question: http://52.88.2.202/forum/viewtopic.php?t=2834. Maybe it can help you too.

Greetings,
MocoN.

  • You must to post comments
0
0

Hi MocoN,

Thanx for your help. Maybe I can help you out too if I know how :)
What I want (to begin with) is to save the recorder sample as a wav file (or whatever other format). Saving to wav isn’t the problem, but how to save a ‘dynamically growing’ sample structure.
I understand the record sample that saves 5 seconds of recorded sound to file, but what if I want to save 6 seconds or 1 minute or an hour and a half?

  • You must to post comments
0
0

I understand what you are saying. And I want to do almost the same thing. Instead of saving the stream to file, I want to encode it and send it over the internet.

Look at my code (http://52.88.2.202/forum/viewtopic.php?t=2834.) to see what I’m trying out right now. I don’t know if it is a good way to handle the recorded data but I’m just giving it a shot.

So I’m recording in a loop. Then I made a streamcallback and I pass it the recorded sample. So in your case, I suppose you could write the samples to file in the streamcallback. In [url=http://www.fmod.org/forum/viewtopic.php?t=2635:2myglfpv]this[/url:2myglfpv] thread, davide posted a link to some code that does some encoding. direct link = http://web.rossoalice.it/davidemania/QtFMOD_test.zip

But as I said before, I don’t know if this is the right way to do the job. I hope Brett or somebody else can help us out with this ๐Ÿ˜‰

  • You must to post comments
0
0

Hi Brett,

Thanks for your reply. I understand a little bit better what way to go, but not yet completely :). If I know where the record cursor is, how do I know what the size is of the chunk of data that has to be copied?
I presume that the first chunk can be copied by calling FSOUND_Record_GetPosition for the end and FSOUND_Sample_Lock for the start of the chunk of data. But how to read the following chucks when the cursor has wrapped?

To cut a long story short, is there somewhere an example of how to do this kind of thing?

Regards,
Ronnie

  • You must to post comments
0
0

[quote:24arpa42]If I know where the record cursor is, how do I know what the size is of the chunk of data that has to be copied?
[/quote:24arpa42]
You can just keep the previous position of the record cursor in an other variable and this way you know which data has been added since the last time.

About my previous answer(s): I’m sorry if I caused confusion but it seems you don’t need (or better not use) a custom stream to process the captured data ๐Ÿ˜ณ

  • You must to post comments
0
0

Ok thanx Brett and MocoN!
I’ve worked it out and it works fine now.

MocoN, if you want I can post the code for you although I’m not sure if this will help you out.

  • You must to post comments
0
0

Yeah, that would be nice!

You never know if it can help me out. Thanks!

  • You must to post comments
0
0

[quote="Ronnie"] if you want I can post the code for you although I’m not sure if this will help you out.[/quote]

I am trying something very similar please do post up the code that you got to work ๐Ÿ˜†

  • You must to post comments
Showing 8 results
Your Answer

Please first to submit.