音频记录:缓冲区溢出?
我的应用程序RECORDING我会得到缓冲溢出.录音以Service进行.我无法弄清楚为什么我从AudioFlinger中收到此消息. 下面我实例化AudioRecord对象并设置其回调. bufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat); aRecorder = new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, bufferSize); aRecorder.setRecordPositionUpdateListener(updateListener); bytesPerSample = bitsPerSample / 8; int bytesPerFrame = nChannels * bytesPerSample; framePeriod = bufferSize /
6 2024-04-04
编程技术问答社区
音频记录启动后返回一些空数据
我编写了一个标准代码,用于使用AudioreCord从麦克风接收数据.这是我的代码: AudioReceiver() { int minHardwareBufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT); Log.d(TAG, "minHardwareBufferSize = " + minHardwareBufferSize); int bufferSizeBytes = (minHardwareBufferSize > MIN_BUFFER_SIZE_BYTES) ? minHardwareBufferSize : MIN_BUFFER_SIZE_BYTES; bufferSizeShorts = bufferSizeBytes / 2; //резервируем буф
0 2024-04-04
编程技术问答社区
Android : java.lang.RuntimeException。Unable to instantiate activity ComponentInfo: java.lang.NullPointerException
我试图录制音频,之后应该立即播放记录.我出了什么问题.请帮助我.我没有得到.显示空指针异常... 这是代码 import android.app.Activity; import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioRecord; import android.media.AudioTrack; import android.media.MediaRecorder; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import an
0 2024-03-19
编程技术问答社区
安卓:使用audiorecord类录制音频,作为快进播放
我正在尝试将音频和存储记录到SDCARD中,并发送到服务器.当我试图播放录制的声音播放时,但没有像我录制的那样.如果我录制10分钟的声音,它将为4分钟播放,即有人按下快速前进按钮,并带有一些嘈杂的声音.我没有到达我出错的地方.任何人都可以说我如何解决这个问题(应该播放我记录了多少,即记录了10分钟,然后只玩10分钟). 这是代码..对不起,发布批量代码. public class Audio_Call extends Activity { private static final int RECORDER_BPP = 16; private static final String AUDIO_RECORDER_FILE_EXT_WAV = "AudioRecorder.wav"; private static final String AUDIO_RECORDER_FOLDER = "AudioRecorder"; private static final String AU
4 2024-03-19
编程技术问答社区
安卓系统中的实时音频录制和播放以及线程和回调处理
我想录制实时音频并播放它.就UI而言,该应用程序只有三个按钮:一个用于开始录制和流式传输,一个用于播放预录制文件,最后一个用于停止当前的文件任务(录制/播放).为此,我使用了 audiorecord 和 audiotrack 分别用于录制和播放.我的程序看起来像.... /** * @Author Amit * */ public class AudioRecorder extends Activity { private String LOG_TAG = null; /* variables which are required to generate and manage the UI of the App */ // private RecordButton mRecordButton = null; private Button recordBtn, stopBtn, playBtn; /* * variables
2 2024-03-19
编程技术问答社区
语音通话时,麦克风记录的音频被静音。
我正在尝试构建从麦克风记录音频的应用程序,以进行以后的处理. 除了以下问题外,一切都很好,除了以下问题: 在语音呼叫(进出)期间,记录的文件没有音频数据,它仅包含空声. 我正在使用Audiorecorder和Mediarecorder,都有相同的问题. 问题是这是正常的API行为还是我缺少某些内容? 这里有一些其他信息: 权限: sdk:minsdkversion =" 9" targetsdkversion =" 15" 我正在用果冻豆在Nexus上测试我的应用程序. 预先感谢! ps如果有人需要更多的特定细节,请告诉我. 编辑 好吧,所有答案都
0 2024-03-19
编程技术问答社区
安卓系统-如何在录音时添加增益控制
我为录音机应用程序工作,想添加增益控制,但我不知道该怎么做.我可以访问音频缓冲区,但我不知道如何使声音更大声或慢. 我看到另一个具有Seekbar的应用程序可以从特定范围内选择分贝. aRecorder.read(buffer, 0, buffer.length); fWriter.write(buffer); // Write buffer to file 请告诉我该怎么办才能在我的应用中实施增益控制. 谢谢. 解决方案 更改音量很简单,只需将所有样本乘以一定部分即可. +/- 3DB(分贝)的更改分别对应于2或0.5(请参阅请参阅Audiosamplebuffer :: ApplyGainramp() @
0 2024-03-19
编程技术问答社区
安卓AudioRecord与MediaRecorder录制音频的对比
我想在我的Android手机上录制人类的声音.我注意到Android有两个课程可以做到这一点: audiorEcord href =" http://developer.android.com/reference/android/media/mediarecorder.html" rel =" noreferrer"> Mediarecorder .有人可以告诉我两者有什么区别以及每个适合的用例有什么区别? 我希望能够实时分析人类的言语以衡量振幅等. 我注意到官方Android 指南录制音频的网页他们使用Mediarecorder而没有提及Audiorecord. 解决方案 如果您想在录制过程中进行分析,则需要使用AudioRecord,为MediaRecorder自动将记录记录到文件中. AudioRecord有一个缺点,在调用startRecording()后,您需要从AudioRecord实例中亲自对数据进行轮询.另外,您必须足够快地读取和处理数据,以使内部缓冲区不
14 2024-03-19
编程技术问答社区
安卓系统。需要记录麦克风的输入
在实时进行播放/预览的过程中,是否有一种方法可以在Android中记录MIC输入?我尝试使用AudioRecord和AudioTrack来做到这一点,但问题是我的设备无法播放录制的音频文件.实际上,任何Android Player应用程序都无法播放录制的音频文件. 另一方面,使用Media.Recorder记录会生成一个可以由任何播放器应用程序播放的良好录制的音频文件.但是事实是,我在实时录制麦克风输入时无法进行预览/palyback. 解决方案 要在(几乎)实时录制和播放音频,您可以启动单独的线程并使用AudioRecord和AudioTrack. 只要小心反馈即可.如果扬声器在您的设备上大声响起,反馈可能会很快变得非常讨厌. /* * Thread to manage live recording/playback of voice input from the device's microphone. */ private class Audio ex
6 2024-03-19
编程技术问答社区
在播放音频的同时,也播放音频访问输出播放数据的音频录音
我正在使用语音命令的自定义模型在我的应用程序中乱七八糟 - 我从AudioreCord中可以使用良好的录制和处理输入音频,我通过文本到语音向用户提供了反馈. . 我遇到的一个问题是,即使在播放音频时,我也希望通过我自己的文字进行演讲,或者通过在后台播放的其他内容(例如音乐)来工作.我意识到这将是一个无聊的问题,但是如果我可以以某种方式访问​​音频输出数据(手机正在播放的内容)并将其与我的麦克风输入数据匹配,我想我至少可以调整调整我的模型 +改善了我的结果. 但是,基于 Android-我可以从音频混音器中获取音频数据吗?,听起来好像是不可能的. 两个问题: 1)是否有任何方法可以通过Android API访问预期的音频输出/播放数据,或者Android API提供的任何选项用于处理此问题(音频输出和输入之间的反馈循环)? 2)除了停止所有其他播放或等待其他播放完成之外 - 还有其他方法可以解决此问题吗?我认为,如果用户在扬声器手机上,我只是错过了自己做的方
2 2024-03-19
编程技术问答社区
需要了解AudioRecord和AudioTrack是如何进行原始PCM采集和播放的。
我在线程中使用以下代码来捕获麦克风的原始音频样本,并通过扬声器播放. public void run(){ short[] lin = new short[SIZE_OF_RECORD_ARRAY]; int num = 0; // am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); // -> MOVED THESE TO init() // am.setMode(AudioManager.MODE_IN_COMMUNICATION); record.startRecording(); track.play(); while (passThroughMode) { // while (!isInterrupted
0 2024-03-19
编程技术问答社区
在安卓系统中记录原始音频字节到本地变量
我正在将音频录制为Android 上的RAW字节中的变量,可以通过Audiotrack实例进行播放. 也就不是作为文件. 我选择了44100个样品率的8位单PCM,因为该音频数据应被未压缩...并且以可预测的平台 - 不平衡格式. 不用担心...我们只是在这里处理小音频片段...此外,这些天的人有太多的ram,以至于Megahurtz. 我尝试了下面的方法...尽管显然有效,但相关部分, writeaudiotolocalvariable()是从互联网上进行了修改的切割n'糊状而且我真的不太了解内容. 考虑到我们无法预测最终用户设备的硬件功能,有人可以告诉我这是否是在WriteAudiotolocalvariaible()函数中进行操作的最稳定和可靠的方法? 吗? 这就是我所拥有的: import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.Activit
0 2024-03-19
编程技术问答社区
当通过音频采样的数据数量超过AudioRecord构造函数中设置的 "bufferSizeInBytes "时,会发生什么?
public AudioRecord (int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes) 这是AudioRecord的公共构造函数,您可以找到称为bufferSizeInBytes的最后一个参数,它的意思是"在记录期间将音频数据写入的缓冲区的总大小(以字节为单位)."在Android文档中. 我认为这是存储从音频硬件采样的所有数据的缓冲区.我有一个问题: 如果通过音频采样的数据数超过 " BufferSizeInbytes",将会发生什么,停止采样或否则? 我进行了一些测试,发现即使示例数据的数量超过了,也没有发生任何事情(它一直记录).为什么? So can anyone tell me what's the meaning about "bufferSizeInBytes" 解决方案 是在录制过程中被缓冲的
2 2024-03-19
编程技术问答社区
如何使用Android AudioRecord和MediaCodec作为音频编码器正确处理PTS?
我正在使用AudioreCord在Android设备上的相机捕获过程中记录音频流. 由于我想处理帧数据并处理音频/视频示例,因此我不使用Mediarecorder. 我在另一个线程中运行Audiorecord,并通过Read()来收集原始音频数据. 获得数据流后,我将它们馈送到配置为AAC音频编码器的MediaCodec中. 这是我关于录音机/编码器的一些代码: m_encode_audio_mime = "audio/mp4a-latm"; m_audio_sample_rate = 44100; m_audio_channels = AudioFormat.CHANNEL_IN_MONO; m_audio_channel_count = (m_audio_channels == AudioFormat.CHANNEL_IN_MONO ? 1 : 2); int audio_bit_rate = 64000; int audio_data_format = Audi
2 2024-03-19
编程技术问答社区
无法访问AudioRecorder
我正在尝试拍摄小录音,以从服务中找到声音压力水平,但Android不会让我访问硬件.我在logcat中得到以下错误: 错误来自以下代码: AudioRecord recordInstance = null; // We're important... android.os.Process .setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO); short bufferSize = 4096;// 2048; recordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC, this //line 167 .getFrequency(), this.getChannelConfiguration(), this .getAud
0 2024-03-19
编程技术问答社区
Android L开发者预览版中的AudioRecord记录了断断续续的声音
我正在使用PCM16LE格式的AudioreCord录制声音,8000Hz,1渠道.它记录在Android版本2.3.3-4.4.4中,但在Android L(5.0)开发人员预览中记录了奇怪的间歇性声音(在Nexus 5,Nexus 7和Emulator上). 这是录制的声音的示例(上半场 - 录制,下半场 - 播放): https://www.dropbox.com/s/3wcgufua5pphwtt/android_l_sound_record_error. m4a?dl = 0 我尝试使用不同的采样率(4000,16000)和8位播放录制的声音,但声音持续不断.这种声音可能有什么问题? 我正在使用此AudioreCordTask使用getaudiorecord()录制音频来初始化输入(操作过程中没有错误返回;接收音频块均等尺寸为nisternbuffersize value): public final int SAMPLING_RATE = 8000;
4 2024-03-19
编程技术问答社区
即时音频输入和输出Android
在我的Android应用程序中,我想从智能手机的麦克风中播放一些音频,并立即播放,像麦克风一样现场直播,没有滞后.我目前正在考虑使用AudioRecord和AudioTrack类(从我阅读的内容中),但我不太确定如何进行. 我在堆栈溢出方面检查了其他一些问题,但它们并没有完全回答我想做的事情.大多数是2012年. 那么如何使用这些类同时输入和输出音频? 另外:我看了MediaRecorder API,但是根据我阅读的内容,这需要您将音频保存到我不想做的文件中.能满足我的要求而被淘汰吗?或者我最好只使用AudioRecord? 谢谢 编辑: 这是我下面的更新代码,如@pradip Pramanick所建议: final Thread record = new Thread(new Runnable() { @Override public void run() { while (!Thread
0 2024-03-19
编程技术问答社区
安卓音频录制问题?
我一直在弄乱Android API的Audiorecord功能,并发现了一些奇怪的行为. 背景信息: 我的手机是HTC不可思议的 我正在使用模拟器使用Eclipse插件进行Android开发. 目标平台或OS是2.2 ...因为它是我的手机使用的. 一些代码: bufferSize = AudioRecord.getMinBufferSize(FREQUENCY, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, FREQUENCY, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize); 这是我用来设置Audiorecord API的代码
20 2024-03-19
编程技术问答社区
音频记录和音频追踪的延迟
我正在尝试开发诸如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); //L
2 2024-03-19
编程技术问答社区
需要一个简单的音频记录的例子
我需要在Android中使用AudioreCorder进行简单的音频录制和播放示例.我尝试了Mediarecorder,它可以正常工作. 解决方案 您的意思是AudioRecord?搜索例如使用Google代码搜索" AudioreCord.OnreCordPositionUpDateListener".顺便说一句,AudioRecord确实录制,不播放. 另请参见: 提高Android Audio录制质量? 其他解决方案 这是音频记录的示例代码. private Runnable recordRunnable = new Runnable() { @Override public void run() { byte[] audiodata = new byte[mBufferSizeInBytes]; int readsize = 0; Log.d(TAG, "start t
0 2024-03-19
编程技术问答社区