tipos sistematico racimos qué quimica por muestreo ejemplos conglomerados analitica android audio ffmpeg sampling

android - sistematico - tipos de muestreo en quimica analitica pdf



FFmpeg y tipos de muestras (2)

Mantenga un contador de bytes decodificados que se acumula con len después de cada llamada a avcodec_decode_audio para un solo AVPacket . Luego utilícelo como compensación en la matriz de bytes de Java:

int decoded = 0; ... int len = avcodec_decode_audio3(aCodecCtx, (uint8_t *) pAudioBuffer, &data_size, &packet); ... memcpy(bytes + decoded, (uint8_t *) pAudioBuffer, len); ... size -= len; decoded += len;

Está sobrescribiendo el principio del búfer una y otra vez en lugar de anexar.

Audio decodificado usando FFmpeg (función avcodec_decode_audio3) e intenta reproducirlo a través de Audiotrack en Android. Cuando juego, escucho algunos gruñidos. Sin musica. En los foros aconsejó que el problema con las muestras. Pregunta: ¿cómo resolver este problema, si está asociado con una falta de coincidencia de tipos de muestras? Descodificación de código:

while (av_read_frame(pFormatCtx, &packet)>= 0) { if (aCodecCtx->codec_type == AVMEDIA_TYPE_AUDIO) { int data_size = AVCODEC_MAX_AUDIO_FRAME_SIZE * 2; int size=packet.size; int decoded = 0; while(size > 0) { int len = avcodec_decode_audio3(aCodecCtx, (uint16_t *) pAudioBuffer, &data_size, &packet); jbyte *bytes = (*env)->GetByteArrayElements(env, array, NULL); memcpy(bytes + decoded, (uint16_t *) pAudioBuffer, len); (*env)->ReleaseByteArrayElements(env, array, bytes, 0); (*env)->CallStaticVoidMethod(env, cls, mid, array); size -= len; decoded += len; } } }

Código Java:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); int bufSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); track = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufSize, AudioTrack.MODE_STREAM); track.play(); bytes = new byte[bufSize]; int res = main(2, "/sdcard/muzika_iz_reklami_bmw_5_series_-_bmw_5_series.mp3", bytes); System.out.println(res); } private static void play(byte[] play) { track.write(play, 0, play.length); }

¿Cómo resolver este problema? PD El archivo en sí está marcado: el reproductor estándar se reproduce. Formato: mp3.


aquí está mi código de decodificación de audio, espero que te ayude.

int16_t* samples = (int16_t*)av_malloc(AVCODEC_MAX_AUDIO_FRAME_SIZE); int sample_size; while(!m_quit && av_read_frame_wrapper(m_pAVFormatContext, &packet) >= 0) { if(packet.stream_index == m_audioStream) { org_data = packet.data; org_size = packet.size; LOGV("audio packet size = %d", packet.size); while (!m_quit && packet.size > 0) { sample_size = AVCODEC_MAX_AUDIO_FRAME_SIZE; len = avcodec_decode_audio3(m_pAVCodecContext, samples, &sample_size, &packet); LOGV("sample_size = %d, len = %d", sample_size, len); if (len < 0) { LOGE("Error when decoding..."); break; } if (sample_size > 0) { //begin = now_ms(); //audio_output_native(samples, sample_size); /* use audio queue */ SampleNode* node = new SampleNode(samples, sample_size); m_pSampleQueue->enqueue(node); //end = now_ms(); //LOGV("sample_size > 0, output audio samples cost %llu ms/n", end - begin); } packet.size -= len; packet.data += len; } packet.size = org_size; packet.data = org_data; av_free_packet(&packet); } else { av_free_packet(&packet); } }