mirror of
https://github.com/4sval/FModel.git
synced 2026-04-07 17:46:48 -05:00
99 lines
3.3 KiB
C#
99 lines
3.3 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Input;
|
|
using CSCore.CoreAudioAPI;
|
|
using FModel.Services;
|
|
using FModel.Settings;
|
|
using FModel.ViewModels;
|
|
using Microsoft.Win32;
|
|
|
|
namespace FModel.Views
|
|
{
|
|
public partial class AudioPlayer
|
|
{
|
|
private ApplicationViewModel _applicationView => ApplicationService.ApplicationView;
|
|
|
|
public AudioPlayer()
|
|
{
|
|
DataContext = _applicationView;
|
|
InitializeComponent();
|
|
}
|
|
|
|
public void Load(byte[] data, string filePath)
|
|
{
|
|
_applicationView.AudioPlayer.AddToPlaylist(data, filePath);
|
|
}
|
|
|
|
private void OnClosing(object sender, CancelEventArgs e)
|
|
{
|
|
_applicationView.AudioPlayer.Stop();
|
|
_applicationView.AudioPlayer.Dispose();
|
|
DiscordService.DiscordHandler.UpdateToSavedPresence();
|
|
}
|
|
|
|
private void OnDeviceSwap(object sender, SelectionChangedEventArgs e)
|
|
{
|
|
if (sender is not ComboBox {SelectedItem: MMDevice selectedDevice})
|
|
return;
|
|
|
|
UserSettings.Default.AudioDeviceId = selectedDevice.DeviceID;
|
|
_applicationView.AudioPlayer.Device();
|
|
}
|
|
|
|
private void OnVolumeChange(object sender, RoutedEventArgs e)
|
|
{
|
|
_applicationView.AudioPlayer.Volume();
|
|
}
|
|
|
|
private void OnPreviewKeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.OriginalSource is TextBox)
|
|
return;
|
|
|
|
if (UserSettings.Default.AddAudio.IsTriggered(e.Key))
|
|
{
|
|
var openFileDialog = new OpenFileDialog
|
|
{
|
|
Title = "Select an audio file",
|
|
InitialDirectory = Path.Combine(UserSettings.Default.OutputDirectory, "Exports"),
|
|
Filter = "OGG Files (*.ogg)|*.ogg|WAV Files (*.wav)|*.wav|WEM Files (*.wem)|*.wem|ADPCM Files (*.adpcm)|*.adpcm|All Files (*.*)|*.*",
|
|
Multiselect = true
|
|
};
|
|
|
|
if (!(bool) openFileDialog.ShowDialog()) return;
|
|
foreach (var file in openFileDialog.FileNames)
|
|
{
|
|
_applicationView.AudioPlayer.AddToPlaylist(file);
|
|
}
|
|
}
|
|
else if (UserSettings.Default.PlayPauseAudio.IsTriggered(e.Key))
|
|
_applicationView.AudioPlayer.PlayPauseOnStart();
|
|
else if (UserSettings.Default.PreviousAudio.IsTriggered(e.Key))
|
|
_applicationView.AudioPlayer.Previous();
|
|
else if (UserSettings.Default.NextAudio.IsTriggered(e.Key))
|
|
_applicationView.AudioPlayer.Next();
|
|
}
|
|
|
|
private void OnAudioFileMouseDoubleClick(object sender, MouseButtonEventArgs e)
|
|
{
|
|
_applicationView.AudioPlayer.PlayPauseOnForce();
|
|
}
|
|
|
|
private void OnFilterTextChanged(object sender, TextChangedEventArgs e)
|
|
{
|
|
if (sender is not TextBox textBox)
|
|
return;
|
|
|
|
var filters = textBox.Text.Trim().Split(' ');
|
|
_applicationView.AudioPlayer.AudioFilesView.Filter = o =>
|
|
{
|
|
return o is AudioFile audio && filters.All(x => audio.FileName.Contains(x, StringComparison.OrdinalIgnoreCase));
|
|
};
|
|
}
|
|
}
|
|
}
|