android - 如何知道音调发生器何时停止播放

标签 android thread-sleep tone-generator

我跪下来想知道我的音频发生器何时停止播放。

我想播放 dtmf 音调 50 毫秒,然后等待 50 毫秒播放下一个音调。 我想使用这个代码。

private void playtones() {
    new Thread(new Runnable() {
        public void run() {
            for(int i=0 ; i<=19 ; i++){
                dtmftone.startTone(savetone.get(i) , 50);
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }   
            }
            }

        }
      ).start();

}

sleep 在提示音停止播放之前开始。 如何检查提示音是否已停止播放? 或者有更好的方法来做到这一点吗?

感谢您的帮助。

最佳答案

您应该使用方法wait(long millis) ToneGenerator 而不是 Thread.sleep()。
请注意,该方法不会等待声音停止,因此您必须考虑蜂鸣声的持续时间:

int BEEP_DURATION = 50;
int WAITING_DURATION = 50;

...

for (int i = 0; i <= 19; i++) {
    dtmftone.startTone(savetone.get(i), BEEP_DURATION);
    synchronized(dtmftone) {
        dtmftone.wait(BEEP_DURATION + WAITING_DURATION);
    }
...

我不确定您是否要在两次蜂鸣声之间等待 50 毫秒。如果不这样做,只需删除“+ WAITING_DURATION”

关于android - 如何知道音调发生器何时停止播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14753764/

相关文章:

java - 如何使用 ksoap2 将参数传递给 web 服务?

java - YouTubePlayer.Provider 初始化方法引起的内存泄漏

android - 在 Android 中的多个 Activity 中保持相同的背景并将它们排除在 Activity 转换之外

java - Android ToneGenerator startTone() 第一次调用时非常慢

ios - 将 16 位短整型转换为 32 位浮点型

java - 解析Json阿拉伯语文本

java - Thread.sleep() 不工作

Java 鼠标事件错误 - "method already defined in class"

java - 多线程中的死锁示例

java - ToneGenerator 会严重降低应用程序的速度