我使用AudioRecord类在通话期间录制语音.
我很想记录拥有手机的人的声音(来自麦克风).在录制过程中,我想做一些音频处理,但现在这是offtopic.
Android具有以下AudioSources选项:
你能解释一下它们之间的区别吗?好的MIC显而易见但VOICE_CALL vs VOICE_UPLINK vs VOICE_DOWNLINK?
另外我应该选择采样率(8000Hz,16000Hz,2250Hz,44100Hz).你能告诉我选择什么样的采样率以及为什么?
对于音频格式,我选择了AudioFormat.ENCODING_PCM_16BIT,但它也有: - AudioFormat.ENCODING_DEFAULT - AudioFormat.ENCODING_INVALID - AudioFormat.ENCODING_PCM_8BIT
最后我应该使用多少个频道?为什么?(AudioFormat.CHANNEL_IN_STEREO或AudioFormat.CHANNEL_IN_MONO)
android signal-processing audio-recording android-audiorecord
纯粹的好奇心让我有一个问题.如何在MATLAB中实现大数的乘法?它是Karatsuba,Toom-3,Fürer还是完全不同的东西?
我使用ObjectAnimator缩小RelativeLayout:
ObjectAnimator scaleDownX = ObjectAnimator.ofFloat(view, "scaleX", 0.5f);
ObjectAnimator scaleDownY = ObjectAnimator.ofFloat(view, "scaleY", 0.5f);
scaleDownY.setDuration(1000);
AnimatorSet scaleDown = new AnimatorSet();
scaleDown.play(scaleDownX).with(scaleDownY);
scaleDown.start();
Run Code Online (Sandbox Code Playgroud)
它按照预期很好地缩小,但问题是现在较小视图周围的区域是黑色的,直到另一个用户动作,这是不合需要的.我希望它匹配缩放视图的父级的背景.任何想法如何使红场周围的区域立即具有正确的颜色?

我的xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gui="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/bg"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity$DummySectionFragment">
<RelativeLayout
android:id="@+id/res1"
android:layout_width="50dp"
android:layout_height="50dp"
android:tag="res1"
android:background="@android:color/holo_red_dark"
android:layout_alignTop="@+id/res2"
android:layout_alignRight="@+id/include3"
android:layout_marginRight="11dp">
<TextView
android:layout_marginLeft="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="res1"
android:id="@+id/res1T"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud) 我正在尝试开发像iRig for android这样的应用程序,所以第一步是捕获麦克风输入并同时播放它.
我有它,但问题是我得到一些延迟,使这无法使用,如果我开始处理缓冲区,我担心它将完全无法使用.
我像这样使用audiorecord和audiotrack:
new Thread(new Runnable() {
public void run() {
while(mRunning){
mRecorder.read(mBuffer, 0, mBufferSize);
//Todo: Apply filters here into the buffer and then play it modified
mPlayer.write(mBuffer, 0, mBufferSize);
//Log.v("MY AMP","ARA");
}
Run Code Online (Sandbox Code Playgroud)
并且以这种方式实现:
// ==================== INITIALIZE ========================= //
public void initialize(){
mBufferSize = AudioRecord.getMinBufferSize(mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
mBufferSize2 = AudioTrack.getMinBufferSize(mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
mBuffer = new byte[mBufferSize];
Log.v("MY AMP","Buffer size:" + mBufferSize);
mRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
mBufferSize);
mPlayer = new AudioTrack(AudioManager.STREAM_MUSIC,
mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
mBufferSize2,
AudioTrack.MODE_STREAM); …Run Code Online (Sandbox Code Playgroud) 嗨,我有以下问题:
data.clear();
data.addAll(datasource.getFilesInFolder()); //gets the data from Sqlite database
adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
生成此logCat输出:
12-19 14:34:30.864: W/Binder(986): Caught a RuntimeException from the binder stub implementation.
12-19 14:34:30.864: W/Binder(986): java.lang.NullPointerException
12-19 14:34:30.864: W/Binder(986): at android.inputmethodservice.IInputMethodWrapper.setSessionEnabled(IInputMethodWrapper.java:280)
12-19 14:34:30.864: W/Binder(986): at com.android.internal.view.IInputMethod$Stub.onTransact(IInputMethod.java:129)
12-19 14:34:30.864: W/Binder(986): at android.os.Binder.execTransact(Binder.java:404)
12-19 14:34:30.864: W/Binder(986): at dalvik.system.NativeStart.run(Native Method)
12-19 14:34:30.864: W/InputMethodManagerService(757): Got RemoteException sending setActive(false) notification to pid 30040 uid 10174
Run Code Online (Sandbox Code Playgroud)
这个例外导致胜利死亡......
好吧,我意识到也许是反过来,WIN DEATH导致这个日志输出,因为在日志WINDEATH之前来了,那么我不知道为什么windeath会发生.
我的适配器是扩展BaseAdapter,没有什么特别之处.以下是非常奇怪的:
提到的代码片段位于自定义侦听器中,该侦听器由另一个类触发.当我将有问题的部分放在听众之外时,它运作良好.
我的Caught a RuntimeException from the binder stub implementation意思是?这可能是数据库的问题吗?或者也许是我的自定义听众?任何人都知道什么是错的?
public int read(byte [] audioData,int offsetInBytes,int sizeInBytes).
该方法从音频硬件读取音频数据以便记录到缓冲器中.
其参数为:audioData记录的音频数据写入的数组.audioIn中的offsetInBytes索引,从中写入数据以字节为单位表示.sizeInBytes请求的字节数.
它返回已读取的字节数,如果对象未正确初始化,则返回 ERROR_INVALID_OPERATION;如果参数未解析为有效数据和索引,则返回ERROR_BAD_VALUE.字节数不会超过sizeInBytes.
我在我的代码中写了这个方法,如下所示:int num; byte [] buf = new byte [160]; num = record.read(buf,0,160);
问题是即使数据不可用,它总是返回160(即要读取的请求字节)不小于160.有什么问题?帮我.提前致谢.
我正在实现一个应用程序,它将重复我告诉它的所有内容.我需要的是播放我在缓冲区录制的声音只是延迟了一秒钟因此我会自己听,但延迟1秒
这是我的Recorder类的run方法
public void run()
{
AudioRecord recorder = null;
int ix = 0;
buffers = new byte[256][160];
try
{
int N = AudioRecord.getMinBufferSize(44100,AudioFormat.CHANNEL_IN_STEREO,AudioFormat.ENCODING_PCM_16BIT);
recorder = new AudioRecord(AudioSource.MIC, 44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, N*10);
recorder.startRecording();
Timer t = new Timer();
SeekBar barra = (SeekBar)findViewById(R.id.barraDelay);
t.schedule(r = new Reproductor(), barra.getProgress());
while(!stopped)
{
byte[] buffer = buffers[ix++ % buffers.length];
N = recorder.read(buffer,0,buffer.length);
}
}
catch(Throwable x)
{
}
finally
{
recorder.stop();
recorder.release();
recorder = null;
}
Run Code Online (Sandbox Code Playgroud)
这是我的玩家之一:
public void run() {
reproducir = true; …Run Code Online (Sandbox Code Playgroud) Android:我想从麦克风中读取缓冲区,以便我可以对其执行处理,以下是我的代码
int sampleRateInHz = 8000;// 44100, 22050 and 11025
int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
//int bufferSize =11025 +
int bufferSize = AudioRecord.getMinBufferSize(sampleRateInHz,channelConfig, audioFormat);
short[] buffer = new short[bufferSize];
AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRateInHz,channelConfig, audioFormat, bufferSize);
if(audioRecord.getState()== AudioRecord.STATE_INITIALIZED){
audioRecord.startRecording();
Log.e("recording", "before");
boolean flag = true;
while (flag) {
int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);
System.out.println(buffer);
}
audioRecord.stop();
audioRecord.release();
}
Log.e("recording", "stopeed");
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
Run Code Online (Sandbox Code Playgroud)
每次我尝试测试程序时都会出现以下错误
06-04 00:18:17.222:E/AudioRecord-Java(488):[android.media.AudioRecord]初始化本机AudioRecord对象时的错误代码-20.
有一种方法可以获得广义特征向量,以获得具有单个或至少非常少的命令的高多重特征值?如果我可以使用每个特征值的多重性1 [V,D] = eig(A),但该命令不适用于多个特征值.
当我使用Androids AudioRecord从麦克风录制时,我得到了这个令人讨厌的神器

有没有办法避免或删除这个?它是什么?或者我得到了,因为我在配置中做错了(但其他一切正常).
这是我的AudioRecord配置:
sampleRateInHz = 44100;
channelConfigRec = AudioFormat.CHANNEL_IN_MONO;
audioFormat = AudioFormat.ENCODING_PCM_16BIT;
bufferSizeInBytesRec = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfigRec, audioFormat);
audioSource = AudioSource.MIC;
Run Code Online (Sandbox Code Playgroud)
我很确定我的代码是正确的,因为我可以记录所有内容,但是在开头就有这样的点击.