Tizen не может записывать звук в реальном времени

Я следую аудио i/ o руководство по созданию приложения для записи звука в реальном времени. Однако callback вызывается очень редко для записи всего звука. Например, когда я начинаю запись на 5 секунд, обратный вызов фактически дает только 2-секундный клип (вместо 5).

Вот фиктивный тестовый код, который выводит только количество записанных байтов:

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 секунд) В прикрепленных изображениях показан результат выполнения этого кода на Galaxy Gear S3. Как вы можете видеть на изображении, обратный вызов записи вызывается с момента времени 32,3 до времени 37,7 (более 5 секунд), но получено только 224250 байт (должно быть (37,7-32,3)*48000*sizeof(short) = 518400) . Это означает, что записывается менее 40% аудио.

Может ли кто-нибудь дать мне несколько предложений по решению этой проблемы?

Ю-Чи


person Yu-Chih    schedule 10.07.2017    source источник
comment
Вы можете ознакомиться с решением по этой ссылке (developer.tizen.org/forums/native-application-development/ ).   -  person Shaswati Saha    schedule 12.07.2017


Ответы (1)


Вы можете попробовать использовать

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

Регистрирует функцию обратного вызова, которая будет вызываться, когда дескриптор аудиовхода прерывается или прерывание завершается. Я буду исследовать дальше и попытаюсь воспроизвести это.

person Sanjeev BA    schedule 11.07.2017