Flutter定制的TTS引擎,如何在for循环中的每次迭代之间实现暂停
Flutter custom made TTS engine, How to implement pause in between each iteration in for loop
我正在开发一个定制的 tts 引擎,我希望音频文件一个接一个地播放,中间有短暂的停顿。
这是我遇到问题的代码,当我按下播放键时,所有声音都会立即播放,中间没有停顿。
我是using:audioplayers.dart包
import 'package:audioplayers/audioplayers.dart';
void playSound() {
List<String> nameArray = sound.split('');
final player = AudioCache();
for (int curIndex = 0; curIndex < nameArray.length; curIndex++) {
Future.delayed(const Duration(milliseconds: 300), () {
player.play(nameArray[curIndex] + ".mp3"); // play next sound
developer.log('0', name: nameArray[curIndex]);
curIndex++;
});
}
}
如果我这样写的话,每个声音之间有 300 毫秒的停顿可以完美地工作:
int curIndex = 0;
final player = AudioCache();
Future.delayed(const Duration(milliseconds: 300), () {
player.play(nameArray[curIndex] + ".mp3"); // play next sound
developer.log('0', name: nameArray[curIndex]);
curIndex++;
Future.delayed(const Duration(milliseconds: 300), () {
player.play(nameArray[curIndex] + ".mp3"); // play next sound
developer.log('0', name: nameArray[curIndex]);
curIndex++;
Future.delayed(const Duration(milliseconds: 300), () {
player.play(nameArray[curIndex] + ".mp3"); // play next sound
developer.log('0', name: nameArray[curIndex]);
curIndex++;
Future.delayed(const Duration(milliseconds: 300), () {
player.play(nameArray[curIndex] + ".mp3"); // play next sound
developer.log('0', name: nameArray[curIndex]);
curIndex++;
Future.delayed(const Duration(milliseconds: 300), () {
player.play(nameArray[curIndex] + ".mp3"); // play next sound
developer.log('0', name: nameArray[curIndex]);
curIndex++;
});
});
});
});
});
}
虽然显然这不是解决方案...因为我需要它才能播放数百次以上。
如果有人能帮我弄清楚为什么第一个和第二个代码有不同的输出以及如何让 for 循环做第二个缩进代码正在做的事情,我将不胜感激。
谢谢
我已经解决了问题,需要在方法中添加 await 和 async
void playSound() async {
List<String> nameArray = sound.split('');
final player = AudioCache();
for (int curIndex = 0; curIndex < nameArray.length; curIndex++) {
await Future.delayed(const Duration(milliseconds: 300));
player.play(nameArray[curIndex] + ".mp3"); // play next sound
developer.log('0', name: nameArray[curIndex]);
curIndex++;
}
}
在网站上找到了这个答案,希望我也检查得更好,这个问题是用计算机科学术语提出的,所以我很难找到它,我正在学习还有。
我正在开发一个定制的 tts 引擎,我希望音频文件一个接一个地播放,中间有短暂的停顿。
这是我遇到问题的代码,当我按下播放键时,所有声音都会立即播放,中间没有停顿。
我是using:audioplayers.dart包
import 'package:audioplayers/audioplayers.dart';
void playSound() {
List<String> nameArray = sound.split('');
final player = AudioCache();
for (int curIndex = 0; curIndex < nameArray.length; curIndex++) {
Future.delayed(const Duration(milliseconds: 300), () {
player.play(nameArray[curIndex] + ".mp3"); // play next sound
developer.log('0', name: nameArray[curIndex]);
curIndex++;
});
}
}
如果我这样写的话,每个声音之间有 300 毫秒的停顿可以完美地工作:
int curIndex = 0;
final player = AudioCache();
Future.delayed(const Duration(milliseconds: 300), () {
player.play(nameArray[curIndex] + ".mp3"); // play next sound
developer.log('0', name: nameArray[curIndex]);
curIndex++;
Future.delayed(const Duration(milliseconds: 300), () {
player.play(nameArray[curIndex] + ".mp3"); // play next sound
developer.log('0', name: nameArray[curIndex]);
curIndex++;
Future.delayed(const Duration(milliseconds: 300), () {
player.play(nameArray[curIndex] + ".mp3"); // play next sound
developer.log('0', name: nameArray[curIndex]);
curIndex++;
Future.delayed(const Duration(milliseconds: 300), () {
player.play(nameArray[curIndex] + ".mp3"); // play next sound
developer.log('0', name: nameArray[curIndex]);
curIndex++;
Future.delayed(const Duration(milliseconds: 300), () {
player.play(nameArray[curIndex] + ".mp3"); // play next sound
developer.log('0', name: nameArray[curIndex]);
curIndex++;
});
});
});
});
});
}
虽然显然这不是解决方案...因为我需要它才能播放数百次以上。
如果有人能帮我弄清楚为什么第一个和第二个代码有不同的输出以及如何让 for 循环做第二个缩进代码正在做的事情,我将不胜感激。
谢谢
我已经解决了问题,需要在方法中添加 await 和 async
void playSound() async {
List<String> nameArray = sound.split('');
final player = AudioCache();
for (int curIndex = 0; curIndex < nameArray.length; curIndex++) {
await Future.delayed(const Duration(milliseconds: 300));
player.play(nameArray[curIndex] + ".mp3"); // play next sound
developer.log('0', name: nameArray[curIndex]);
curIndex++;
}
}
在网站上找到了这个答案,希望我也检查得更好,这个问题是用计算机科学术语提出的,所以我很难找到它,我正在学习还有。