我使用的重采样算法需要包含-1.0到1.0范围内的输入样本的float数组.音频数据是16位 PCM,采样率为22khz.
我想将音频从22khz下采样到8khz,如何将字节数组中的样本表示为浮点数> = -1且<= 1并返回字节数组?
我使用native c将数据从音频文件读取到jbyte指针.现在我想将它作为jbyteArray发送给java.
jbyteArray Java_com_app_audio_player_readData(JNIEnv * env, jobject jobj,jstring readPath)
{
FILE *fin;
const char *inFile= (*env)->GetStringUTFChars(env,readPath,0);
fin = fopen(inFile, "r");
fseek(fin, 0, SEEK_END); // seek to end of file
int size = ftell(fin); // get current file pointer
fseek(fin, 0, SEEK_SET);
jbyte *data=(jbyte *)malloc(size*sizeof(jbyte));
int charCnt = 0;
charCnt=fread(data, 1, size, fin);
jbyteArray result=(*env)->NewByteArray(env, size);
//-- I want to convert data to jbyteArray and return it to java
fclose(fin);
return result;
}
Run Code Online (Sandbox Code Playgroud)
怎么做的?
在Android中,AudioTrack类的getPlaybackHeadPosition()方法返回以帧表示的播放头位置,以毫秒为单位的等效值是多少?
在我的应用程序中,我使用MediaPlayer API 创建了一个音频播放器(仅限WAV文件).但是玩家每次都不会给onCompletion Listener回调.有时它会给出回调但不是每次都回调.我正在对wav文件进行一些音频处理,比如插入和覆盖.
是因为音频标题中有任何缺失吗?回放完成后为什么不回调?
服务器端应用程序生成一个RSA密钥对,作为密钥交换过程的一部分,我从服务器获取此公钥,现在我想将此密钥存储在android KeyStore中.我已经看到了使用KeyGenerator生成rsa密钥对并将它们存储在android KeyStore中的示例,但我不知道如何存储已生成的RSA公钥.任何帮助将受到高度赞赏.
我使用AudioRecord API在我的应用程序中录制音频(WAV),并成功录制.但是当我尝试录制其他录制应用程序在后台运行时,我的应用程序表现得很奇怪.
该MediaRecorder试图启动,而另一个记录正在运行,但AudioRecord API初始化记录实例,并不会引发任何异常记录时,API抛出异常,所以我不能确定任何记录实例是否正在运行与否.
这个场景已经在三星S3的默认录音机中处理,当我尝试录音时说
"无法开始新的录制.其他已经录制的应用程序"
在我的应用程序的录音机启动之前,如何识别是否有其他录音机正在运行?
我在支持包中使用FragmentTabHost实现了标签,但是没有显示可绘制的图标?
如何使用FragmentTabHost显示可绘制图标?
mTabs = (FragmentTabHost)findViewById(android.R.id.tabhost);
mTabs.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
mTabs.addTab(mTabs.newTabSpec("chapter").setIndicator("Chapter",getResources().
getDrawable(R.drawable.chapter1)), ContentFragment.class, null);
mTabs.addTab(mTabs.newTabSpec("section").setIndicator("section",getResources().
getDrawable(R.drawable.favourite1)), SectionFragment.class, null);
mTabs.addTab(mTabs.newTabSpec("video").setIndicator("Video",getResources().
getDrawable(R.drawable.video1)),VideoFragment.class, null);
mTabs.addTab(mTabs.newTabSpec("about").setIndicator("About",getResources().
getDrawable(R.drawable.about1)),AboutFragment.class, null);
Run Code Online (Sandbox Code Playgroud) 让我解释一下我的应用程序的结构,在我的应用程序中,我有3个使用Fragments实现的主要选项卡.其中一个主选项卡在其片段中包含3个子选项卡,一个子选项卡包含 listview.现在我想在选择列表中的项目时启动活动.
这是列表视图的onItemClickListener:
lv.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> arg0, View view, int position,long id)
{
RecordObjects obj=(RecordObjects)lv.getItemAtPosition(position);
String name=obj.getName();
String url=obj.getUrl();
intent=new Intent(getActivity(),player.class);
intent.putExtra("task","Draft");
intent.putExtra("name",name);
intent.putExtra("read_path",url);
startActivityForResult(intent, 0);
}
});
Run Code Online (Sandbox Code Playgroud)
我点击列表项时得到的错误是:
05-09 16:19:07.723: D/PhoneWindow(7043): couldn't save which view has focus because the focused view android.widget.LinearLayout@44ecc1d8 has no id.
05-09 16:19:07.741: D/AndroidRuntime(7043): Shutting down VM
05-09 16:19:07.741: W/dalvikvm(7043): threadid=3: thread exiting with uncaught exception (group=0x4001b188) …Run Code Online (Sandbox Code Playgroud)