我们可以随便下载一个音频文件,比如 alarm.mp3 ,需要将其放置在 /res/raw/ 路径下。

2 activity_main.xml

这里,我们加一个按钮,当我们按下这个按钮后,APP 播放指定的音乐。

<Button
    android:id="@+id/pushButton"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:text="Press"
    android:textColor="@color/white"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.498"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.344" />

3 MainActivity.kt

class MainActivity : AppCompatActivity() {
    private var mediaPlayer: MediaPlayer? = null
    @SuppressLint("ClickableViewAccessibility", "ResourceType")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        mediaPlayer = MediaPlayer.create(this, R.raw.alarm1)
        mediaPlayer?.setOnPreparedListener{
            println("READY TO GO")
        pushButton.setOnTouchListener { _, event ->
            handleTouch(event)
    // 按下按钮后,报警声音响起
    private fun handleTouch(event: MotionEvent)
        when (event.action) {
            MotionEvent.ACTION_DOWN -> {
                println("down")
                mediaPlayer?.start()
            MotionEvent.ACTION_UP -> {
                println("up")
                mediaPlayer?.pause()
                mediaPlayer?.seekTo(0)
                // 使用完MediaPlayer需要回收资源。
                // MediaPlayer是很消耗系统资源的,所以在使用完MediaPlayer,不要等待系统自动回收,最好是主动回收资源。
                if (mediaPlayer != null && mediaPlayer?.isPlaying == true) {
                    mediaPlayer?.stop()
                    mediaPlayer?.release()
                    mediaPlayer = null
            else -> {
                println("others")

这里的逻辑还是比较直白的,有几个点需要解释一下。首先,我们需要先创建一个新的 MediaPlayer,用于播放自定义的音乐:MediaPlayer.create(this, R.raw.alarm1),这里,此音乐命名为 alarm1.mp3,并存放于 res/raw/ 文件夹下。mediaPlayer?.setOnPreparedListener 在这里没有任何作用,这个函数的作用是告诉我们音频何时准备好播放:Register a callback to be invoked when the media source is ready for playback.。当我们按下按钮后,会触发 handleTouch 函数,或者更准确地说,是 handleTouch 中的 MotionEvent.ACTION_DOWNmediaPlayer?.start() 即播放音乐的指令。当我们松开按钮时,便会触发 handleTouch 中的 MotionEvent.ACTION_UP。最后需要注意,MediaPlayer 是很消耗系统资源的,所以在使用完 MediaPlayer,不要等待系统自动回收,最好是主动回收资源:mediaPlayer?.stop()mediaPlayer?.release()

<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android xmlns:tools=http://schemas.android.com/tools android:
AndroidManifest.xml 权限:&lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt; &lt;uses-permission android:name="android.permission.RECORD_AUDIO" /&gt;build.gradle --用了第三方管理...
HTTP、FTP、DNS传输层:为两台主机提供端到端的基础通信 TCP、UDP网络层:控制分组传输、路由选择等 IP链路层:操作系统设备驱动程序、网卡相关接口TCP 连接;可靠;有序;面向字节流;速度慢;较重量;全双工;适用于文件传输、浏览器等UDP 无连接;不可靠;无序;面向报文;速度快;轻量;适用于即时通讯、视频通话等A:你能听到吗? B:我能听到,你能听到吗? A:我能听到,开始吧A 和 B 两方都要能确保:我说的话,你能听到;你说的话,我能听到。所以需要三次握手A 实时音频流Android应用程序,使用户可以将音频记录和流式传输到本地服务器,并进行简单的分析。 这是一个示例应用程序,可让用户录制音频并将其实时流式传输到本地服务器。 作为回报,服务器分析音频并生成一些显示给用户的结果数据。 用户可以查看过去的会话列表,单击它们以查看结果并播放录音。 以Kotlin语言编写,使用AudioRecord API 遵循MVP体系结构的存储库模式 第三方图书馆 Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the L
Kotlin FFMpeg工具 在带有KotlinAndroid上使用FFMpeg库的示例 For Video, Audio and Image/GIF operations 。 应用已预加载了音频,视频,图像,字体资源,这些资源对于尝试FFmpeg库很有用。 您也可以添加资源,但要保留扩展名并确保命名约定与该项目中使用的约定相同,以避免发生任何I / OExceptions。 每个示例将在对话框中预览结果。 文件保存在本地存储目录中,可以从那里直接访问。 FFMpeg示例(视频): 均等分割视频 VideoSplitter.with(context!!) ## 一自定义一个VitamioVideoView ##     public class VitamioVideoView extends io.vov.vitamio.widget.VideoView{     public VitamioVideoView(Cont
具体如下: 下面,我将带着上述几个问题,详细讲解自身学习Android的方法和Android学习路径;最后,还会结合前面内容,给出综合的具体执行学习Android的建议。 面向Android初、中级开发者,对于要学习的Android理论知识,我认为主要包括: Android基础 &... 1.权限获得 1.在AndroidManifest.xml文件中,做如下声明: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Kotlin是一种基于Java虚拟机(JVM)的静态类型编程语言,而MP3Lame是一个用于音频编码的开源库。SO库文件是在Android平台上使用的共享对象库文件,用于提供特定功能的二进制代码。 Kotlin MP3Lame SO库文件是将Kotlin和MP3Lame库结合在一起使用的库文件。它可以在Kotlin语言中调用MP3Lame库提供的功能,例如对音频进行编码和解码。 相关问题: 1. Kotlin是什么? 2. MP3Lame是什么? 3. SO库文件在Android开发中有什么作用? 4. 如何在Kotlin中使用MP3Lame库?