just_audioとは
just_audio は、Flutterアプリケーションにおいて音声を再生するためのパッケージです。このパッケージは、URL、ローカルファイル、アセット、ストリームなど様々な音源を扱うことができます。また、ループ再生、クリップ再生、連結再生などの機能も提供しています。
just_audio | Flutter package
A feature-rich audio player for Flutter. Loop, clip and concatenate any sound from any source (asset/file/URL/stream) in...
使い方
インストール
dependencies:
just_audio: ^0.9.38
基本的な使い方
- プレイヤーの作成
final player = AudioPlayer();
- URLから音声をロード
final duration = await player.setUrl('https://foo.com/bar.mp3');
- 再生
player.play(); // 完了を待たずに再生 await player.play(); // 完了を待って再生
- 一時停止
await player.pause();
- シーク
await player.seek(Duration(seconds: 10));
- 再生速度の設定
await player.setSpeed(2.0); // 2倍速
- 音量の設定
await player.setVolume(0.5); // 半分の音量
- 停止
dart await player.stop();
複数のプレイヤーの操作
// 2つのプレイヤーをセットアップ
final player1 = AudioPlayer();
await player1.setUrl('https://foo.com/bar1.mp3');
final player2 = AudioPlayer();
await player2.setUrl('https://foo.com/bar2.mp3');
// 同時に再生
player1.play();
player2.play();
// 連続して再生
await player1.play();
await player2.play();
// player2が終了するまでplayer1をループ
await player1.setLoopMode(LoopMode.one);
player1.play();
await player2.play();
await player1.pause();
// リソースを解放
await player1.stop();
await player2.stop();
クリップの操作
// クリップ再生
await player.setClip(start: Duration(seconds: 2), end: Duration(seconds: 4));
await player.play();
await player.pause();
// クリップ範囲をクリア
await player.setClip();
ギャップレスプレイリストの操作
// プレイリストの定義
final playlist = ConcatenatingAudioSource(
useLazyPreparation: true,
shuffleOrder: DefaultShuffleOrder(),
children: [
AudioSource.uri(Uri.parse('https://example.com/track1.mp3')),
AudioSource.uri(Uri.parse('https://example.com/track2.mp3')),
AudioSource.uri(Uri.parse('https://example.com/track3.mp3')),
],
);
// プレイリストのロードと再生
await player.setAudioSource(playlist, initialIndex: 0, initialPosition: Duration.zero);
await player.seekToNext();
await player.seekToPrevious();
await player.seek(Duration.zero, index: 2);
await player.setLoopMode(LoopMode.all);
await player.setShuffleModeEnabled(true);
// プレイリストの更新
await playlist.add(AudioSource.uri(Uri.parse('https://example.com/track4.mp3')));
await playlist.insert(3, AudioSource.uri(Uri.parse('https://example.com/track5.mp3')));
await playlist.removeAt(3);
リクエストヘッダーの設定
// HTTPリクエストヘッダーを設定
final player = AudioPlayer(
userAgent: 'myradioapp/1.0 (Linux;Android 11) https://myradioapp.com',
useProxyForRequestHeaders: true,
);
final duration = await player.setUrl(
'https://foo.com/bar.mp3',
headers: {'header1': 'value1', 'header2': 'value2'}
);
エラー処理
// ロード時のエラーキャッチ
try {
await player.setUrl('https://s3.amazonaws.com/404-file.mp3');
} on PlayerException catch (e) {
print("Error code: ${e.code}");
print("Error message: ${e.message}");
} on PlayerInterruptedException catch (e) {
print("Connection aborted: ${e.message}");
} catch (e) {
print('An error occurred: $e');
}
// 再生中のエラーキャッチ
player.playbackEventStream.listen((event) {}, onError: (Object e, StackTrace st) {
if (e is PlatformException) {
print('Error code: ${e.code}');
print('Error message: ${e.message}');
print('AudioSource index: ${e.details?["index"]}');
} else {
print('An error occurred: $e');
}
});
キャッシュの操作
// アセットキャッシュのクリア
await AudioPlayer.clearAssetCache();
// 再生中のオーディオをダウンロードしてキャッシュ
final audioSource = LockCachingAudioSource('https://foo.com/bar.mp3');
await player.setAudioSource(audioSource);
// キャッシュされたファイルを削除
await audioSource.clearCache();