首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Android点滴分享

    AudioTrack源码解读(2)

    本篇介绍 本篇介绍下AudioTrack的操作,比如Playback的线程运行,播放,write,暂停等流程。 可以沿着这个思路看下代码: 先到JNI static void android_media_AudioTrack_start(JNIEnv *env, jobject thiz) { sp<AudioTrack AudioTrack::start() { ... track = (AudioTrack) ((WeakReference) audiotrack_ref).get(); if (track == null) { Stop实现 这儿直接从AudioTrack native的实现看,可以猜想到这儿需要完成的事情主要有调用Track的stop,并停止回调线程 void AudioTrack::stop() {

    1.6K20编辑于 2022-10-25
  • 来自专栏Android点滴分享

    AudioTrack和AudioRecord使用

    本篇介绍 本篇介绍下AudioTrack和AudioRecord的使用,通过AudioRecord录音,通过AudioTrack播放录制的音频。 AudioTrack的使用 AudioTrack负责播放pcm数据,下面的代码是将刚采集的pcm播放出来 AudioAttributes audioAttributes = new AudioAttributes.Builder (44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_8BIT); tracker = new AudioTrack (audioAttributes, audioFormat, bufferSize, AudioTrack.MODE_STREAM, AudioManager.AUDIO_SESSION_ID_GENERATE ,也是需要指定采集位数,采集频率,输出声道,播放buffer,然后调用play就可以播放了,具体的播放就是在单独线程里面调用AudioTrack的write即可。

    86920编辑于 2022-10-25
  • 来自专栏Android点滴分享

    AudioTrack的源码解读(1)

    本篇介绍 Android上使用AudioTrack可以实现播放PCM,本篇介绍下AudioTrack的创建过程。 代码解读 使用AudioTrack的第一个操作是创建一个AudiioTrack, 那就从AudiioTrack的构造开始: public AudioTrack(AudioAttributes attributes 接下来开始正式的构造AudioTrack: private AudioTrack(AudioAttributes attributes, AudioFormat format, int bufferSizeInBytes 还没创建,那么就需要先创建Native的AudioTrack if (nativeAudioTrack == 0) { // create the native AudioTrack object ,需要做的事情就是将Native的AudioTrack对象关联到Java的AudioTrack // end if (nativeAudioTrack == 0) lpTrack =

    2.2K20编辑于 2022-10-25
  • 来自专栏Android点滴分享

    AudioTrack引发的应用Crash分析

    会不会是其他业务的AudioTrack呢? 有2个信息可以确认不是其他业务的AudioTrack 首先每次setVolume的上下文总有停止我们AudioTrack的记录,一般不会这么巧。 如果上面信息是猜测的话,再比较下portid就会发现的确是同一个AudioTrack,portId是AudioTrack的唯一标识。 从操作时序上看,每次crash都是先看到析构AudioTrack的信息,然后再看到setVolume的信息,然后就crash了,很自然想到就是操作已经释放的了AudioTrack了,实际上也的确是的。 void TrackPlayerBase::init(const sp<AudioTrack>& pat, const sp<AudioTrack: AudioTrack已经销毁了,于是调用AudioTrack的setVolume方法, 就出现Crash了,这样就完全和堆栈对上了,也和log对上了。

    1.5K30编辑于 2023-02-17
  • 来自专栏DevTips

    使用 AudioTrack 播放音频轨道

    在上篇文章 OpenGL ES 实现播放视频帧 中我们已经知道如何使用 GLSurfaceView 将解码后的视频渲染到屏幕上,但是,我们的播放器还不具备音频播放的功能,在本篇文章中我们将使用 AudioTrack 本期内容: PCM 介绍 AudioTrack API 介绍 使用 MediaCodec 解码及播放音频轨道 结束语 02 PCM 介绍 PCM (Pulse-code modulation 脉冲编码调制 AudioTrack 是播放音频的另外一种方式 「如果你感兴趣还可以了解下 SoundPool」, 并且只能用于播放 PCM 数据。 AudioTrack API 概述 : 1. AudioTrack 初始化 /** * Class constructor. 开始播放 public void play() 如果 AudioTrack 创建时的模式为 MODE_STATIC 时,调用 play 之前必须保证 write 方法已被调用。 5.

    2.7K31发布于 2019-09-29
  • 来自专栏全栈程序员必看

    android AudioTrack 播放 正弦波 方波「建议收藏」

    实例化 该类时,构造AudioTrack对象, 设置 类型:系统声音,采样率:44100,声道:单声道(右), 采样精度:16bit,缓冲区大小:4096,模式:流媒体。 实例化 该类时,构造AudioTrack对象 ,设置 类型:系统声音,采样率:44100,声道:单声道(左), 采样精度:16bit,缓冲区大小:2*4096,模式:流媒体。 audioTrackF; private short[] m_bitDateF ; // AudioTrack创建所需的缓冲区大小 final int bufferSize = AudioTrack.getMinBufferSize , mSampBit); audioTrackz = new AudioTrack(AudioManager.STREAM_SYSTEM, sampleRateInHz, mChannel , mSampBit, bufferSize * 2, AudioTrack.MODE_STREAM); audioTrackz.setStereoVolume(1.0f, 0.0f);

    70320编辑于 2022-07-28
  • 来自专栏android技术

    NDK--利用AudioTrack播放FFmpeg解码后的音频流

    ; import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioTrack audioTrack; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate ; // } audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRateInHz, channelConfig , AudioFormat.ENCODING_PCM_16BIT, buffSize, AudioTrack.MODE_STREAM); audioTrack.play(); } = null && audioTrack.getPlayState() == AudioTrack.PLAYSTATE_PLAYING) audioTrack.write(bytes

    1.6K60发布于 2020-07-03
  • 来自专栏音视频开发之旅

    音视频开发之旅(35) -FFmpeg + AudioTrack 实现音频解码和播放

    null); audioTrack = null; } audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC +audioTrack.getPlayState()); return audioTrack.getState(); } return AudioTrack.STATE_UNINITIALIZED = null && audioTrack.getPlayState() == AudioTrack.PLAYSTATE_PLAYING && audioTrack.getState() == AudioTrack.STATE_INITIALIZED = null) { if (audioTrack.getState() > AudioTrack.STATE_UNINITIALIZED) { audioTrack.pause = null && audioTrack.getState() == AudioTrack.STATE_INITIALIZED) { audioTrack.stop();

    2.3K00发布于 2021-03-02
  • 来自专栏linux驱动个人学习

    Android音频系统

    AudioTrack和Track的创建过程: AudioTrack对应哪一个Thread, 对应哪一个output? AudioTrack如何传输数据给Thread? AudioTrack如何播放、暂停、关闭? ? base/core/jni/android_media_AudioTrack.cpp) AudioTrack.cpp (frameworks/av/media/libmedia/AudioTrack.cpp 对象,java的AudioTrack对象创建时会导致c++的AudioTrack对象被创建; 所以分析的核心是c++的AudioTrack类,创建AudioTrack时涉及一个重要函数: set()函数 7 AudioTrack创建过程_Track和共享内存 回顾: APP创建AudioTrack AudioFlinger中PlaybackThread创建对应的Track ---- b.

    4K20发布于 2018-10-09
  • 来自专栏Android知识点总结

    Android多媒体之认识声音、录音与播放(PCM)

    ; private final ExecutorService mExecutorService; private AudioTrack audioTrack;//音轨 private audioTrack = new AudioTrack( DEFAULT_STREAM_TYPE, DEFAULT_SAMPLE_RATE, DEFAULT_CHANNEL_CONFIG audioTrack.stop(); } } if (dis ! = null) { audioTrack.release(); } mExecutorService.shutdownNow();//停止线程池 = -1) {// audioTrack.play(); audioTrack.write(tempBuffer

    4.2K30发布于 2019-01-07
  • 来自专栏全栈程序员必看

    android 学习资料[通俗易懂]

    opengrok https://blog.csdn.net/jinzhuojun/article/details/53456196 ■ 资料 Audio ■ Android 音频系统:从 AudioTrack 到 AudioFlinger https://blog.csdn.net/zyuanyun/article/details/60890534 ■ Android AudioTrack详解 https ://www.jianshu.com/p/6d4cee174a27 ■ Android Audio:AudioTrack构造函数分析 https://blog.csdn.net/qq_43443900 /article/details/103933776 ■ 深入剖析Android音频之AudioTrack https://www.cnblogs.com/mfmdaoyou/p/7348969.html Service AndroidO audio系统之AudioPolicyService分析(三) 其中openOutput and openInput 参考 Android 音频系统:从 AudioTrack

    69320编辑于 2022-09-20
  • 来自专栏AnRFDev

    Android 音频PCM数据的采集和播放,读写音频wav文件

    本文目的:使用 AudioRecord 和 AudioTrack 完成音频PCM数据的采集和播放,并读写音频wav文件 准备工作 Android提供了AudioRecord和MediaRecord。 AudioTrack 使用AudioTrack播放音频。初始化AudioTrack时,要根据录制时的参数进行设定。 AudioRecordThread 使用AudioRecord录制PCM文件,可选择同时生成wav文件 AudioTrackPlayThread 使用AudioTrack播放PCM或wav音频文件的线程 (Integer.toHexString(b)).append(","); } return sb.toString(); } /** * AudioTrack * 使用FileInputStream读取文件 */ private class AudioTrackPlayThread extends Thread { AudioTrack

    4.7K30发布于 2021-02-01
  • 来自专栏包子的书架

    FFmpeg进行音频的解码和播放

    进行播放 思路:由FFmpeg进行解码,将解码后的数据再通过jni传到Java中的audioTrack对象进行播放 创建AudioTrack对象 public class AudioPlayer { private AudioTrack audioTrack; public AudioPlayer() { } public void play(final String audioPath (sampleRate, channelConfig, AudioFormat.ENCODING_PCM_16BIT); audioTrack = new AudioTrack( if(audioTrack ! = null && audioTrack.getPlayState() == AudioTrack.PLAYSTATE_PLAYING) { //将ffmpeg解析出来而定音频数据,写入到open

    7.1K20发布于 2020-07-27
  • 来自专栏大前端修炼手册

    Android 音频开发入门指南

    我们可以使用 MediaPlayer 或 AudioTrack API 来实现音频播放功能。 以下是使用 AudioTrack 播放音频的基本步骤: 创建 AudioTrack 实例: int bufferSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_STEREO , AudioFormat.ENCODING_PCM_16BIT); AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, ); 启动播放: audioTrack.play(); 写入 PCM 音频数据: byte[] audioData = ...; // 从文件或网络获取 PCM 音频数据 audioTrack.write (audioData, 0, audioData.length); 停止播放: audioTrack.stop(); 释放资源: audioTrack.release(); 三、音频录制 在 Android

    2.5K10编辑于 2024-07-23
  • 来自专栏移动开发之家

    Android音频播放(本地/网络)绘制数据波形,根据特征有节奏的改变颜色

    ,这个因为太不好用了而被人过门而不入(反正肯定不是因为懒),这Android上多媒体四大家族就齐了,MediaPlayer、MediaRecord是封装好了的录制与播放,AudioRecord、AudioTrack MP3的波形数据提取 当那位小伙提出这个需求的时候,我就想起了AudioTrack这个类,和AudioRecord功能的使用方法十分相似,使用的时候初始化好之后对数据的buffer执行write就可以发出呻吟了 但是问题来了,首先AudioTrack只能播放PCM的原始音频文件,那要MP3怎么办? 下面直接看代码吧,都有注释(真的不是懒得讲╮(╯_╰)╭): 流程就是定义好buffer,初始化MediaExtractor来获取数据,MediaCodec对数据进行解码,初始化AudioTrack播放数据 instance audioTrack = new AudioTrack( AudioManager.STREAM_MUSIC, sampleRate,

    4K20发布于 2018-08-22
  • 来自专栏android技术

    NDK--利用OpenSL ES实现播放FFmpeg解码后的音频流

    当然安卓也使用了它,AudioTrack、MediaPlayer的音频播放,底层都是利用OpenSL。和AudioTrack相同,它只接受流,不支持音频数据的编解码,所以需要结合第三方库来使用。 前面我们使用了FFmpeg解码音频流,并使用了java层的AudioTrack进行播放,今天来实现在native层直接使用OpenSL播放。 ; // } audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRateInHz, channelConfig , AudioFormat.ENCODING_PCM_16BIT, buffSize, AudioTrack.MODE_STREAM); audioTrack.play(); } = null && audioTrack.getPlayState() == AudioTrack.PLAYSTATE_PLAYING) audioTrack.write(bytes

    1.4K30发布于 2020-07-13
  • 来自专栏Android点滴分享

    oboe 从使用到源码详解

    static_cast<void>(android::sp<android::AudioTrack>(pat)); SL_LOGE("AudioTrack::initCheck 的时候的回调如下: android::AudioTrack* pat = new android::AudioTrack( pAudioPlayer->mStreamType EVENT_NEW_POS from AudioTrack"); audioTrack_handleNewPos_lockPlay(ap); break; case android::AudioTrack::EVENT_UNDERRUN: //SL_LOGI("received event EVENT_UNDERRUN from AudioTrack android::AudioTrack::EVENT_LOOP_END: case android::AudioTrack::EVENT_STREAM_END: // These

    1.9K20编辑于 2022-10-25
  • 来自专栏Android知识点总结

    Android多媒体之SoundPool+pcm流的音频操作

    播放,AudioTrack也可以将PCM的数据转换成其他格式 ---- 1.1:音频来源:int audioSource ? 音频编码方式.png ---- 3.AudioTrack AudioTrack只能播放已经解码的PCM流(wav音频格式文件) ---- 3.1:流类型:int streamType ? 用户提供的Buffer数据-->AudioTrack内部的Buffer,这在一定程度上会使引入延时。 , 其实质是MediaPlayer在framework层进行解码后,生成PCM流,然后代理委托给AudioTrack, 最后AudioTrack传递给AudioFlinger进行混音,然后才传递给硬件播放 audioTrack = new AudioTrack( DEFAULT_STREAM_TYPE, rate, DEFAULT_CHANNEL_CONFIG

    3.5K20发布于 2019-02-25
  • 来自专栏雪月清的随笔

    Android FFmpeg系列05--音频解码与播放

    文件的视频流并使用OpenGL渲染上屏 Android FFmpeg系列03--视频解码与渲染 Android FFmpeg系列04--FFmpeg调用MediaCodec进行硬解码 本篇文章将通过音频基础、AudioTrack 44100 = 0.02322s = 23.22ms // MP3(nb_samples = 1152) duration = 1152 / 44100 = 0.02612s = 26.12ms AudioTrack AudioTrack因为不创建解码器,所以只能用于PCM数据的播放或者播放wav文件,它提供两种播放模式 MODE_STATIC:预先将待播放的音频数据全部写入内存,然后进行播放 MODE_STREAM :边写入边播放 我们现在的场景是通过FFmpeg实时解码出音频PCM数据并播放,所以选择stream模式 创建AudioTrack 这里我们固定音频参数为双声道,采样率为44100HZ,采样格式为ENCODING_PCM , AudioFormat.ENCODING_PCM_16BIT ) // 创建AudioTrack实例 mAudioTrack = AudioTrack( AudioAttributes.Builder

    1.8K21编辑于 2022-09-21
  • 来自专栏Android技术分享

    音视频入门之音频采集、编码、播放

    为解决这一问题,AudioTrack就引入了第二种模式。 而AudioTrack只能播放已经解码的PCM流,如果对比支持的文件格式的话则是AudioTrack只支持wav格式的音频文件,因为wav格式的音频文件大部分都是PCM流。 AudioTrack不创建解码器,所以只能播放不需要解码的wav文件。 3.1 音频流的类型 在AudioTrack构造函数中,会接触到AudioManager.STREAM_MUSIC这个参数。 3.3 构建过程 每一个音频流对应着一个AudioTrack类的一个实例,每个AudioTrack会在创建时注册到 AudioFlinger中,由AudioFlinger把所有的AudioTrack进行混合 //创建AudioTrack mAudioTrack = new AudioTrack(mStreamType, mSampleRateInHz, mChannelConfig,

    4.1K00发布于 2019-04-18
领券