首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

AudioTrack - IllegalStateException:在未初始化的AudioTrack上调用play()

AudioTrack是Android平台上用于播放音频的类。它提供了对音频数据的控制和播放功能。在使用AudioTrack时,如果在未初始化的AudioTrack上调用play()方法,会抛出IllegalStateException异常。

具体来说,当创建一个AudioTrack对象后,需要通过调用其构造函数来初始化该对象。初始化包括设置音频流的属性,如采样率、声道数、音频格式等。然后,需要调用AudioTrack的play()方法来开始播放音频数据。如果在未初始化的AudioTrack上调用play()方法,就会抛出IllegalStateException异常。

解决这个问题的方法是,在调用play()方法之前,确保已经正确初始化了AudioTrack对象。可以通过调用AudioTrack的getState()方法来检查其状态,如果返回的状态不是STATE_INITIALIZED,就表示未初始化,此时不能调用play()方法。可以参考以下代码示例:

代码语言:txt
复制
// 创建AudioTrack对象
AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, channelConfig, audioFormat, bufferSize, mode);

// 检查AudioTrack状态
if (audioTrack.getState() == AudioTrack.STATE_INITIALIZED) {
    // 初始化成功,可以调用play()方法开始播放音频数据
    audioTrack.play();
} else {
    // 初始化失败,处理异常情况
    // ...
}

在Android开发中,AudioTrack常用于播放本地音频文件、实时音频流传输等场景。它可以提供低延迟的音频播放能力,适用于音乐播放器、语音通话、游戏音效等应用。

腾讯云提供了一系列与音频相关的云服务产品,例如腾讯云音视频解决方案、腾讯云音视频通信(TRTC)、腾讯云音频处理(TVP)、腾讯云语音识别(ASR)等。这些产品可以帮助开发者实现音频处理、音视频通信、语音识别等功能。具体产品介绍和文档可以参考腾讯云官网的相关页面。

相关搜索:有没有办法在安卓系统中保存/记录audioTrack上播放的数据Spring Boot刷新: ApplicationEventMulticaster未初始化-在多播之前调用‘java.lang.IllegalStateException’未捕获的错误:无法在初始化前调用autocomplete上的方法;尝试调用方法java.lang.IllegalStateException: BeanFactory未初始化或已关闭-在通过ApplicationContext访问beans之前调用“”refresh“”从Google Play Servicesv9.6开始,在调用MapsInitializer.initialize(context)时IBitmapDescriptorFactory未初始化在iOS上未调用闪亮的NotificationDelegate OnReceived使valgrind在未初始化的值上快速失败Android和ACRCloud:在未初始化的AudioRecord上调用startRecording()在由layoutinflator膨胀的片段上未调用onCreateView在相同的值上未调用可观察订阅MvvmCross在Android上的MvxTabbbedPage中未调用初始IMvxViewModel ViewAppeared在RAD上执行servlet时,servlet创建的未捕获初始化异常在Windows上使用sqlite3-ruby进行未初始化的常量编码在初始化之前,mmasonry.pkgd.js:62无法调用masonry上的方法;尝试调用“”reload“”在带有FusedLocationProviderClient的棒棒糖模拟器上未调用onLocationCallback初始化适配器后,RecyclerView .add()在未调用.notifyDataSetChanged()的情况下工作MissingPluginException(在发布到Google Play商店后,在通道plugins.flutter.io/Google_sign_in上找不到方法初始化的实现)Java.lang.IllegalStateException:应用程序PagerAdapter在未调用PagerAdapter#notifyDataSetChanged android的情况下更改了适配器内容iOS上的Flutter :尽管在未来的构建器上调用了Firebase.initializeApp(),但应用程序并未初始化准备(对于segue: UIStoryboardSegue,发送者:任何?)在iOS 11上的Xcode 9 b6中未调用
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用 AudioTrack 播放音频轨道

在上篇文章 OpenGL ES 实现播放视频帧 中我们已经知道如何使用 GLSurfaceView 将解码后的视频渲染到屏幕上,但是,我们的播放器还不具备音频播放的功能,在本篇文章中我们将使用 AudioTrack...AudioTrack 初始化 /** * Class constructor....开始播放 public void play() 如果 AudioTrack 创建时的模式为 MODE_STATIC 时,调用 play 之前必须保证 write 方法已被调用。 5....暂停播放 public void pause() 暂停播放数据,尚未播放的数据不会被丢弃,再次调用 play 时将继续播放。 6....接着我们监听到 INFO_OUTPUT_FORMAT_CHANGED 状态时,获取该音频轨道的格式信息, MediaFormat 提供了足够的信息可以让我们初始化 AudioTrack。

2.1K31
  • AudioTrack源码解读(2)

    源码介绍 播放线程运行 首先从播放线程的拉起开始,这儿以PlaybackThread为例, 由于PlaybackThread是以智能指针形式存在的,因此在创建后,会调用onFirstRef,因此这整个流程从这个函数开始...Play接口实现 public void play() throws IllegalStateException { if (mState !...= STATE_INITIALIZED) { throw new IllegalStateException("play() called on uninitialized AudioTrack...Stop实现 这儿直接从AudioTrack native的实现看,可以猜想到这儿需要完成的事情主要有调用Track的stop,并停止回调线程 void AudioTrack::stop() {...因为在AudioFlinger中创建Track的时候就分配了一块共享内存,并把内存fd 通过binder共享给了调用方,这样调用方就可以直接在这块内存上获取可用内存了,具体实现如下: status_t

    1.3K20

    AudioTrack和AudioRecord使用

    本篇介绍 本篇介绍下AudioTrack和AudioRecord的使用,通过AudioRecord录音,通过AudioTrack播放录制的音频。...创建好后,调用startRecording就可以采集了。具体采集需要在单独的线程里面做,调用AudioRecord的read就可以,读出来的内容就是采集的数据,这儿是写到了一个文件里面。...AudioTrack的使用 AudioTrack负责播放pcm数据,下面的代码是将刚采集的pcm播放出来 AudioAttributes audioAttributes = new AudioAttributes.Builder...); tracker.play(); currentState = 2; executorService.submit(new Runnable() {...,也是需要指定采集位数,采集频率,输出声道,播放buffer,然后调用play就可以播放了,具体的播放就是在单独线程里面调用AudioTrack的write即可。

    57920

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

    PCM PCM是在由模拟信号向数字信号转化的一种常用的编码格式,称为脉冲编码调制,PCM将模拟信号按照一定的间距划分为多段,然后通过二进制去量化每一个间距的强度。...PCM表示的是音频文件中随着时间的流逝的一段音频的振幅。Android在WAV文件中支持PCM的音频数据。 WAV WAV,MP3等比较常见的音频格式,不同的编码格式对应不通过的原始音频。...获取wav文件 若要获得wav文件,需要在PCM基础上增加一个header。可以将PCM文件转换成wav,这里提供一种PCM与wav几乎同时生成的思路。...初始化AudioTrack时,要根据录制时的参数进行设定。 代码示例 工具类WindEar实现音频PCM数据的采集和播放,与读写音频wav文件的功能。...*/ public static void init(Context context) { // 存储在App内或SD卡上 // cachePCMFolder

    3.5K30

    Android开发笔记(一百二十六)自定义音乐播放器

    MediaRecorder/MediaPlayer 在Android手机上面,音频的处理比视频还要复杂,这真是出人意料。...MediaRecorder与MediaPlayer在处理音频和视频时,整体流程是一样的,只有在部分方法的调用上有所差异,下面分别把录音/播音有关的方法列出来。...该方法要在setVideoEncoder之前调用,不然调用setAudioEncoder时会报错“java.lang.IllegalStateException”。...SoundPool在使用时可以事先加载多个音频,然后在需要的时候播放指定编号的音频,这样处理有几个好处: 1、资源占用量小,不像MediaPlayer那么重; 2、延迟时间相对MediaPlayer...对于第三点的歌曲控制栏,总体上复用前一篇博文提到的视频控制栏VideoController,博文名称是《Android开发笔记(一百二十五)自定义视频播放器》。

    3K30

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

    OpenSL ES是无授权费、跨平台、针对嵌入式系统 精心优化的硬件音频加速API。当然安卓也使用了它,AudioTrack、MediaPlayer的音频播放,底层都是利用OpenSL。...和AudioTrack相同,它只接受流,不支持音频数据的编解码,所以需要结合第三方库来使用。 为什么要使用OpenSL?...一般应用使用安卓SDK提供的API就足够满足使用,但对于专门音频播放的APP,系统提供的方法就有点力不从心了,比如:AudioTrack利用native层调用OpenSL,必不可免的要进行java层流数据转化为...前面我们使用了FFmpeg解码音频流,并使用了java层的AudioTrack进行播放,今天来实现在native层直接使用OpenSL播放。..., AudioFormat.ENCODING_PCM_16BIT, buffSize, AudioTrack.MODE_STREAM); audioTrack.play(); }

    1.2K30

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

    ),包含了音视频播放,音视频录制等...但是还有一个被遗弃的熊孩子AudioTrack,这个因为太不好用了而被人过门而不入(反正肯定不是因为懒),这Android上多媒体四大家族就齐了,MediaPlayer...MP3的波形数据提取 当那位小伙提出这个需求的时候,我就想起了AudioTrack这个类,和AudioRecord功能的使用方法十分相似,使用的时候初始化好之后对数据的buffer执行write就可以发出呻吟了...下面直接看代码吧,都有注释(真的不是懒得讲╮(╯_╰)╭): 流程就是定义好buffer,初始化MediaExtractor来获取数据,MediaCodec对数据进行解码,初始化AudioTrack播放数据...因为上一期的波形播放数据是short形状的,所以我们为了兼容就把数据转为short,这里要注意合成short可能有大小位的问题,然后计算音量用于提取特征值。...); //开始play,等待write发出声音 audioTrack.play(); extractor.selectTrack(0);//选择读取音轨 // start decoding final

    3.5K20

    一种“在 Android 设备上,播放视频的同时,获取实时音频流”的有效方案

    这篇文章将会按照一般的需求开发流程,从需求、分析、开发,到总结,来给大家讲解一种“在 Android 设备上,播放视频的同时,获取实时音频流”的有效方案。...一、需求 在车载产品上,有这样一种需求,比如我把我的Android设备通过usb线连接上车机,这时我希望我在我Android手机上的操作,能同步到车机大屏上进行显示。...接下来我们再了解下,在Android系统上,声音的播放流程是怎样的?这对我们如何去获取视频播放时候的音频流,很有帮助。 我们先看下关于视频的播放、录音,Android给我们提供了哪些API?...从上面的音频系统框架图(看画红线的部分),我们可以知道,应用上调用MediaPlayer、MediaRecorder来播放、录音,在framewrok层会调用到AudioTrack.cpp这个文件。...,就是在framework层的AudioTrack.cpp文件中,通过socket,把音频流实时的发送出来。

    2.2K40

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

    一个采样的存储空间,常用16bit (0-65535)振幅 采样率 :采样频率 8K、16K、32k、(AAC)44.1K、48K(1s在模拟信号上采集48K次) 20Hz 频率即1s振动20次,使用...听觉频率与发生频率对比图.jpg ---- 2.人耳的“掩蔽效应”:参见--音视频知识-掩蔽效应 人并不是在85Hz~1100Hz所有的声音都是能听到的,还要取决于响度 当频率很低的时候需要更大的响度...(振幅)才能被听到 最简单的响度-频率关系图如下(图是我用ps修的,如果有误,欢迎指正): 可见在3KHz~5KHz的阀值较小,也就是更容易听到 ?...响度-频率曲线.jpg ---- 当某个时刻响起一个高分贝的声音,它周围会出现遮蔽区域 如在轰鸣的机械运转中(红色),工人普通语言交流(灰色)是困难的 在遮蔽区域内的声音人耳是无法识别的,这时可以提高音量...= -1) {// audioTrack.play(); audioTrack.write(tempBuffer

    3.6K30

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

    FFmpeg系列04--FFmpeg调用MediaCodec进行硬解码 本篇文章将通过音频基础、AudioTrack、FFmpeg音频解码&重采样三个部分的讲解来完成对Demo中mp4文件内音频流的解码与播放功能...DO NOT USE if linking dynamically }; 以双声道为例,planar格式在存储时,左右声道的数据分开存储,左声道在data[0],右声道数据在data[1],每个声道所占用的字节数为...linesize[0]和linesize[1] packed格式则按照LRLRLR...的格式交错存储在data[0]中,总的数据量为linesize[0] eg:双声道的AV_SAMPLE_FMT_S16...play() 实时写入数据 mAudioTrack?.write(audio, 0, size) 释放 mAudioTrack?.stop() mAudioTrack?....,可以查看源码中的AudioDecoder.cpp 这里重点说说重采样的过程 初始化重采样上下文 mSwrContext = swr_alloc_set_opts( nullptr,

    1.4K20

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

    PCM采集的数据需要AudioTrack播放,AudioTrack也可以将PCM的数据转换成其他格式 ---- 1.1:音频来源:int audioSource ?...MODE_STATIC:适合小文件 所有数据通过一次write调用传递到AudioTrack中的内部缓冲区。 这种模式适用于像铃声这种内存占用量较小,延时要求较高的文件。 ?...编码方式.png ---- 4.MediaPlayer MediaPlayer可以播放多种格式的声音文件(mp3,w4a,aac) MediaPlayer在framework层也实例化了AudioTrack..., 其实质是MediaPlayer在framework层进行解码后,生成PCM流,然后代理委托给AudioTrack, 最后AudioTrack传递给AudioFlinger进行混音,然后才传递给硬件播放...资源文件.png ---- 1.初始化 做一个两个音效每次点击依次播放一个的效果 private SoundPool mSp; private HashMap mSoundMap

    2.8K20

    【Android 音视频开发打怪升级:音视频硬解码篇】三、音视频播放:音视频同步

    : codec.configure(format, mSurface , null, 0) 不知道在上一篇文章,你有没有发现,在BaseDecoder初始化解码器的方法initCodec()中, 调用了...在surface初始化完毕后,再配置MediaCodec。...需要初始化一个音频渲染器:AudioTrack 由于解码出来的数据是PCM数据,所以直接使用AudioTrack播放即可。在initRender() 中对其进行初始化。...play() 4. 手动渲染音频数据,实现播放 最后就是将解码出来的数据写入AudioTrack,实现播放。...四、调用并播放 以上,基本实现了音视频的播放流程,如无意外,在页面上调用以上音视频解码器,就可以实现播放了。 简单看下页面和相关调用。 main_activity.xml <?

    2.4K20

    Android ExoPlayer 音画同步代码分析

    ,在ExoPlayer中,自定义的MediaClock基本上很难从外部传入,那么,如果想在外部传入自定义的MediaClock怎么实现呢 ?...这个我们可以看看 doSomeWork()方法的调用,该方法在 ExoPlayer 会定时调用,用来驱动播放状态、资源加载和音画同步,方法代码实现较多,这里简单截取一下关键代码。...然而,在部分设备上通过AudioTack#getPlaybackHeadPosition计算时间存在很多问题,因为存在很多难点,主要是延迟的处理,有的设备上获取的PlaybackHeadPosition...说到这里,那么如何解决AudioTrack 时间抖动的的缺陷呢 ?...一种可行的方法就是检测抖动,达到一定的阈值时不在调用getPlayHeadPosition方法,而是通过自定义的时钟去计算进度,只在pause、play、resume时调用,当然,还要在getPlayHeadPosition

    1.5K20
    领券