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

AudioTrack:如何检测声音结束?

在AudioTrack中,声音结束的检测可以通过使用一个计时器来实现。在音频播放过程中,每当音频数据被播放时,计时器就会被重置。如果音频播放完毕,即所有数据都已播放完毕,计时器就会达到预设的时间,此时可以认为声音已经结束。

以下是一个示例代码,用于检测AudioTrack中声音的结束:

代码语言:arduino
复制
const int SAMPLE_RATE = 44100;
const int BUFFER_SIZE = 8192;

AudioTrack audioTrack;
short[] audioData = new short[BUFFER_SIZE];

void setup() {
  audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, SAMPLE_RATE, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, BUFFER_SIZE);
  audioTrack.setVolume(1.0f);
  audioTrack.setLoopPoints(0, BUFFER_SIZE / 2, (short) (SAMPLE_RATE * 1000));
}

void loop() {
  audioTrack.write(audioData, 0, BUFFER_SIZE);

  if (audioTrack.getPlayState() == AudioTrack.PLAYSTATE_STOPPED) {
    // 声音已停止播放,可以认为声音已结束
    // 在这里执行声音结束后的操作
  }
}

在上面的代码中,我们创建了一个AudioTrack对象,并使用setLoopPoints方法设置了一个循环点,该循环点从音频数据的开始处开始,以BUFFER_SIZE / 2大小的数据进行循环。在循环中,我们使用write方法将音频数据写入AudioTrack对象中。

当AudioTrack对象的playState变为STOPPED时,即音频播放已停止,可以认为声音已经结束。此时我们可以执行一些声音结束后的操作,例如播放音效或者进行其他一些操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

基于声音的鸟类物种检测

鸟有多种声音,不同的鸟有不同的功能。最常见的是歌曲和“其他声音”(例如通话类型)。 这首歌是“更漂亮”的旋律类型的声音,这使鸟儿可以标记自己的领地并结伴。它通常比“呼叫”复杂得多,并且时间更长。...大多数情况下,这些是简短的声音。...但是如何处理这些问题呢? 为了找到答案,有必要深入研究论文,并发现大多数工作恰巧是由各种AI挑战发起的,例如BirdCLEF和DCASE。...ref=np.max), fmin=FMIN,y_axis='linear') plt.colorbar(format='%+2.0f dB') plt.show() 梅尔光谱图示例 但是它是什么以及它如何工作...听到的每个声音都同时包含多个声音频率。这就是使音频听起来“很深”的原因。 频谱图的技巧是在一个图中还可视化那些频率,而不是像波形那样仅可视化幅度。

2.5K30

使用 AudioTrack 播放音频轨道

在上篇文章 OpenGL ES 实现播放视频帧 中我们已经知道如何使用 GLSurfaceView 将解码后的视频渲染到屏幕上,但是,我们的播放器还不具备音频播放的功能,在本篇文章中我们将使用 AudioTrack...本期内容: PCM 介绍 AudioTrack API 介绍 使用 MediaCodec 解码及播放音频轨道 结束语 02 PCM 介绍 PCM (Pulse-code modulation 脉冲编码调制...量化深度的大小影响到声音的质量,显然,位数越多,量化后的波形越接近原始波形,声音的质量越高,而需要的存储空间也越多;位数越少,声音的质量越低,需要的存储空间越少。...04 MediaCodec 解码并播放音频轨道 如果我们要播放一个音频轨道,需要将音轨解码后才可以播放,之前我们一直在说如何解码视频,如果你看过 AVPlayer Demo ,你一定对如何创建视频轨道解码器很熟悉了...详见: DemoAudioTrackPlayerActivity 05 结束语 关注 GeekDev 公众号你将在第一时间获取最新内容。

2.1K31
  • Android音频系统AudioTrack使用方法详解

    1、Android AudioTrack简介 在android中播放声音可以用MediaPlayer和AudioTrack两种方案的,但是两种方案是有很大区别的,MediaPlayer可以播放多种格式的声音文件...如果是实时的音频数据,那么只能用AudioTrack进行播放。 2、如何使用AudioTrack进行音频播放 //根据采样率,采样精度,单双声道来得到frame的大小。...AudioTrack会自己播放这个buffer中的数据。 这种方法对于铃声等内存占用较小,延时要求较高的声音来说很适用。...:系统声音 STREAM_VOCIE_CALL:电话声音 为什么要分这么多呢?...其实系统将这几种声音的数据分开管理,所以,这个参数对AudioTrack来说,它的含义就是告诉系统,我现在想使用的是哪种类型的声音,这样系统就可以对应管理他们了。

    4.2K51

    基于声音信号的工业设备异常检测

    异常检测主要目标是将异常事件与正常事件区分开来,因此才有了“异常”一词。本文将介绍基于声音信号的工业机械异常检测,使用的数据集是MIMII声音数据集,该数据集很容易在网上获得。...异常检测的任务可以通过多种方式实现。其中最简单的一种方法是将问题作为监督学习任务,并对正常和异常声音训练分类器。这种方法的问题是异常情况很少,相应地异常类的数据量有限,这样会对分类性能有很大的影响。...异常检测 现在引入了自编码器后,可以利用该模型执行异常检测。首先使用机器在正常状态下运行的声音信号来训练构建的自编码器模型。然后将使用训练好的模型在错误阈值的帮助下执行异常检测。...这次要重建的信号既包含来自机器的正常声音,也包含异常声音。使用训练后的模型重建正常和异常声音对应的rmse损失使用下图中的直方图来描述。从图中可以明显看出,正常声音的rmse低于异常声音。...结果非常直观,因为模型在训练阶段没有异常声音的数据,这就是相应的rmse高于正常操作声音的原因。 所以我们可以将重构的rmse值与阈值进行比较,进行异常检测

    52230

    使用FreeSWITCH检测声音文件中的DTMF信息

    今天,有网友问到一个问题——使用什么工具检测录音文件中的DTMF信息。其实FreeSWITCH本身就具备检测DTMF的功能,简单配置一下,写几个脚本就可以了。...由于DTMF与声音都混在话路中,在录音时就也一块将DTMF信息录在了录音文件中,如果想从录音文件中提取这些DTMF信息,就需要对声音文件进行分析,也就是今天我们要解决的问题。...setInputCallbck()安装一个回调函数,在检测到DTMF时便执行该回调函数,就是我们上面写的那个onInputCBF session:streamFile() 一行只是播放一个无限长的声音文件...当然,这也难不住我们,既然我们有FreeSWITCH,那我们可以弄两个FreeSWITCH实例,从一个中呼叫另一个,在其中一个执行playback以播放声音文件,另一个执行上面的Lua脚本检测,问题不就解决了...在FreeSWITCH中,不管是播放声音文件还是检测DTMF都需要一个Channel,在没有实际Channel的情况下,我们就可以生成一个假的Channel。

    2.5K20

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

    实现onKeyDown构造方法:当用户点击返回按钮时注销已经打开的WaveOutF和WaveOutZ占用的资源,结束程序。...实例化 该类时,构造AudioTrack对象, 设置 类型:系统声音,采样率:44100,声道:单声道(右), 采样精度:16bit,缓冲区大小:4096,模式:流媒体。...实例化 该类时,构造AudioTrack对象 ,设置 类型:系统声音,采样率:44100,声道:单声道(左), 采样精度:16bit,缓冲区大小:2*4096,模式:流媒体。...audioTrackF; private short[] m_bitDateF ; // AudioTrack创建所需的缓冲区大小 final int bufferSize = AudioTrack.getMinBufferSize...audioTrackFThread.start(); this.m_date = null; this.m_lenght = 0; } // 通过byteDate转为short型 的声音数据

    48820

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

    一、对声音的简单认识 1、模拟信号[摘录于此] 模拟信号传输过程中就是利用传感器把各种自然界各种连续的信号转换为几乎一模一样的电信号。 比如说话声音,原本是声带的震动。...波形.png ---- 2、声音三要素:正弦函数见 [1] 音量 :(响度)声波震动幅度---A--分贝 [2] 音调 : 声音频率(高音--频率快--声音尖 低音--频率慢--声音沉)----f--...响度-频率曲线.jpg ---- 当某个时刻响起一个高分贝的声音,它周围会出现遮蔽区域 如在轰鸣的机械运转中(红色),工人普通语言交流(灰色)是困难的 在遮蔽区域内的声音人耳是无法识别的,这时可以提高音量...频域遮蔽.jpg ---- 时域掩蔽 掩蔽声音与被掩蔽声音不同时出现时 若掩蔽声音出现之前的一段时间内发生掩蔽效应,称:超前掩蔽(pre-masking) 否则滞后掩蔽(post-masking...; private final ExecutorService mExecutorService; private AudioTrack audioTrack;//音轨 private

    3.5K30

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

    零、前言 今天比较简单,先理一下录制和播放的四位大将 再说一下SoundPool的使用和pcm转wav 讲一下C++文件如何在Android中使用,也就是传说中的JNI 最后讲一下变速播放和变调播放...编码方式.png ---- 4.MediaPlayer MediaPlayer可以播放多种格式的声音文件(mp3,w4a,aac) MediaPlayer在framework层也实例化了AudioTrack...pcm转wav.png ---- 四、变速播放 0.回顾一下第一天对声音的介绍:声音三要素 [1] 音量 :(响度)声波震动幅度---A--分贝 [2] 音调 : 声音频率(高音--频率快--声音尖 低音...--频率慢--声音沉)----f--Hz [3] 音色 :(音品)与材质有关 本质是谐波 ?...如两倍速时,采样频率*2,波的周期减半,本来2s的波,1s就能放完 由于声音频率变化,声音的效果也随之变化 如2倍速时:频率快,高音,声音尖,0.5倍速时:频率慢,低音,声音沉 2倍速是就像一些短视频的倍速变声配音

    2.8K20

    TensorFlow:如何通过声音识别追踪蝙蝠

    在之前的教程中,我们利用TensorFlow的Object Detector API训练了浣熊检测器,在这篇文章中,我将向你展示如何使用TensorFlow构建一个真正的通过声音来追踪蝙蝠位置的探测器。...Librosa 当你用耳机听蝙蝠声音的时候,可以听到一个清晰的声音。...当我们决定如何对数据进行分类时,需要考虑少量的正面样本。 音频信号 正如我们可以看到的,信号的振幅是低噪音的,而信号具有高振幅。但是,这并不意味着所有的声音都是蝙蝠发出的。...通过分析音频信号的不同部分,可以发现信号的多个部分是否具有某些特征(如高标准偏差),从而检测到蝙蝠的声音。 ?...我的正面样本可能与正态分布不同,而且很容易被检测到。为了做到这一点,我使用了scikit learn预处理功能正常化的训练。在训练期间,我发现我对标准化和规范化的想法与scikit定义完全相反。

    1.2K51

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

    不过呢,还有一部分的车子,他们的车机用的是Linux系统,这时如何实现Android设备和linux设备之间的屏幕信息同步呢? ?...接下来的文章,我们只介绍其中的一种场景,就是我手机播放视频的时候,视频内容和视频的声音,都同步到linux系统的车机上。而且这篇文章,我们只介绍音频同步的内容。...接下来我们再了解下,在Android系统上,声音的播放流程是怎样的?这对我们如何去获取视频播放时候的音频流,很有帮助。 我们先看下关于视频的播放、录音,Android给我们提供了哪些API?...我们来看下AudioTrack.cpp里面比较重要的方法 ssize_t AudioTrack::write(const void* buffer, size_t userSize, bool blocking...关于视频流,是如何实现同步的,大家也可以猜猜?

    2.2K40
    领券