我对编程非常陌生,尤其是颤抖。我想写一个音板,基本上是一个按钮列表,每个按钮的工作是在按下PC时播放我的PC上的声音。我已经使用列表视图和一些材质按钮完成了设计,但是我不知道如何在按下它们时使它们播放声音。有人可以帮我吗?
答案 0 :(得分:2)
如果您只想在有人按下按钮时播放音乐,则可以按照以下步骤操作:-
1。添加依赖项
dependencies:
audioplayers: ^0.10.0
然后在终端中运行以下命令以获取新添加的软件包-
flutter packages get
2。将其导入main.dart或要使用它的文件中。
import 'package:audioplayers/audio_cache.dart';
将使用两个可以导入 AudioPlayer 或 AudioCache 并播放本地文件 AudioCache 的类。
3。创建一个AudioCache对象
final player = AudioCache();
4。使用play()方法播放音频
player.play('note1.wav');
注意- note1.wav存储在我主目录的 assets 文件夹中,使用play()方法时无需提及它。>
示例代码-
import 'package:audioplayers/audio_cache.dart';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
final player = AudioCache();
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: SafeArea(
child: FlatButton(
child: Text("play "),
onPressed: () {
player.play('note1.wav');
},
),
),
),
);
}
}
答案 1 :(得分:1)
首先,您必须在主项目文件夹名称中创建一个目录,作为存储所有音乐的“资产”。我有 7 首音乐,例如 note1.wav、note2.wav ..... note7.wav。
资产
assets:
- assets/
依赖关系,
dependencies:
audioplayers: ^0.10.0
main.dart 代码
import 'package:audioplayers/audio_cache.dart';
import 'package:flutter/material.dart';
void main() => runApp(Xylophone());
class Xylophone extends StatefulWidget {
@override
_XylophoneState createState() => _XylophoneState();
}
class _XylophoneState extends State<Xylophone> {
// music play sound number function, like note1.wav, note2.wav etc.
void playSound(int number){
final player = AudioCache();
player.play('note$number.wav');
}
// Expanded Widget Function Used for repeated Code
Expanded buildKey(int soundNum, Color color){
return Expanded(
child: FlatButton(
color: color,
onPressed: (){
playSound(soundNum);
},
child: Text(""),
),
);
}
@override
Widget build(BuildContext context) {
// var buttonHeight = MediaQuery.of(context).size.height/2;
return MaterialApp(
debugShowCheckedModeBanner: false,
home: SafeArea(
child: Scaffold(
body: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
buildKey(1, Colors.red),
buildKey(2, Colors.green),
buildKey(3, Colors.blue),
buildKey(4, Colors.deepPurpleAccent),
buildKey(5, Colors.redAccent),
buildKey(6, Colors.black54),
buildKey(7, Colors.pink),
],
),
),
),
);
}
}
答案 2 :(得分:0)
在Android中,MediaPlayer类可以提供帮助。您可以从here
中找到有关它的更多详细信息将要播放的声音放入资源中。然后,在下面的代码。我创建了一个名为raw的新文件夹,其中包含我所有的声音文件。您可以添加自己的。
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.yourSoundName);
mediaPlayer.setLooping(true);
mediaPlayer.start();
答案 3 :(得分:0)
完整代码
void main() => runApp(HomePage());
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
AudioCache _audioCache;
@override
void initState() {
super.initState();
// create this only once
_audioCache = AudioCache(prefix: "audio/", fixedPlayer: AudioPlayer()..setReleaseMode(ReleaseMode.STOP));
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Music play")),
body: RaisedButton(
onPressed: () => _audioCache.play('my_audio.mp3'),
child: Text("Play Audio"),
),
),
);
}
}
pubspec.yaml
文件audioplayers: any
中添加依赖项。在您的pubspec.yaml
文件中添加音频文件。
资产: -资产/audio/my_audio.mp3
运行flutter packages get
答案 4 :(得分:0)
对于重复的声音,我建议使用soundpool软件包。
根据我的经验,它提供了更好的延迟,即触发动作和实际声音播放之间的延迟更短。
这是代码示例(从程序包的自述文件中复制):
import 'package:soundpool/soundpool.dart';
Soundpool pool = Soundpool(streamType: StreamType.notification);
int soundId = await rootBundle.load("sounds/dices.m4a").then((ByteData soundData) {
return pool.load(soundData);
});
int streamId = await pool.play(soundId);