Articles of android audiorecord

三星S6中的音频轨道无法通过蓝牙工作

我正在使用AudioRecord录制音频并使用AudioTrack播放。 我正在使用这个类录制Fm模拟音频流并同时传入蓝牙路由器。 它成功地与摩托罗拉和三星S5合作。 但不使用三星Galaxy S6。 这是我录制的示例代码 audioManager.startBluetoothSco(); audioManager.setBluetoothScoOn(true); audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); //FM_SRC is the FM receiving Antenna mRecorder = new AudioRecord(FM_SRC, sampleRateInHz, channelConfigIn, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes); mAudioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, sampleRateInHz, channelConfigOut, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes, AudioTrack.MODE_STREAM); mRecorder.startRecording(); mAudioTrack.play(); byte data[] = new byte[bufferSizeInBytes]; //Shuffling buffers from record to track object until A2DP routing selected while (mOverA2DP) { // Log.e(TAG, […]

android以pcm获取设备整体音频输出

有没有办法拦截或只是读取Android设备中的音频输出? 我需要从myActivity中读取PCM中的整个音频输出,包括背景中的媒体播放器应用,来自呼叫的语音,myACtivity内的MediaPlayer等等,以及扬声器播放的所有内容。 实际上,如果可以单独阅读它们,也会很棒。 我尝试使用AudioRecord ,将它作为audioSource参数提供给MediaRecorder.AudioSource中的每个常量而没有运气,我应该尝试不同的audioSources吗? 它是一个如此低级别的任务,必须在本机层内处理?

Android AudioRecord初始化每次都失败

我的问题很容易解释 – 我正在尝试创建一个AudioRecord对象,但它无法初始化(即在构造函数之后,getState返回0,表示失败)。 我在运行OS 2.2.1的MotoDroid 1上从Eclipse运行它。 我的AndroidManifest.xml是AFAIK,使用了正确的权限,RECORD_AUDIO(我不知道如何确认): 我执行以下操作来创建AudioRecord: bufferSize = AudioRecord.getMinBufferSize(8000, CHANNEL_IN_MONO, ENCODING_PCM_8BIT); audioRecorder = new AudioRecord(AudioSource.MIC, 8000, CHANNEL_IN_MONO, ENCODING_PCM_8BIT, 50*bufferSize); if (audioRecorder.getState() != AudioRecord.STATE_INITIALIZED) throw new Exception(“AudioRecord init failed”); audioRecorder.getState()返回0(即STATE_UNINITIALIZED) 我还没有find任何使用这个API的完整示例,我非常喜欢Android初学者,所以解决方案可能很简单。 我该怎么做才能找出失败的原因? 有些人提出了类似的问题,但是他们一定遇到了与我不同的问题,因为他们批准的修复措施对我没有帮助。 最值得注意的是这个 。 但批准的解决方案令人困惑,无论如何都不适用于我。 我还尝试了各种比特率(8000,16000,11025,44100),单声道和立体声以及8和16比特。 成功初始化后没有组合回来。

如何将混响效果附加到AudioRecord / PCM数据并将其保存到文件?

我想录制来自麦克风的输入,附加混响效果,并将结果保存到文件中。 我的用例是一款应用程序,可让您在录制后唱出歌曲并选择不同的预设混响选项,然后保存您的演奏并将其存储在后端服务器上。 我发送到服务器的文件需要应用混响效果。 到目前为止,我已经能够使用AudioRecord录制输入,并且我可以为AudioTrack添加混响效果以听到混响效果,但我仍然坚持找出如何在嵌入混响效果的情况下保存音频。 这是我到目前为止所拥有的: private void startRecording() { final int bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT); mRecorder = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT, bufferSize); if(NoiseSuppressor.isAvailable()) { NoiseSuppressor ns = NoiseSuppressor.create(mRecorder.getAudioSessionId()); ns.setEnabled(true); } if(AcousticEchoCanceler.isAvailable()) { AcousticEchoCanceler aec = AcousticEchoCanceler.create(mRecorder.getAudioSessionId()); aec.setEnabled(true); } mPlayer = new AudioTrack(AudioManager.STREAM_MUSIC, SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO, AUDIO_FORMAT, bufferSize, AudioTrack.MODE_STREAM); PresetReverb reverb = new PresetReverb(1, mPlayer.getAudioSessionId()); […]

Android AudioRecord – 第二次不会初始化

Hej,我目前正试图让AudioRecord工作。 因为我需要一个更大的项目。 但它似乎搞得很多。 我一直在尝试很多东西,所以当我追踪这个bug时我又回到了基础。 我正在使用我的三星Galaxy S作为我的调试设备。 我的问题是,第一次重启我的设备后,我可以初始化我创建的AudioRecord对象没有问题。 但是第二次运行它时,它不会初始化AudioRecord对象。 我试过几个频率,fyi。 这是我的代码: package android.audiorecordtest; import android.app.Activity; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class AudioRecordTest extends Activity { int frequency; AudioRecord audRec; TextView txtVw; /** Called when the activity is first created. */ @Override public void onCreate(Bundle […]

“无法获取记录源1的音频输入”

我在初始化Android的AudioRecord遇到了这个问题。 我在网上搜索了一段时间没有成功。 对于手机,我在SDK版本7上使用三星GalaxyS。对于AudioRecord初始化,我使用8000作为采样率,MONO用于通道配置,16位用于音频格式,并且根据日志,minBufferSize是设置为4160.我已将清单的AUDIO_RECORD权限添加到清单中。 我的初始化代码如下: … private static int SAMPLE_RATE = 8000; private static int CHANNEL_CONFIG = AudioFormat.CHANNEL_CONFIGURATION_MONO; private static int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT; // ??? Both 8Bit and Default are deemed illegal. public MicVolumeManager() { this.bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT); PhoneDebugger.debug(“AUDIO-BUFFER-SIZE”, Integer.toString(this.bufferSize)); this.recorder = new AudioRecord(AudioSource.MIC, SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT, this.bufferSize); this.audioBuffer = new byte[this.bufferSize]; } […]

Android:AudioRecord类问题:永远不会调用回调

我的Android Java应用程序需要将音频数据记录到RAM中并进行处理。 这就是我使用“AudioRecord”类而不是“MediaRecorder”(仅记录到文件)的原因。 直到现在,我使用繁忙的循环轮询“read()”来表示音频数据。 到目前为止,这一直在起作用,但它过多地占用了CPU。 在两次民意调查之间,我将线程置于睡眠状态以避免100%的CPU使用率。 但是,这并不是一个干净的解决方案,因为无法保证睡眠时间,您必须减去安全时间,以免丢失音频片段。 这不是CPU最佳。 对于并行运行的线程,我需要尽可能多的空闲CPU周期。 现在我使用“OnRecordPositionUpdateListener”实现了录制。 根据SDK Docs,这看起来很有前途,也是正确的方法。 一切似乎都有效(打开音频设备,读取()数据等)但从未调用过Listner。 有人知道为什么吗? 信息:我正在使用真实的设备,而不是在仿真器下。 使用Busy Loop录制基本上可以工作(但不是满意)。 永远不会调用Callback Listener。 这是我的源代码片段: public class myApplication extends Activity { /* audio recording */ private static final int AUDIO_SAMPLE_FREQ = 16000; private static final int AUDIO_BUFFER_BYTESIZE = AUDIO_SAMPLE_FREQ * 2 * 3; // = 3000ms private static final int […]

从音频文件输入中检测人声

我正在尝试实现自动录音function,类似于Talking Tom应用程序。 我使用以下代码从录音机读取输入并分析缓冲区: float totalAbsValue = 0.0f; short sample = 0; numberOfReadBytes = audioRecorder.read( audioBuffer, 0, bufferSizeInBytes); // Analyze Sound. for( int i=0; i<bufferSizeInBytes; i+=2 ) { sample = (short)( (audioBuffer[i]) | audioBuffer[i + 1] << 8 ); totalAbsValue += Math.abs( sample ) / (numberOfReadBytes/2); } // Analyze temp buffer. tempFloatBuffer[tempIndex%3] = totalAbsValue; float temp […]

Android AudioRecord支持的采样率

我正在试图弄清楚运行Android 2.2及更高版本的手机支持哪些采样率。 我们想以低于44.1kHz的速率进行采样,而不必重新采样。 我知道所有手机都支持44100Hz,但是想知道是否有一张桌子显示哪些采样率对特定手机有效。 我已经看过Android的文档( http://developer.android.com/reference/android/media/AudioRecord.html ),但它没有多大帮助。 有没有人find这些采样率的清单?

通话录音 – 使其适用于Nexus 5X(可以使用root或自定义ROM)

我正在尝试在Nexus 5X,Android 7.1(我自己的AOSP版本)上使用AudioRecord和AudioSource.VOICE_DOWNLINK 。 我已经超过了权限阶段 – 将我的APK移动到特权应用程序,对Android源中的AudioRecord进行了调整,以停止抛出有关此源的exception。 现在我在通话期间得到空录音缓冲区。 我知道有很多通话录音应用程序,它们可以在其他设备上运行。 我也看到某些应用程序可以对已植根的N5执行某些操作并使其正常工作。 我希望在Nexus 5X上实现相同的目标 – 任何调整对我来说都可以,包括更改Android版本,修改Qualcomm驱动程序,设备配置文件等等 – 基本上可以在自定义ROM中实现。 我已经尝试过使用平台代码 – 硬件/ qcom / audio / hal / voice.c,特别是函数voice_check_and_set_incall_rec_usecase ,但到目前为止还没有意义。 还检查了device / lge / bullhead / mixer_paths.xml,发现有一个与呼叫记录相关的部分: 但我也无法理解它或它是如何得到帮助的。