2

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

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

上述值传递给函数,如

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

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

4

4 回答 4

3

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

于 2017-01-06T15:36:55.333 回答
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();

希望对你有效。

于 2017-01-02T07:51:58.367 回答
0
void SuperpoweredExample::setPlayerA(const char *path) {

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

}

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

示例“/sdcard/sample.mp3”

于 2017-06-13T07:06:19.987 回答
0

1)在AndroidManifest.xml中:

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

包和应用程序标签之间

2)在您的 .cpp 文件中创建 Open File 函数的副本,没有偏移和长度参数:

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); 

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

于 2018-06-12T00:09:03.593 回答