Изменить теги во время проигрывания аудиофайла - C#
Формулировка задачи:
Когда жму на кнопку "Save metadata", то появляется окно с информацией, что файл занят другим процессом.
И ещё вопрос по теме. Вот эта строчка говорит, что в аудиофайле(.mp3) только один канал, хотя все остальные программы говорят, что 2. А если выбрать аудиофайл в формате .flac, то говорит что их 2. Это ошибка в библиотеке или я что-то не так делаю?
lbChannels.Text += tags.Properties.AudioChannels;
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace MiniVLC { public partial class MediaInformation : Form { TagLib.File tags; public MediaInformation(TagLib.File tags) { InitializeComponent(); this.tags = tags; //Для btnSaveMetadata_Click //Извлечь информацию о медиафайле(Вкладка General) tbTitle.Text = tags.Tag.Title; tbArtist.Text = tags.Tag.Performers[0]; tbAlbum.Text = tags.Tag.Album; tbGenre.Text = tags.Tag.Genres[0]; tbCopyright.Text = tags.Tag.Copyright; tbComments.Text = tags.Tag.Comment; lbPath.Text = tags.Name; tbDate.Text = tags.Tag.Year.ToString(); tbTrackNumber.Text = tags.Tag.Track.ToString(); tbDuration.Text = tags.Properties.Duration.ToString(); //Извлечь информацию о медиафайле(Вкладка Codec) lbType.Text += tags.Properties.MediaTypes; lbCodec.Text += tags.Properties.Description; lbChannels.Text += tags.Properties.AudioChannels; lbSampleRate.Text += tags.Properties.AudioSampleRate + " Hz"; lbBitrate.Text += tags.Properties.AudioBitrate + " kbps"; //Сделать кнопку "Save metadata" видимой при изменении любого из тегов tbTitle.TextChanged += (object sender, EventArgs e) => btnSaveMetadata.Visible = true; tbArtist.TextChanged += (object sender, EventArgs e) => btnSaveMetadata.Visible = true; tbAlbum.TextChanged += (object sender, EventArgs e) => btnSaveMetadata.Visible = true; tbGenre.TextChanged += (object sender, EventArgs e) => btnSaveMetadata.Visible = true; tbCopyright.TextChanged += (object sender, EventArgs e) => btnSaveMetadata.Visible = true; tbComments.TextChanged += (object sender, EventArgs e) => btnSaveMetadata.Visible = true; tbDate.TextChanged += (object sender, EventArgs e) => btnSaveMetadata.Visible = true; tbTrackNumber.TextChanged += (object sender, EventArgs e) => btnSaveMetadata.Visible = true; } //Закрыть окно private void btnClose_Click(object sender, EventArgs e) { this.Close(); } //Сохранить изменённые теги(не работает) private void btnSaveMetadata_Click(object sender, EventArgs e) { tags.Mode = TagLib.File.AccessMode.Write; tags.Tag.Title = tbTitle.Text; tags.Tag.Performers[0] = tbArtist.Text; tags.Tag.Album = tbAlbum.Text; tags.Tag.Genres[0] = tbGenre.Text; tags.Tag.Copyright = tbCopyright.Text; tags.Tag.Comment = tbComments.Text; tags.Tag.Year = uint.Parse(tbDate.Text); tags.Tag.Track = uint.Parse(tbTrackNumber.Text); tags.Save(); } } }
Решение задачи: «Изменить теги во время проигрывания аудиофайла»
textual
Листинг программы
//Начать проигрывание песни private void btnPlay_Click(object sender, EventArgs e) { if(string.IsNullOrEmpty(wmp.URL)) { return; } if(wmp.playState != WMPPlayState.wmppsPlaying) { if(wmp.currentMedia.sourceURL != playlist[lstPlaylist.SelectedItem.ToString()]) { btnStop_Click(this, null); wmp.URL = playlist[lstPlaylist.SelectedItem.ToString()]; } wmp.controls.play(); timer.Start(); //trbTrackBar.Maximum = (int)wmp.currentMedia.duration; 00:00 ??? lastSound = getKeyByValue(wmp.currentMedia.sourceURL); tags = File.Create(playlist[lastSound]); //Получить информацию о проигрываемом файле trbTrackBar.Maximum = (int)tags.Properties.Duration.TotalSeconds; //Установить длину trackbar'a(работает) //Отобразить название песни в заголовке окна this.Text = string.Format("{0} - {1} - Mini VLC", tags.Tag.Performers[0], tags.Tag.Title); btnPlay.ImageKey = "pause.png"; } else { wmp.controls.pause(); timer.Stop(); btnPlay.ImageKey = "play.png"; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д