Articles of audiorecord

发出编码和解码audiologging为G711(PCMU – uLaw)格式

当我们需要stream式传输audio时,没有太多有关应用此编解码器的信息。 没有应用编解码器,我的代码就像一个build立2设备之间的通信魅力工作,但我需要在该格式的编码/解码,因为我需要stream服务器,而不是两个设备之间(我正在testing这个代码使用2设备)。 我正在寻找机会,如果你的任何人都可以看到我的问题的关键在哪里。 我已经尝试了input参数的不同configuration。 也许,我使用的编解码器是错误的(我使用Apache许可证从一个项目中获得了它们)。 这个值在播放器 – 接收器设备中设置在录音机 – 发送器中: private int port=50005; private int sampleRate = 8000 ;//44100; private int channelConfig = AudioFormat.CHANNEL_OUT_MONO; private int audioFormat = AudioFormat.ENCODING_PCM_16BIT; int minBufSize = AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat); 注意:播放器中的CHANNEL_OUT_MONO和logging器项目中的CHANNEL_IN_MONO。 这些是我的方法: public void startStreamingEncoding() { Thread streamThread = new Thread(new Runnable() { @Override public void run() { try { […]

AudioRecord和AudioTrack延迟

我试图开发一个应用程序,如android的iRig,所以第一步是捕捉麦克风input,并在同一时间播放它。 我有它,但问题是,我得到一些延迟,使这种无法使用,如果我开始处理缓冲区,我怕它会得到完全无法使用。 我使用这样的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"); } 而通过这种方式: // ==================== 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 […]

当其他应用在Android中使用时,无法访问麦克风

我正在使用以下URL中的代码,以便从AudioRecord的麦克风获取声音数据: http : //www.dreamincode.net/forums/topic/303235-visualizing-sound-from-the-microphone/ 我看到的问题是,如果另一个应用程序也使用麦克风,我得到一个错误(状态-3)从AudioRecord。 如果我杀了使用麦克风的其他应用程序,一切都按预期工作。 是否有一个优雅的解决scheme,让我的应用程序访问麦克风,即使其他应用程序已经在使用它? 谢谢。

Android AudioRecord读取总是返回-3(ERROR_INVALID_OPERATION)

我试图简化代码到最低限度,它仍然无法正常工作: public class MainActivity extends AppCompatActivity { AudioRecord rec; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rec= new AudioRecord(MediaRecorder.AudioSource.MIC,44100, AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT,8192); short buff[] = new short[8192]; int read = rec.read(buff,0,buff.length); System.out.print(read); } 总是返回-3无论如何。 我错过了什么?

使用Android AudioRecorder录制.Wav

我已经阅读了很多关于Android的AudioRecorder的页面。 你可以在问题下面看到他们的列表。 我试图用AudioRecorder录制audio,但效果不好。 public class MainActivity extends Activity { AudioRecord ar = null; int buffsize = 0; int blockSize = 256; boolean isRecording = false; private Thread recordingThread = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void baslat(View v) { // when click to START buffsize = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT); ar […]

AudioRecord:开始()状态-38

我有以下问题:我使用SpeechRecognizer识别几个字。 我用 public void onResults 方法来销毁SpeechRecognizer。 在销毁之后,我初始化一个AudioRecord并从麦克风开始录音。 这导致我的logcat中的以下错误: 12-09 00:44:01.976: E/AudioRecord(21185): start() status -38 我的代码中没有引发exception。 AudioRecord只是无法正常启动。 我假设SpeechRecognizer不会很快释放麦克风,因为如果我在AudioRecord的初始化之前添加Thread.sleep(200),我不会遇到此问题。 这个解决scheme非常糟糕,原因很明显。 因此,我有以下问题: 如何检查AudioRecord是否正确初始化? (我的代码中没有出现exception。) _audioRecord.getState() == AudioRecord.STATE_UNINITIALIZED 也是错误的。 或者我如何检查SpeechRecognizer是否正确地释放麦克风? 非常感谢!

AudioFlinger无法创buildlogging轨迹,状态:-1,需要帮助ifx

public class AudioRecorderActivity extends Activity { private static final int RECORDER_SAMPLERATE = 8000; private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO; private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT; private AudioRecord recorder = null; private static final String TAG = "AudioRecorderActivity"; short[][] buffers = new short[256][160]; int ix = 0; private boolean stopped = false; private void […]

Android MediaCodec AAC编码器

我使用API​​ SDK提供的Android SDK提供的MediaCodec类以及OMX.SEC.aac.enc编码器将audio编码为文件。 我从AudioRecord类获取audioinput。 我的AudioRecord类的实例是这样configuration的: bufferSize = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT); recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, 44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_DEFAULT, bufferSize); 我能够从AudioRecord实例播放原始数据,因此问题不在此处。 我将来自AudioRecord实例的输出写入ByteBuffer实例,并将其从编码器传递到可用的input缓冲区。 编码器的输出写入SD卡上的文件。 这些是我的MediaCodec实例的configuration参数: codec = MediaCodec.createEncoderByType("audio/mp4a-latm"); MediaFormat format = new MediaFormat(); format.setString(MediaFormat.KEY_MIME, "audio/mp4a-latm"); format.setInteger(MediaFormat.KEY_BIT_RATE, 64 * 1024); format.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 2); format.setInteger(MediaFormat.KEY_SAMPLE_RATE, 44100); format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectHE); codec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); VLC告诉我,我的aac文件中没有stream。 命令FFMPEG -i @filename@给我以下错误: 处理input时发现无效的数据 。 没有我testing的媒体播放器能够播放我的文件。 为什么我无法播放我的文件? LogCat没有收到OpenMAX错误,编码时应用程序不会崩溃。 […]

使用Android SDK从原始PCM数据创buildWAV文件

我正在尝试使用AudioRecord类来logging一个WAV文件。 问题是,它只提供原始的PCM数据,如果我把它写到一个文件,没有标题信息,所以它不会在任何媒体播放器中播放。 我怎样才能从这个原始数据创build一个WAV文件? 或者,还有什么其他的方式来录制声音在Android的WAV文件(或MP3)? 哦,我知道MediaRecorder可以使用,因为它不支持WAV或MP3格式。

PCM – > AAC(编码器) – > PCM(解码器)实时进行正确的优化

我正在努力实施 AudioRecord (MIC) -> PCM -> AAC Encoder AAC -> PCM Decode -> AudioTrack?? (SPEAKER) 在Android 4.1+(API16)上使用MediaCodec 。 首先,我成功(但不能确定正确优化)实施PCM -> AAC Encoder由MediaCodec如下所示 private boolean setEncoder(int rate) { encoder = MediaCodec.createEncoderByType("audio/mp4a-latm"); MediaFormat format = new MediaFormat(); format.setString(MediaFormat.KEY_MIME, "audio/mp4a-latm"); format.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1); format.setInteger(MediaFormat.KEY_SAMPLE_RATE, 44100); format.setInteger(MediaFormat.KEY_BIT_RATE, 64 * 1024);//AAC-HE 64kbps format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectHE); encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); return true; } […]