使用android ndk播放audiofile

时间:2017-11-12 01:22:30

标签: android-ndk java-native-interface

因此,我试图制作以例如#34; birds.mp3"启用togglebutton时音频文件,禁用时停止音频。我试图用android ndk进行练习,并且我一直在尝试使用AAudio API,因为它看起来非常简单易用,但我无法弄清楚如何使它工作。

这是我的代码:

MainActivity.java

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.ToggleButton;

public class MainActivity extends Activity {

    // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("native-lib");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ToggleButton toggle = (ToggleButton) findViewById(R.id.toggleButton);
        toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    // The toggle is enabled

                    StartAudio();
                } else {
                    // The toggle is disabled

                    StopAudio();
                }
            }
        });
    }


    public native String StartAudio();
    public native String StopAudio();


}

C ++文件

#include <jni.h>
#include <string>
#include <SLES/OpenSLES_Android.h>
#include <aaudio/AAudio.h>
#include <vector>

extern "C"
JNIEXPORT void JNICALL

Java_com_example_boman_ndk_MainActivity_StartAudio( JNIEnv* env, jobject obj) {

    AAudioStreamBuilder *builder;
    aaudio_result_t result = AAudio_createStreamBuilder(&builder);

    if(builder != nullptr) {
        AAudioStream* stream = nullptr;
        result = AAudioStreamBuilder_openStream(builder, &stream);

        if(result == AAUDIO_OK && stream != nullptr) {

        }

        AAudioStreamBuilder_delete(builder);
    }
}

extern "C"
JNIEXPORT void JNICALL
Java_com_example_k2972_ndk_AudioActivity_StopAudio( JNIEnv* env, jobject obj ) {
// Stop Audio




}

所以我被困在这里。我创建流但我不知道我应该如何使用它。我如何使它处理我的audiofile。所以,如果有人能向我解释这一点,我将非常感激。

1 个答案:

答案 0 :(得分:0)

你可以从

开始
#include <media/NdkMediaCodec.h>
#include <media/NdkMediaExtractor.h>

按照official sample进行操作。另请参阅https://groups.google.com/forum/#!msg/android-ndk/VDxqBTrF9RY/iZ_ZoE0pBwAJ