2017-07-10 5 views
0

Ich folge der audio i/o tutorial, um eine Echtzeit-Audioaufnahme-App zu erstellen. Der Callback wird jedoch sehr selten zum Aufzeichnen des gesamten Sounds aufgerufen. Wenn ich zum Beispiel die Aufnahme für 5 Sekunden starte, gibt der Callback eigentlich nur einen 2-Sekunden-Clip (statt 5).Tizen ist nicht in der Lage, Audio in Echtzeit aufzunehmen

Hier ist ein Dummy-Testcode, der nur Dumps, wie viele Bytes aufgezeichnet wurden:

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) attēli sind das Ergebnis dieses Codes des Laufens auf Galaxy S3. Wie Sie auf dem Bild sehen können, wird der Aufzeichnungsrückruf von Zeit 32.3 zu Zeit 37.7 (über 5 Sekunden) aufgerufen, aber nur 224250 Bytes empfangen (es sollte (37.7-32.3) * 48000 sein * sizeof (kurz) = 518400) . Das bedeutet, dass nur weniger als 40% der Audiodaten aufgezeichnet werden.

Kann mir jemand einige Vorschläge zur Lösung dieses Problems geben?

Yu-Chih

+0

Sie können die Lösung in diesem Link gehen (https://developer.tizen.org/forums/native-application-development/recording-audio-io-callback-very-slow-only-pick-up-less -45-Audio). –

Antwort

0

Sie könnten versuchen,

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

Registriert eine Callback-Funktion zu verwenden, die aufgerufen werden soll, wenn der Audioeingang Griff unterbrochen wird oder die Unterbrechung beendet ist. Ich werde weiter erforschen und versuchen, dies zu reproduzieren.