通过文本转语音朗读时暂停电话铃声,然后恢复

2023-11-26

我正在制作一个来电者语音应用程序,它使用 TTS 说出来电者姓名。我想在 TTS 说话时暂停铃声,然后恢复铃声。根据我的研究,我们可以使用AudioFocus(希望如此)。 无论如何我正在使用以下代码

Update

我现在正在使用这段代码。

public void speak(final String talk) throws InterruptedException {
     final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
     int musicVolume= audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
     audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, musicVolume, 0);
     audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

    int result = tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {

        @Override
        public void onStart(String utteranceId) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onError(String utteranceId) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onDone(String utteranceId) {
            // TODO Auto-generated method stub
            audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
            System.out.println("done");
        }
    });
    HashMap<String, String> params = new HashMap<String, String>();
    params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"stringId");
    tts.speak(talk, TextToSpeech.QUEUE_FLUSH, params);
    System.out.println("speaking after tts is over" + talk+" "+result);

}

虽然Ringtone被停止并且tts已播放但之后tts玩过的Ringtone没有恢复。我应该怎么办?


终于在折腾了两天之后我终于做到了。对于所有想要实现类似的东西但无法这样做的人,这里是代码

public void speak(final String talk) throws InterruptedException {
    final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    int ringVolume = audioManager
            .getStreamVolume(AudioManager.STREAM_RING);
    int musicVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
    currentRingVolume = ringVolume;

    musicVolume = (int) ((musicVolume * seekbarValue) / 100);

    if (PauseRingtone == true) {
        audioManager.setStreamVolume(AudioManager.STREAM_RING, 1,
                AudioManager.FLAG_SHOW_UI);
    } else {
        audioManager.setStreamVolume(AudioManager.STREAM_RING,
                ringVolume, AudioManager.FLAG_SHOW_UI);
    }

    audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, musicVolume, 0);

    int result = tts
            .setOnUtteranceProgressListener(new UtteranceProgressListener() {

                @Override
                public void onStart(String utteranceId) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onError(String utteranceId) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onDone(String utteranceId) {
                    // TODO Auto-generated method stub
                    System.out.println("done");
                    audioManager.setStreamVolume(AudioManager.STREAM_RING,
                            currentRingVolume, 0);
                }
            });
    HashMap<String, String> params = new HashMap<String, String>();
    params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "stringId");
    tts.speak(talk, TextToSpeech.QUEUE_FLUSH, params);
    System.out.println("speaking after tts is over" + talk + " " + result);

}

解释 :-

ringVolume- 获取当前音量ringtone.即手机中设置的铃声音量。

musicVolume- 获取当前音量music

currentRingVolume只是保留了ringVolume.

Note- STREAM_RING and STREAM_MUSIC are different things. See different volumes

现在的基本想法是mute the ringtone while TTS正在说话,然后将其设置为先前的值。

seekBarValue- is my SeekBar它描绘了的水平TTS体积 w.r.tmusicVolume并且是可选的。

PauseRingtone- is a CheckBox Preference它检查我们是否要在说话时暂停铃声。如果true是设置AudioManager.STREAM_RING to 1 i.e. vibrate else ringVolume i.e. Phone Value,所以两者TTS and Ringtone同时玩。

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,musicVolume, 0) 

设置音量TTS to musicVolume. After TTS已完成讲话,即在onDone()我们设置音量Ringtone回到ringVolume using currentRingVolume.

如果我的答案有帮助,则标记我的答案有用。

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

通过文本转语音朗读时暂停电话铃声,然后恢复 的相关文章

随机推荐

  • SSD mobilenet模型无法检测较远距离的物体

    我已经使用自定义数据集 电池 训练了 SSD Mobilenet 模型 下面给出了电池的示例图像 并附上了我用来训练模型的配置文件 当物体靠近相机时 使用网络摄像头测试 它以超过的概率准确地检测到物体0 95但是当我将物体移动到更远的距离时
  • jQuery .css() 函数不返回预期值

    好吧 我已经搜索了 jQuery 文档 需要有人专门维护 我已经搜索了 SO 并且我已经搜索了 Google 我找不到这个问题的答案 In Words 过去 我记得 jQuery 是这样工作的 myObj width 返回计算出的宽度 my
  • Apache Cordova:无法加载资源:服务器响应状态为 404(未找到)

    当我在 Android 模拟器或 Android 设备上运行应用程序时 我在所有 AJAX 请求上收到以下错误 Failed to load resource the server responded with a status of 40
  • 在 C# 中解析字符串中“坏”单词的最佳方法是什么?

    我在想这样的事情 foreach var word in paragraph split if badWordArray Contains word do something about it 但我确信有更好的方法 提前致谢 UPDATE我
  • 防止重写和/或隐藏基类函数 (C++ 11)

    自从学习 C 以来 我有一段时间甚至想阻止基类非虚函数的隐藏 我不确定这是否符合道德 但 C 11 功能给了我一个想法 假设我有以下内容 基地 h ifndef baseexample h define baseexample h incl
  • 使用可变参数和泛型时出现 ClassCastException

    我正在使用 java 泛型和可变参数 如果我使用下面的代码 我会得到一个ClassCastException 即使我根本不使用强制转换 更奇怪的是 如果我在 Android dalvik 上运行这个 异常中不会包含堆栈跟踪 如果我将接口更改
  • 检查s3存储桶中是否存在文件夹

    如何使用 Ruby on Rails 检查我的 s3 存储桶中是否存在某个文件夹 我正在使用 AWS S3 官方 gem 初始化全局连接后 AWS S3 Base establish connection access key id gt
  • 替换 MYSQL 中的非 ASCII 字符

    要将非 ASCII 字符转换为 ASCII 我使用了以下查询 UPDATE tablename SET columnToCheck CONVERT columnToCheck USING ASCII WHERE columnToCheck
  • 芹菜异常处理

    假设我有这个任务定义 def some other foo input raise Exception This is not handled return input app task bind True max retries 5 so
  • 专门化静态 constexpr 数据成员

    我有一个类来描述某种类型的一些特征 template
  • Hammer JS 无法与主干一起工作

    我正在尝试让 Hammer JS 事件与主干一起工作 但无法让它响应事件 我已经尝试过以下方法 http cijug ne t tech 2013 01 16 backbone hammer https gist github com kj
  • 如何调整 Google AdWords 跟踪像素以在 AngularJS 应用程序中使用?

    如何调整 AdWords 跟踪像素以使其在 AngularJS 应用程序中按预期运行 典型的跟踪代码如下所示
  • 更改 UIBarButtonItem 的宽度[重复]

    这个问题在这里已经有答案了 我怎样才能改变宽度UIBarButtonItem到 29 像素 属性宽度不起作用 我不想创建一个UIButton并使用initWithCustomView因为我希望方形背景适应导航栏颜色 我正在使用initWit
  • 如何将 graphql-type-json 包与 GraphQl 一起使用

    我无法让 GraphQL 识别 JSON 标量类型 我遵循了 apollo 文档 http dev apollodata com tools graphql tools scalars html Using a package 为我的架构定
  • 有哪些类型的宏/语法扩展/编译器插件?

    我对 Rust 生态系统中用于几个类似宏的事物的许多术语感到非常困惑 有人可以澄清有哪些宏 语法扩展 编译器插件并解释这些术语之间的关系吗 你说得对 它is令人困惑 特别是 因为大多数这些功能都不稳定并且经常变化 但我会尝试总结一下目前的情
  • 全屏视频切换 HTML

    HTML 5 中的视频标签确实令人着迷 我需要知道是否可以让用户切换全屏播放 我不想使用任何其他视频插件 我只需要使用视频标签 那么这可能吗 请帮帮我 您可以使用以下代码创建一个按钮 使视频进入全屏模式 JavaScript 代码
  • GC.SuppressFinalize 是否有保证?

    我在实践中的观察是GC SuppressFinalize并不总是抑制对终结器的调用 尽管如此 终结器仍可能被调用 因此我想知道是否GC SuppressFinalize具有以下性质request而不是一个保证通过系统 更多信息 如果需要 以
  • 如果间接调用sied方法则不会调用Sinon Spy

    Problem 在我们的代码库中 我们遇到了 sinon 的问题 可以使用下面的代码片段来重现该问题 问题是 这似乎是间接的所谓间谍还击力量false the console log明确指出该方法被调用 但spy called遗迹false
  • Jython 不会导入用户定义的类;导入错误:没有名为 ****** 的模块

    这几天我一直在用头撞墙 试图解决这个问题 我已经开始使用 Jython 进行快速原型设计 我遇到了一个看似非常基本的问题 但我似乎无法克服它 我是在JythonBook 的第 10 章当我尝试编写和使用 Beach 类时遇到了问题 从标记为
  • 通过文本转语音朗读时暂停电话铃声,然后恢复

    我正在制作一个来电者语音应用程序 它使用 TTS 说出来电者姓名 我想在 TTS 说话时暂停铃声 然后恢复铃声 根据我的研究 我们可以使用AudioFocus 希望如此 无论如何我正在使用以下代码 Update 我现在正在使用这段代码 pu