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);
}
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
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). –