2017-07-10 6 views
0

Je suis le audio i/o tutorial pour créer une application d'enregistrement audio en temps réel. Cependant, le rappel est appelé très rarement pour enregistrer le son entier. Par exemple, lorsque je démarre l'enregistrement pendant 5 secondes, le rappel ne donne en réalité qu'un clip de 2 secondes (au lieu de 5).Tizen est incapable d'enregistrer l'audio en temps réel

Voici un code de test fictif qui ne dépotoirs combien d'octets ont été enregistrés:

int _audio_read_total; 
static void _audio_io_stream_read_cb(audio_in_h handle, size_t nbytes, void *userdata) 
{ 
    const void *buffer = NULL; 
    if (nbytes > 0) { 
     int error_code = audio_in_peek(handle, &buffer, &nbytes); 
     _audio_read_total += nbytes; 
     dlog_print(DLOG_DEBUG, LOG_TAG, "nbytes = %d,_audio_read_total = %d", nbytes, _audio_read_total); 
     error_code = audio_in_drop(handle); // remove audio data from internal buffer 
    } 
} 
static void start_audio_recording(appdata_s *ad) 
{ 
    int error_code = audio_in_create(48000, AUDIO_CHANNEL_MONO, AUDIO_SAMPLE_TYPE_S16_LE, &ad->input);  
    error_code = audio_in_set_stream_cb(ad->input, _audio_io_stream_read_cb, ad); 
    error_code = audio_in_prepare(ad->input); 
} 

start end (5 seconds later) Les images attachées comprennent le résultat de l'exécution de ce code sur Galaxy vitesse S3. Comme vous pouvez le voir sur l'image, le rappel d'enregistrement est appelé de l'heure 32.3 à l'heure 37.7 (sur 5 secondes), mais seulement 224250 octets sont reçus (il devrait être (37.7-32.3) * 48000 * sizeof (court) = 518400) . Cela signifie que seulement moins de 40% de l'audio est enregistré.

Quelqu'un pourrait-il me donner quelques suggestions pour résoudre ce problème?

Yu-Chih

+0

Vous pouvez parcourir la solution dans ce lien (https://developer.tizen.org/forums/native-application-development/recording-audio-io-callback-very-slow-only-pick-up-less -45-audio). –

Répondre

0

Vous pouvez essayer d'utiliser

int audio_in_set_interrupted_cb ( audio_in_h input, 
audio_io_interrupted_cb  callback, 
void * user_data 
) 

Enregistre une fonction de rappel à invoquer lorsque la poignée d'entrée audio est interrompue ou l'interruption est terminée. Je vais explorer plus loin et essayer de reproduire cela.