Flutter音频播放之just_audio

简介: Flutter音频播放之just_audio

just_audio的使用

just_audio,它是一个用于播放音频的 Flutter 插件。

安装和导入 just_audio

要使用 just_audio 库,需要将其添加到项目的 pubspec.yaml 文件中

dependencies:
   just_audio: ^0.9.34

然后运行以下命令以安装该库:

flutter pub get

要使用 just_audio,需要在代码中导入它:

import 'package:just_audio/just_audio.dart';

播放本地音频文件

要播放本地音频文件,需要创建 AudioPlayer 对象并调用 setFilePath 方法将音频文件的路径传递给它。

以下是一个简单的示例代码,演示了如何使用 just_audio 播放本地音频文件

import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
class AudioPlayerPage extends StatefulWidget {
  @override
  _AudioPlayerPageState createState() => _AudioPlayerPageState();
}
class _AudioPlayerPageState extends State<AudioPlayerPage> {
  final _player = AudioPlayer();
  @override
  void initState() {
    super.initState();
    _player.setFilePath('assets/audio/sample.mp3');
  }
  @override
  void dispose() {
    _player.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            IconButton(
              icon: Icon(Icons.play_arrow),
              onPressed: () {
                _player.play();
              },
            ),
            SizedBox(height: 20),
            IconButton(
              icon: Icon(Icons.pause),
              onPressed: () {
                _player.pause();
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个 AudioPlayer 对象 _player,并在 initState 方法中调用了 setFilePath 方法,将本地音频文件的路径传递给它。在 build 方法中,我们创建了两个按钮,一个用于播放音频,另一个用于暂停音频。当用户按下播放按钮时,我们调用 _player.play() 方法来播放音频。当用户按下暂停按钮时,我们调用 _player.pause() 方法来暂停音频。


在 dispose 方法中,我们调用 _player.dispose() 方法来释放所有资源。


播放网络音频文件

要播放网络音频文件,需要调用 setUrl 方法将音频文件的 URL 传递给 AudioPlayer 对象。以下是一个简单的示例代码,演示了如何使用 just_audio 播放网络音频文件:

import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
class AudioPlayerPage extends StatefulWidget {
  @override
  _AudioPlayerPageState createState() => _AudioPlayerPageState();
}
class _AudioPlayerPageState extends State<AudioPlayerPage> {
  final _player = AudioPlayer();
  final _url = 'https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3';
  @override
  void initState() {
    super.initState();
    _player.setUrl(_url);
  }
  @override
  void dispose() {
    _player.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            IconButton(
              icon: Icon(Icons.play_arrow),
              onPressed: () {
                _player.play();
              },
            ),
            SizedBox(height: 20),
            IconButton(
              icon: Icon(Icons.pause),
              onPressed: () {
                _player.pause();
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个 AudioPlayer 对象 _player,并在 initState 方法中调用了 setUrl 方法,将网络音频文件的 URL 传递给它。在 build 方法中,我们创建了两个按钮,一个用于播放音频,另一个用于暂停音频。当用户按下播放按钮时,我们调用 _player.play() 方法来播放音频。当用户按下暂停按钮时,我们调用 _player.pause() 方法来暂停音频。


在 dispose 方法中,我们调用 _player.dispose() 方法来释放所有资源。


播放音频流

要播放音频流,需要创建一个 AudioPlayer 对象,并调用 setAudioSource 方法来设置音频源。setAudioSource 方法可以接收多种参数类型,包括本地文件路径、网络 URL、DASH/HLS URL、以及自定义的 AudioSource 对象。以下是一个简单的示例代码,演示了如何使用 just_audio 播放音频流:

import'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
class AudioPlayerPage extends StatefulWidget {
  @override
  _AudioPlayerPageState createState() => _AudioPlayerPageState();
}
class _AudioPlayerPageState extends State<AudioPlayerPage> {
  final _player = AudioPlayer();
  final _url = 'https://stream.radio.co/sb8ebfa4b0/listen';
  @override
  void initState() {
    super.initState();
    _player.setAudioSource(AudioSource.uri(Uri.parse(_url)));
  }
  @override
  void dispose() {
    _player.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            IconButton(
              icon: Icon(Icons.play_arrow),
              onPressed: () {
                _player.play();
              },
            ),
            SizedBox(height: 20),
            IconButton(
              icon: Icon(Icons.pause),
              onPressed: () {
                _player.pause();
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个 AudioPlayer 对象 _player,并在 initState 方法中调用了 setAudioSource 方法,将音频流的 URL 传递给它。在 build 方法中,我们创建了两个按钮,一个用于播放音频,另一个用于暂停音频。当用户按下播放按钮时,我们调用 _player.play() 方法来播放音频。当用户按下暂停按钮时,我们调用 _player.pause() 方法来暂停音频。


在 dispose 方法中,我们调用 _player.dispose() 方法来释放所有资源。


播放音频列表

要播放音频列表,需要创建一个包含多个音频源的 ConcatenatingAudioSource 对象,并将其传递给 AudioPlayer 对象的 setAudioSource 方法。以下是一个简单的示例代码,演示了如何使用 just_audio 播放音频列表:

import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
class AudioPlayerPage extends StatefulWidget {
  @override
  _AudioPlayerPageState createState() => _AudioPlayerPageState();
}
class _AudioPlayerPageState extends State<AudioPlayerPage> {
  final _player = AudioPlayer();
  final _playlist = ConcatenatingAudioSource(children: [
    AudioSource.uri(Uri.parse('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3')),
    AudioSource.uri(Uri.parse('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-2.mp3')),
    AudioSource.uri(Uri.parse('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-3.mp3')),
  ]);
  @override
  void initState() {
    super.initState();
    _player.setAudioSource(_playlist);
  }
  @override
  void dispose() {
    _player.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            IconButton(
              icon: Icon(Icons.play_arrow),
              onPressed: () {
                _player.play();
              },
            ),
            SizedBox(height: 20),
            IconButton(
              icon: Icon(Icons.pause),
              onPressed: () {
                _player.pause();
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个例子中,我们创建了一个 AudioPlayer 对象 _player,并创建了一个包含三个音频源的 ConcatenatingAudioSource 对象 _playlist。在 initState 方法中,我们调用了 _player.setAudioSource(_playlist) 方法,将音频列表传递给 _player 对象。在 build 方法中,我们创建了两个按钮,一个用于播放音频列表,另一个用于暂停音频列表。当用户按下播放按钮时,我们调用 _player.play() 方法来播放音频列表。当用户按下暂停按钮时,我们调用 _player.pause() 方法来暂停音频列表。


在 dispose 方法中,我们调用 _player.dispose() 方法来释放所有资源。


相关文章
|
缓存 Linux Android开发
Flutter音乐播放audioplayers
Flutter音乐播放audioplayers
|
1月前
|
XML Java Android开发
Android Studio App开发中使用录音机、MediaRecorder录制音频和MediaPlayer播放音频讲解及实战(附源码)
Android Studio App开发中使用录音机、MediaRecorder录制音频和MediaPlayer播放音频讲解及实战(附源码)
138 0
|
1月前
|
安全 Java Shell
Android11以上 Audio音频调试方法
Android11以上 Audio音频调试方法
159 0
|
6月前
|
API
uniapp播放音频
uniapp播放音频
102 0
|
Android开发 iOS开发
flutter系列之:在flutter中使用媒体播放器
现在的app功能越来越强大,除了基本的图文之外,还需要各种各样的其他的功能,比如视频,和直播。 直播可能会比较复杂,因为涉及到了拉流和推流,需要服务器端的支持,但是视频播放就比较简单了,那么如何在flutter中使用媒体播放器呢? 一起来看看吧。
flutter系列之:在flutter中使用媒体播放器
|
iOS开发
iOS Video Gravity 视频播放时的拉伸方式
iOS Video Gravity 视频播放时的拉伸方式
524 0
iOS Video Gravity 视频播放时的拉伸方式