Allegro.cc - Online Community

Allegro.cc Forums » Allegro Development » al_create_sample create double lengthen sample

This thread is locked; no one can reply to it. rss feed Print
al_create_sample create double lengthen sample
GullRaDriel
Member #3,861
September 2003
avatar

I may be wrong but I'm currently playing with ex_record and ex_record_name to make myself a little recorder.

When just copy pasting the pasta and expanding the examples max_seconds, I ended with file that are the double of the file I currently save.

I digged up in the A5 sources and found that it isn't using the ALLEGRO_AUDIO_DEPTH (INT16 or whatever) in the sample size allocation.

My application or the example or the al_create_sample is wrong, but I had to divide samples by two to have the right amount of bytes saved.

Does anyone have a light for me ?

Code:

#SelectExpand
1/* Recorder is created like that: */ 2 3 internals -> recorder = al_create_audio_recorder( 4 internals -> fragment / internals -> latency , /* 10 seconds buffer space */ 5 internals -> frequency * internals -> latency , /* configure the fragment size to give us the given 6 latency in seconds */ 7 internals -> frequency, /* samples per second (higher => better quality) */ 8 ALLEGRO_AUDIO_DEPTH_INT16, /* 2-byte sample size */ 9 ALLEGRO_CHANNEL_CONF_2 /* stereo */ 10 ); 11 12/* running values: 13refresh_rate: 60.000000 14frequency: 44100 15max_seconds: 300 16fragment: 10 17latency: 0.100000 18*/ 19 20/* I save the sample like in the examples */ 21 22nstrprintf( date_str , "./output/%d/%s/%s" , local_time -> tm_year + 1900 , time_split[ 4 ] , time_split[ 3 ] ); 23nstrprintf( command , "mkdir -p %s" , date_str -> data ); 24system( _nstr( command ) ); 25nstrcat_bytes( date_str , "/" ); 26nstrcat_bytes( date_str , qvstudio -> titles[ selected_title ] ); 27nstrcat_bytes( date_str , "_" ); 28nstrcat_bytes( date_str , time_split[ 2 ] ); 29nstrcat_bytes( date_str , "H" ); 30nstrcat_bytes( date_str , time_split[ 1 ] ); 31nstrcat_bytes( date_str , "M" ); 32nstrcat_bytes( date_str , time_split[ 0 ] ); 33nstrcat_bytes( date_str , "S" ); 34nstrcat_bytes( date_str , ".wav" ); 35/* finished recording, but haven't created the sample yet */ 36ALLEGRO_SAMPLE *spl = al_create_sample( qvstudio -> record_buffer , 37 ( qvstudio -> record_buffer_pos - qvstudio -> record_buffer ) / 2 , /* HERE NOTICE THE /2. WITHOUT IT I GOT 2x LENGTH ! */ 38 qvstudio -> frequency , 39 ALLEGRO_AUDIO_DEPTH_INT16 , ALLEGRO_CHANNEL_CONF_2 , false ); 40al_save_sample( _nstr( date_str ) , spl ); 41al_destroy_sample( spl ); 42qvstudio -> record_buffer_pos = qvstudio -> record_buffer ; 43 44 45/* qvstudio variable struct for type reference */ 46 47#define MIN_SAMPLE_VAL 0x8000 48#define MAX_SAMPLE_VAL 0x7fff 49 50/*! Quiniou Studio Config structure */ 51typedef struct QS_INTERNALS 52{ 53 /* DISPLAY */ 54 /*! path to ttf font file */ 55 const char *font_file_small , 56 /*! path to ttf font file */ 57 *font_file_regular , 58 /*! path to ttf font file */ 59 *font_file_huge , 60 /*! path to background picture */ 61 *background_file ; 62 63 /*! size for little text output */ 64 int font_size_small , 65 /*! size for normal text output */ 66 font_size_regular , 67 /*! size for huge text output */ 68 font_size_huge , 69 /*! Screen W size */ 70 w , 71 /*! Screen H size */ 72 h ; 73 /*! Internal loop freq */ 74 float refresh_rate ; 75 76 /*! The 3 loaded fonts with their respective sizes */ 77 ALLEGRO_FONT *font[ 3 ]; 78 /*! Acutal display */ 79 ALLEGRO_DISPLAY *display ; 80 /*! Event queue */ 81 ALLEGRO_EVENT_QUEUE *queue ; 82 /*! Timer */ 83 ALLEGRO_TIMER *timer ; 84 85 /*! RECORDER */ 86 ALLEGRO_AUDIO_RECORDER *recorder ; 87 /*! fragment from recorder */ 88 ALLEGRO_AUDIO_RECORDER_EVENT *record_event ; 89 /*! recording buffer , stores up to max_seconds of audio */ 90 int16_t *record_buffer, 91 /*! points to the current recorded position */ 92 *record_buffer_pos, 93 /*! points to the end of the buffer */ 94 *record_buffer_end; 95 /*! recording flag */ 96 int is_recording ; 97 /*! Recording frequancy (44100,48000,96000) */ 98 int frequency ; 99 /*! Maximum size of sample */ 100 int max_seconds ; 101 /*! recorder internal buffer */ 102 int fragment ; 103 /*! Latency */ 104 float latency , 105 /*! Computed volume for current input */ 106 gain ; 107 108 /*! Loaded title list */ 109 char *titles[ NB_MAX_TITLES + 1 ]; 110 /*! number of loaded titles */ 111 int nb_titles ; 112 113}

"Code is like shit - it only smells if it is not yours"
Allegro Wiki, full of examples and articles !!

SiegeLord
Member #7,827
October 2006
avatar

What is the type of qvstudio->record_buffer?

"For in much wisdom is much grief: and he that increases knowledge increases sorrow."-Ecclesiastes 1:18
[SiegeLord's Abode][Codes]:[DAllegro5]:[RustAllegro]

GullRaDriel
Member #3,861
September 2003
avatar

It's an int16_t *. The structure of qvstudio is described in the latter part of the source.

EDIT:
I polished it a bit. It now uses float32 depth, but I still have to divide by two at the end if I don't wan't an add on of white of the same length .

"Code is like shit - it only smells if it is not yours"
Allegro Wiki, full of examples and articles !!

Edgar Reynaldo
Major Reynaldo
May 2007
avatar

Not sure if this is the problem here, but are you accounting for stereo vs mono recording? If you're expecting mono and you're using a stereo buffer for recording that might explain your sample being twice as long as you expect it to be.

GullRaDriel
Member #3,861
September 2003
avatar

I'm recording in stereo. I think the error may be in my own code. I'll post the recording parts here later in the day, I'm currently at work.

"Code is like shit - it only smells if it is not yours"
Allegro Wiki, full of examples and articles !!

Edgar Reynaldo
Major Reynaldo
May 2007
avatar

GullRaDriel
Member #3,861
September 2003
avatar

I'll post what I got today. I have some cosmetics to do before posting something.

"Code is like shit - it only smells if it is not yours"
Allegro Wiki, full of examples and articles !!

Go to: