在 Android 应用程序中播放 .wav/.mp3/.ogg 音频文件时出现延迟

2024-04-16

我编写了一个用于播放 20 毫秒音频剪辑(.wav 格式)的应用程序。 它只是重复播放声音片段 1000 次。

但由于延迟,它的播放次数在 978 到 984 之间。我还尝试过其他音频格式(.ogg、.mp3 等)。

我想减少延迟并获得可靠的号码。

我在下面分享我的代码:

package com.abhinav.soundlooper;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.app.Activity;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {

Button btnStart;
TextView tvPause, tvLoop;
EditText etPause, etLoop;
long pause, loop;
private CountDownTimer timer;
MediaPlayer mp;
public Thread t;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    btnStart = (Button) findViewById(R.id.btnStart);
//      tvLoop = (TextView) findViewById(R.id.etLoop)
    etPause = (EditText) findViewById(R.id.etPause);
    etLoop = (EditText) findViewById(R.id.etLoop);
    btnStart.setOnClickListener(this);
    mp = MediaPlayer.create(getApplicationContext(), R.raw.beepwav);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

        finish();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public void onClick(final View v) {
    // TODO Auto-generated method stub
//      pause = Integer.valueOf(etPause.getText().toString()) + 1 ;
//      loop = 1 + Integer.valueOf(etLoop.getText().toString());
//      long ti = (pause+30);
//      long tt = ti*loop;

        timer = new CountDownTimer(30000, 30) {

            int i =0;
             public void onTick(long millisUntilFinished) {

//                   v.playSoundEffect(android.view.SoundEffectConstants.CLICK);
                    mp.start();
//                      try {
//                          timer.wait(10);
//                      } catch (InterruptedException e) {
//                          // TODO Auto-generated catch block
//                          e.printStackTrace();
//                      }
                    i++;

             }

             public void onFinish() {
//                   mTextField.setText("done!");
                 Log.i("loop", ""+i);
                 stopAll();
//                   mp.stop();
//                   mp.release();

             }
          }.start();
//            
}

protected void stopAll() {
    // TODO Auto-generated method stub
    timer.cancel();
}

}

我不确定 1000 毫秒是否等于 1 秒。所以 30,000 毫秒就是 30 秒。 如果音频是 20 毫秒那么30,000/20 is 1,500。因此音频能够在 30 秒内播放 1.5K。

        timer = new CountDownTimer(30000, 27) {

            int i =0;
             public void onTick(long millisUntilFinished) {

//                   v.playSoundEffect(android.view.SoundEffectConstants.CLICK);
                    mp.start();
//                      try {
//                          timer.wait(10);
//                      } catch (InterruptedException e) {
//                          // TODO Auto-generated catch block
//                          e.printStackTrace();
//                      }
                    i++;

             }

如果 30 的延迟是 950 倍,那么如果我们将延迟降低到 27 左右会发生什么?

你总是可以使用 if 语句..

if (i == 1000){
             stopAll();
} else {
i++
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android 应用程序中播放 .wav/.mp3/.ogg 音频文件时出现延迟 的相关文章

  • 在名称中使用时间戳时,Android Studio 在构建后无法启动应用程序

    我遇到了 gradle 和 Android Studio 的问题 该问题仅在 Android Studio 中构建时出现 BuildServer 和 Commandline 工作正常 applicationVariants all vari
  • OPENGL ES 不工作:无当前上下文

    我尝试了 OpenGL ES2 for Android 一书中所示的程序 但它不起作用 我已经在Odroid E 三星s3 三星y 三星star上进行了测试 the gl version suported returns 2 but i g
  • Android 中的 java.util.Observable 是线程安全的吗?

    Android 中的 java util Observable 是线程安全的吗 这文档 http developer android com reference java util Observable html说只有deleteObser
  • Android CursorAdapter、ListView 和后台线程

    我一直在开发的这个应用程序有包含数兆字节数据的数据库可供筛选 许多活动只是列表视图 通过数据库中的各个级别的数据下降 直到到达 文档 即从数据库中提取并显示在手机上的 HTML 我遇到的问题是 其中一些活动需要能够通过捕获击键并重新运行带有
  • Android 中有没有办法获取 SD 卡大小?

    欢迎大家 我已经在 Stackoverflow 和 google 上尝试过与此相关的每个问题 但没有一个有效 我已经尝试过类似下一个链接的操作 但它返回的内容与内部存储相同 如何获取外部存储 SD 卡的大小 带安装的 SD 卡 https
  • 多语言 Android 应用程序:在电子邮件和密码字段中显示英文键盘

    我们正在开发一款多语言 Android 应用程序 针对英语和阿拉伯语 面临的问题是在登录和注册屏幕中 我们希望仅以英文文本输入用户名和密码字段 从而显示英文键盘 无论设备区域设置语言如何 已尝试在 edittext 中设置 inputtyp
  • 如何通过 HTML 按钮播放声音

    我目前通过网站播放音乐的方法是通过 HTML 音频标签 不过我希望能够通过 HTML 按钮来播放它 该按钮应该能够在播放和停止之间切换音乐 我在 JSFiddle 创建了一个示例 但不知道如何实现它 有人可以告诉我如何使用我的 JSFidd
  • 无法在云控制台中启用 Maps SDK for Android

    我在云控制台中启用适用于 Android 的 Maps SDK 时遇到此问题 https console cloud google com https console cloud google com 它会抛出以下错误 附截图 我收到错误消
  • 使用 RxJava 限制吞吐量

    我现在遇到的情况很难解释 所以我会写一个更简单的版本来解释这个问题 我有一个Observable from 它发出一系列由ArrayList文件数量 所有这些文件都应上传到服务器 为此 我有一个函数可以完成这项工作并返回一个Observab
  • 更改 Android 中的媒体音量?

    我可以更改媒体音量吗 如何 到目前为止我用过这个 setVolumeControlStream AudioManager STREAM MUSIC 但有一个搜索栏并且想要更改媒体音量 而不是铃声音量 那么有人可以告诉我如何更改媒体音量onC
  • Android - 多次实例化一个片段?

    我正在创建一个在 ListView 中显示数据的应用程序 数据分为两种类型 热门 收藏夹 我有一个活动和两个片段 片段根据类别显示项目列表 我为此使用了 ListView 然后我有两个fragment layouts 它们在设计上完全相同
  • 收到“无法解析上传的APK的AndroidManifest.xml。它是否正确编译?”启用 Google 应用签名后出现错误

    启用后谷歌应用程序签名 https support google com googleplay android developer answer 7384423 hl en 每次我尝试将签名版本 APK 上传到 Play 商店时 都会收到一
  • 如何知道用户是否在 Android 应用程序中输入了错误的密码(锁定屏幕)

    我正在开发一个 Android 应用程序 如果用户在 Android 锁定屏幕中输入错误的密码 则必须完成其中一项活动 例如 如果用户输入错误的密码 则会发送电子邮件 我将不胜感激任何帮助 提前致谢 Kshitij 锁屏在完全沙箱环境中运行
  • 使用 UPI url 调用 PSP 应用程序

    我正在尝试创建一个商家应用程序 它将根据 NPCI 的指南生成一个 url 此 url 将作为意图共享 并且 PSP 应用程序 任何注册的银行应用程序 应该能够侦听该 url 并被调用 我已经形成了这样的网址 upi pay pa icic
  • 如何更改 Android 12 启动屏幕中的图标形状?

    我想要矩形形状的启动屏幕图标 而不是 android 12 中的圆形形状 我不相信你可以 如果你看这里的第 3 点 https developer android com about versions 12 features splash
  • 在 android 中,第一次单击时按钮侦听器未注册

    因为我是 Android 新手 所以我遇到了按钮监听器的问题 我正在使用 OnClickListener 来处理胸像 但它第一次点击后不执行一旦我单击多个 它就会表现良好 但如何使其在第一次单击时成为可能 这是我的代码 public cla
  • 使用后退按钮启动 Activity

    我正在 Android 中开发一个应用程序 我正在寻找解决方案 有一个活动 例如 A1 通过单击按钮 用户可以转到另一个活动 例如 A2 现在 一旦用户完成 A2 活动 他就会单击后退按钮 返回到上一个活动 A1 这是众所周知的事实 A1此
  • 如何在 kotlin 中检查 lambda 空值

    在 Kotlin 中如何检查 lambda 是否为空 例如 我有这样的签名 onError Throwable gt Unit 我如何区分它的默认值是应用于主体还是应用于此函数的值 您无法测试 lambda 的主体是否为空 因此它不包含源代
  • 如何在 onDraw() 方法中定义与像素无关的高度

    我扩展了 View 来构建自定义小部件 我想用独立的像素单位定义小部件的高度 我认为可以通过将像素密度乘以所需的高度来完成 但我不知道该怎么做 到目前为止我所拥有的 最小化 public class Timeline extends Vie
  • 从 sqlite 和 mysql 加载数据微调器

    我试试这个tutorial http nielpoenya blogspot com 2012 08 tutorial android spinner dari database html加载Spinner from sqlite and

随机推荐

  • AWS从EBS切换到EFS

    我正在考虑从 AWS Elastic Block Storage 切换到 AWS Elastic Filesystem 主要是为了易于扩展 而且可共享存储似乎也不错 目前我有一个 debian EC2 实例和一个 EBS 卷 将数据从 EB
  • Python 中丢弃图像时出现内存泄漏

    我目前正在用 Python 编写一个简单的棋盘游戏 我刚刚意识到当图像重新加载时 垃圾收集不会从内存中清除丢弃的位图数据 仅当游戏启动或加载或分辨率更改时才会发生这种情况 但它会增加消耗的内存 所以我不能让这个问题得到解决 重新加载图像时
  • 什么是IDL?

    IDL 是什么意思 我用谷歌搜索了一下 发现它代表接口定义语言 用于组件的接口定义 但是 在实践中 IDL 的目的是什么 微软使用它吗 接口定义语言 IDL 用于在远程过程调用 RPC 中建立客户端和服务器之间的通信 它有很多变体 例如 S
  • batik-rasterizer.jar - 将 svg 转换为 png

    我尝试使用以下命令在我的 Linux 服务器中设置导出服务器 以将图形下载为图像高图表 http www highcharts com docs export module setting up the server command jav
  • 单击p-dialog关闭(X)按钮时如何调用角度函数?

    单击p dialog关闭 X 按钮时如何调用角度函数 我已经搜索并尝试过这个 onHide cancel 但这不起作用 请分享您的解决方案 我知道我们可以使用close cancel按钮隐藏弹出窗口 但在我的场景中 我想在单击 X 按钮单击
  • 在 Swift 中,如何将现有的二进制文件读入数组?

    作为我的项目的一部分 我有一个二进制数据文件 其中包含大量 32 位整数 我的一个类在初始化时读入该文件 在我的 C 库中 我使用以下初始化程序读入它 Evaluator Evaluator m HandNumbers resize 324
  • 如何在向量列表上应用索引向量?

    我想将一个长索引向量 50 多个非连续整数 应用于一长向量列表 包含 100 多个名称的 50 多个字符向量 以便检索特定值 作为列表 向量或数据帧 一个简化的例子如下 gt my list lt list c a b c c d e f
  • 一步一步 YouTrack“在构建中修复”填充 TeamCity 集成

    我正在使用 TeamCity Professional 8 1 和 YouTrack 5 0 6 我已经成功地用两步工作流程填充了 YouTrack 中的 Fixed in build 字段 我在用 issue id 已修复我的 Mercu
  • R闪亮的csv或excel上传选项

    我需要为用户提供上传 csv txt 或 xlsx 格式文件的选项 我正在使用 xlsx 包 并在我的 UI 上提供了一个单选按钮 例如 ui lt dashboardPage dashboardHeader title SKU Healt
  • 如何在pytorch中查看DataLoader中的数据

    我在 Github 上的示例中看到类似以下内容 如何查看该数据的类型 形状和其他属性 train data MyDataset int 1e3 length 50 train iterator DataLoader train data b
  • 获取脚本路径

    在 CSS 中 任何图像路径都是相对于 CSS 文件位置的 f ex 如果我将 CSS 文件放入 media css mystyles css并使用类似的东西 background url images myimage jpg 浏览器将在以
  • NLTK CoreNLPDependencyParser:无法建立连接

    我正在尝试通过 NLTK 使用斯坦福解析器 按照示例here http www nltk org api nltk parse html nltk parse corenlp CoreNLPDependencyParser 20tutori
  • apache 的子进程返回退出代码 -6,但没有 stdout 或 stderr

    当从 apache 进程运行 git status 甚至 ls 时 我经常得不到标准输出或错误 并且退出状态代码为 6 其他时候 它就有效 有什么想法为什么会发生这种情况或者这意味着什么吗 如果您所在的网络有很多人 则可能会耗尽可用的并发连
  • ASP.Net 动态切换母版页

    以前从未需要这样做 但是是否可以动态设置 更改页面正在使用的母版页 有一个旧的 asp net web 表单项目 我为它创建了一个新的引导模板 但老板希望给人们机会打开新的模板 而不是强迫他们使用 我建议您创建一个 BasePage 类 而
  • Java 中的全局异常处理程序

    我正在考虑使用以下命令为我的 Android 移动应用程序 使用 Java 语法 设置一个全局默认异常处理程序Thread setDefaultUncaughtExceptionHandler 称呼 我正在考虑只向用户显示一个带有适当消息的
  • 更改值 recyclerview.adapter 并将其保存到 mainactivity 中的 textview 中?

    当我更改 recyclerview adapter 的值时 我想将其值设置为 mainactivity 中的 textview 该怎么做 it will be like this 从我的 json 中检索回收数据 因此它将是随机的且数据很多
  • Flutter:如何导入现有的 Flutter 项目作为 gradle 项目

    如何导入现有的 Flutter 项目作为 gradle 项目 导入项目 向导要求 Gradle 主路径 我的系统中安装了 gradle 但这里需要设置什么 哪个路径 这是我正在尝试的 Error 我也遇到过这个问题 我必须在 Android
  • 使用 scikit-learn OneClassSVM 时获取每个新观察结果为异常值的概率

    我是 scikit learn 和 SVM 方法的新手 我的数据集与 scikit learn OneClassSVM 配合良好 可以检测异常值 我使用观察来训练 OneClassSVM 所有这些都是 内点 然后使用 Predict 对我的
  • WatchService 和 SwingWorker:如何正确执行?

    WatchService 听起来像是一个令人兴奋的想法 不幸的是 它似乎像教程 api 中警告的那样低级 而且并不真正适合 Swing 事件模型 或者我错过了一些明显的东西 非零概率 获取代码来自教程中的 WatchDir 示例 http
  • 在 Android 应用程序中播放 .wav/.mp3/.ogg 音频文件时出现延迟

    我编写了一个用于播放 20 毫秒音频剪辑 wav 格式 的应用程序 它只是重复播放声音片段 1000 次 但由于延迟 它的播放次数在 978 到 984 之间 我还尝试过其他音频格式 ogg mp3 等 我想减少延迟并获得可靠的号码 我在下