audio_mix-master

所属分类:其他
开发工具:Java
文件大小:186KB
下载次数:7
上传日期:2017-10-30 15:53:26
上 传 者xiaofei-felix
说明:  音频混合:实时录制audio时录制麦克风数据 和 写入背景音乐 本次案例实现了 *MediaPlayer 播放音频 *AudioTrack 播放音频 mp3 --> pcm data ( libs/jl1.0.1.jar ) *AudioRecord 录制音频 pcm file *AudioTrack 播放音频 pcm data *AudioRecord 录制音频 use MediaCodec & MediaMuxer write data *MediaExtractor 和 MediaCodec 手动解码出 pcm 数据 *混合音频
(Audio mixing: recording microphone data and writing background music when recording audio in real time This case has come true * MediaPlayer broadcasts audio * AudioTrack MP3 - > PCM data audio (libs/jl1.0.1.jar) * AudioRecord recording audio PCM file * AudioTrack broadcasts audio PCM data * AudioRecord recording audio use MediaCodec & MediaMuxer write data * MediaExtractor and MediaCodec manually decode the PCM data Mix audio)

文件列表:
build.gradle (911, 2017-04-25)
libs (0, 2017-04-25)
libs\jl1.0.1.jar (105363, 2017-04-25)
src (0, 2017-04-25)
src\androidTest (0, 2017-04-25)
src\androidTest\java (0, 2017-04-25)
src\androidTest\java\com (0, 2017-04-25)
src\androidTest\java\com\cl (0, 2017-04-25)
src\androidTest\java\com\cl\slack (0, 2017-04-25)
src\androidTest\java\com\cl\slack\playaudio (0, 2017-04-25)
src\androidTest\java\com\cl\slack\playaudio\ExampleInstrumentedTest.java (748, 2017-04-25)
src\main (0, 2017-04-25)
src\main\AndroidManifest.xml (781, 2017-04-25)
src\main\java (0, 2017-04-25)
src\main\java\com (0, 2017-04-25)
src\main\java\com\cl (0, 2017-04-25)
src\main\java\com\cl\slack (0, 2017-04-25)
src\main\java\com\cl\slack\playaudio (0, 2017-04-25)
src\main\java\com\cl\slack\playaudio\MainActivity.java (34651, 2017-04-25)
src\main\java\com\cl\slack\playaudio\audio (0, 2017-04-25)
src\main\java\com\cl\slack\playaudio\audio\AudioDecoder.java (8408, 2017-04-25)
src\main\java\com\cl\slack\playaudio\audio\AudioEncoder.java (15492, 2017-04-25)
src\main\java\com\cl\slack\playaudio\audio\MixAudioInVideo.java (10668, 2017-04-25)
src\main\java\com\cl\slack\playaudio\audio\PlayBackMusic.java (5100, 2017-04-25)
src\main\java\com\cl\slack\playaudio\media (0, 2017-04-25)
src\main\java\com\cl\slack\playaudio\media\MediaAudioEncoder.java (901, 2017-04-25)
src\main\java\com\cl\slack\playaudio\media\MediaDecoder.java (9400, 2017-04-25)
src\main\java\com\cl\slack\playaudio\media\MediaEncoder.java (6422, 2017-04-25)
src\main\java\com\cl\slack\playaudio\media\MediaFrame.java (1752, 2017-04-25)
src\main\java\com\cl\slack\playaudio\media\MediaInfo.java (4276, 2017-04-25)
src\main\java\com\cl\slack\playaudio\media\MediaMixAudio.java (3350, 2017-04-25)
src\main\java\com\cl\slack\playaudio\media\MediaMuxerMixAudioAndVideo.java (3129, 2017-04-25)
src\main\java\com\cl\slack\playaudio\media\MediaVideoEncoder.java (917, 2017-04-25)
src\main\java\com\cl\slack\playaudio\permission (0, 2017-04-25)
src\main\java\com\cl\slack\playaudio\permission\Permissions.java (157, 2017-04-25)
src\main\java\com\cl\slack\playaudio\permission\PermissionsManager.java (18238, 2017-04-25)
src\main\java\com\cl\slack\playaudio\permission\PermissionsResultAction.java (6862, 2017-04-25)
src\main\java\com\cl\slack\playaudio\util (0, 2017-04-25)
... ...

try 实时录制audio时录制麦克风数据 和 写入背景音乐 没有处理权限的问题,需要先去设置里获取权限 ``` ## 实现 *MediaPlayer 播放音频 *AudioTrack 播放音频 mp3 --> pcm data ( libs/jl1.0.1.jar ) *AudioRecord 录制音频 pcm file *AudioTrack 播放音频 pcm data *AudioRecord 录制音频 use MediaCodec & MediaMuxer write data *MediaExtractor 和 MediaCodec 手动解码出 pcm 数据 *混合音频 混合音频: 即背景播放的音乐和麦克风获取到的数据混合,混合时要保证这两个的一帧的数据长度一样 获取麦克风数据时 长度 2048 没有问题,再大一点 就会出 timestampUs 问题 背景音乐的播放 帧长度 2492 4608 4608 4608...(仅我的测试用例) MediaCodec.BufferInfo.size 但是一帧数据长度小于 这个值,播放时 杂音很大,而且播放速度不对 ,看来播放这块是动不了了 修复 error 部分 的 E/MPEG4Writer: timestampUs 6220411 < lastTimestampUs 6220442 for Audio track 就OK了 现在的问题 混合音频杂音很多 尝试不写入录制的麦克风数据,只是 背景播放的原始数据,速率不对 ,杂音严重 !!! 感觉是不是丢帧了 ,下面的代码在while里执行,可能会数据覆盖的太快 if (listener != null) { listener.onFrameArrive(temp); } 使用队列 ArrayDeque 记录音频背景音乐帧,不丢帧 使用ArrayList一样可以 ``` ``` ## error E/MPEG4Writer: timestampUs 6220411 < lastTimestampUs 6220442 for Audio track 这个问题与 record.read(buffer,0,samples_per_frame); samples_per_frame 参数的设置有关 int samples_per_frame = 2048; 但是开一个背景音乐,好像就嫌大了 so int samples_per_frame = 1024; 与mAudioCodec.queueInputBuffer(inputBufferIn dex, 0, input.length, presentationTimeUs, 0);中presentationTimeUs貌似也有关系 so long presentationTimeUs = (System.nanoTime() - audioStartTime) / 1000L; 但是只要提高 samples_per_frame 必然出错 只能记录上一次的时间戳 然后加入判断 if(mLastAudioPresentationTimeUs < bufferInfo.presentationTimeUs) 这样 samples_per_frame 就可以随便设置了 ```

近期下载者

相关文件


收藏者