Just_Audio Flutter kütüphanesi, Flutter uygulamalarında ses dosyalarını oynatmak için kullanılan çok popüler ve esnek bir pakettir. Bu kütüphane sayesinde lokal dosyalar, ağ üzerinden yayınlanan dosyalar ve daha fazlasını kolayca oynatabilirsiniz.
just_audio
kütüphanesini kullanabilmek için öncelikle pubspec.yaml
dosyanıza eklemeniz gerekmektedir.
just_audio
kütüphanesini eklemek için Link
Başlıklar
Just_audio İzinler
Android
İnternetten müzik çalmak için internet izni almamız lazım
<uses-permission android:name="android.permission.INTERNET"/>
İOS
iOS’ta just_audio
kullanırken, genellikle ağ üzerinden ses akışı yapmak için ek izinlere ihtiyaç duymazsınız. Ancak, uygulamanız arka planda ses oynatmayı destekliyorsa, Info.plist
dosyanızda ilgili arka plan modlarını etkinleştirmeniz gerekir:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
<string>fetch</string>
</array>
AudioPlayer Oluşturma
just_audio
kütüphanesini kullanmaya başlamak için öncelikle bir AudioPlayer
nesnesi oluşturmalısınız. Bu nesne, ses dosyalarını yönetmek ve kontrol etmek için kullanılır.
final player = AudioPlayer();
Ses Dosyası Oynatma
AudioPlayer
nesnesi oluşturulduktan sonra, oynatmak istediğiniz ses dosyasını yüklemeniz gerekir. Bu, bir URL üzerinden bir ağ kaynağına, bir lokal dosyaya veya bir uygulama içi varlığa işaret edebilir.
Ağ Üzerinden Ses Dosyası Oynatma:
try {
await player.setUrl('https://www.example.com/sound.mp3');
player.play();
} catch (e) {
// Hata işleme
print("Ses dosyası yüklenirken bir hata oluştu: $e");
}
Lokal Dosyadan Ses Dosyası Oynatma:
try {
await player.setFilePath('/path/to/sound.mp3');
player.play();
} catch (e) {
// Hata işleme
print("Ses dosyası yüklenirken bir hata oluştu: $e");
}
Uygulama İçi Varlıktan Ses Dosyası Oynatma:
try {
await player.setAsset('assets/sound.mp3');
player.play();
} catch (e) {
// Hata işleme
print("Ses dosyası yüklenirken bir hata oluştu: $e");
}
Oynatma Kontrolleri
just_audio
ile ses dosyasını oynatmak, duraklatmak, durdurmak ve pozisyonunu ayarlamak gibi işlemleri kolayca yapabilirsiniz.
player.play(); // Oynatma
player.pause(); // Duraklatma
player.stop(); // Durdurma
// Belirli bir pozisyona atlamak (örneğin, 10. saniye)
player.seek(Duration(seconds: 10));
player.setSpeed: AudioPlayer
nesnesindeki bu metod, sesin oynatma hızını ayarlamanıza olanak tanır.
player.setVolume: AudioPlayer nesnesinin ses seviyesini ayarlamak için kullanılır. Bu metod, ses dosyasının oynatma sırasındaki ses düzeyini değiştirmenize olanak tanır.
player.setClip
ifadesi, just_audio
kütüphanesini kullanarak Flutter’da bir ses dosyasının belirli bir bölümünün (klip) oynatılmasını sağlamak için kullanılır. Bu metod, AudioPlayer
nesnesi üzerinde çağrıldığında, ses dosyasının sadece belirtilen başlangıç ve bitiş sürelerinin arasındaki segmentinin oynatılmasını sağlar. Yani, bu örnekte oynatıcı ses dosyasının 2. saniyesinden başlayıp 4. saniyesinde sonlanacak şekilde bir klip oynatacaktır.
Bu fonksiyon, özellikle kullanıcıların ses dosyasının sadece belirli bir parçasını dinlemek istedikleri durumlar için yararlıdır. Örneğin, bir şarkının en sevilen kısmını, bir podcast’in belirli bir bölümünü ya da bir dil öğrenme materyalinin spesifik bir diyalogunu tekrar tekrar dinlemek isteyebilirsiniz.
ConcatenatingAudioSource Flutter’ın popüler ses kütüphanesi olan just_audio içinde tanımlı bir sınıftır. Bu sınıf, birden fazla ses kaynağını (örneğin, şarkılar, podcast bölümleri vb.) tek bir sıralı oynatma listesi olarak birleştirmek ve ardışık bir şekilde oynatmak için kullanılır. Kullanıcılar bu sayede, tek bir AudioPlayer nesnesi üzerinden çoklu ses dosyalarını yönetebilir ve oynatabilir.
ConcatenatingAudioSource ile, farklı kaynaklardan (URL, dosya sistemi, uygulama paketi içi assetler vb.) gelen ses dosyalarını tek bir liste haline getirebilir ve bu listeyi oynatıcıya yükleyebilirsiniz. Ayrıca, bu sınıf dinamik bir şekilde güncellenebilir; yani oynatma listesine yeni ses kaynakları eklenebilir, mevcut kaynaklar çıkarılabilir veya sıralama değiştirilebilirken ses oynatma devam eder.
import 'package:just_audio/just_audio.dart';
void main() async {
final player = AudioPlayer();
final playlist = ConcatenatingAudioSource(
children: [
AudioSource.uri(Uri.parse("https://www.example.com/audio1.mp3")),
AudioSource.uri(Uri.parse("https://www.example.com/audio2.mp3")),
AudioSource.uri(Uri.parse("file:///path/to/audio3.mp3")),
AudioSource.uri(Uri.parse("asset:///path/to/audio4.mp3")),
],
);
await player.setAudioSource(playlist);
player.play();
}
playerStateStream
kullanarak oynatıcı durumundaki değişikliklere abone olabilir ve bu değişikliklere göre UI’ı güncelleyebilirsiniz
player.playerStateStream.listen((playerState) {
// Burada, örneğin UI'ı güncelleyebilirsiniz
// playerState.playing, oynatıcının oynatıp oynatmadığını belirtir
// playerState.processingState, oynatıcının durumunu (yükleniyor, hazır, tamamlandı vb.) belirtir
print("Oynatılıyor: ${playerState.playing}, Durum: ${playerState.processingState}");
});
}
Just_Audio
İle Slider Kullanarak Oynatma Pozisyonunu Kontrol Etmek
just_audio
ile birlikte bir slider widget’ı kullanarak ses dosyasının oynatma pozisyonunu kontrol etmek ve göstermek, kullanıcıya ses dosyası üzerinde daha fazla kontrol sağlar. Bu, kullanıcıların oynatılan ses dosyasını ileri veya geri sarabilmelerine olanak tanır.
import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late AudioPlayer player;
double currentPosition = 0.0;
Duration duration = Duration.zero;
@override
void initState() {
super.initState();
player = AudioPlayer();
setupAudio();
}
void setupAudio() async {
// Ses dosyasını yükle
await player.setUrl('https://www.example.com/audio.mp3');
// Ses dosyasının süresini al
duration = await player.durationFuture;
// Oynatma durumunu izle
player.positionStream.listen((position) {
setState(() {
currentPosition = position.inMilliseconds.toDouble();
});
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Audio Player with Slider'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
if (duration.inMilliseconds.toDouble() > 0)
Slider(
value: currentPosition,
min: 0.0,
max: duration.inMilliseconds.toDouble(),
onChanged: (value) {
setState(() {
currentPosition = value;
});
// Oynatıcıyı seçilen pozisyona ayarla
player.seek(Duration(milliseconds: value.toInt()));
},
),
ElevatedButton(
child: Text('Oynat'),
onPressed: () {
player.play();
},
),
ElevatedButton(
child: Text('Duraklat'),
onPressed: () {
player.pause();
},
),
],
),
),
);
}
@override
void dispose() {
player.dispose();
super.dispose();
}
}
Bu Yazıya Tepkin Ne Oldu ?
YORUMLAR