从设备内存而不是资产中读取音频文件

时间:2017-01-02 07:44:19

标签: android audio android-ndk android-assets superpowered

我正在使用超级强大的sdk进行音频处理,使用以下代码排除资产中的文件。

AssetFileDescriptor fd0 = getResources().openRawResourceFd(R.raw.recorded_audio);
int fileAoffset = (int) fd0.getStartOffset(), fileAlength = (int) fd0.getLength();

传递给函数的Above值为

SuperpoweredExample(Integer.parseInt(samplerateString), Integer.parseInt(buffersizeString), getPackageResourcePath(), fileAoffset, fileAlength);

这很好用,如果我把我的音频文件放在最好的原始文件夹中,但我的音频文件在运行时生成并读取我们无法在资源中写入文件。有什么办法可以使用外部存储器位置的文件吗?

4 个答案:

答案 0 :(得分:3)

只需将文件路径作为字符串传递给Superpowered open()方法即可。这次不需要文件偏移和文件长度,因为您的文件是"完整的"这次是文件,而不是文件的某些部分。也许你根本就不需要Java。

答案 1 :(得分:1)

试试这段代码,它正在使用MediaPlayer类。

package com.example.audiomediaplayer1;  

import android.media.MediaPlayer;  
import android.net.Uri;  
import android.os.Bundle;  
import android.app.Activity;  
import android.view.Menu;  
import android.widget.MediaController;  
import android.widget.VideoView;  

public class MainActivity extends Activity {  

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

        MediaPlayer mp=new MediaPlayer();  
        try{  
            mp.setDataSource("/sdcard/Music/maine.mp3");//Write your location here  
            mp.prepare();  
            mp.start();  

        }catch(Exception e){e.printStackTrace();}  

    }  

    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        // Inflate the menu; this adds items to the action bar if it is present.  
        getMenuInflater().inflate(R.menu.activity_main, menu);  
        return true;  
    }  

}

或者这个简短而简单的外部存储以及路径。

String filePath = Environment.getExternalStorageDirectory()+"/yourfolderNAme/yopurfile.mp3";
    mediaPlayer = new  MediaPlayer();
    mediaPlayer.setDataSource(filePath);
    mediaPlayer.prepare();   
    mediaPlayer.start();

希望它适合你。

答案 2 :(得分:0)

void SuperpoweredExample::setPlayerA(const char *path) {

playerA->open(path,0,0);

}

只需将文件路径作为字符串发送。

示例" /sdcard/sample.mp3"

答案 3 :(得分:0)

1)在AndroidManifest.xml中:

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
包和应用程序标签之间的

2)在.cpp文件中创建Open File函数的副本,没有offset和length参数:

extern "C" JNIEXPORT void
Java_com_superpowered_playerexample_MainActivity_OpenFile2 (
        JNIEnv *env,
        jobject __unused obj,
        jstring path      // path to APK file
        // length of audio file
) {
    const char *str = env->GetStringUTFChars(path, 0);
    player->open(str, 0, 0);
    env->ReleaseStringUTFChars(path, str);
}

3)在你的MainActivity.class中:

String file = "/mnt/shared/Other/more.mp3";
OpenFile2(file); 

对我有用,希望这可以帮助