Изменить теги во время проигрывания аудиофайла - C#

Узнай цену своей работы

Формулировка задачи:

Когда жму на кнопку "Save metadata", то появляется окно с информацией, что файл занят другим процессом. И ещё вопрос по теме. Вот эта
lbChannels.Text += tags.Properties.AudioChannels;
строчка говорит, что в аудиофайле(.mp3) только один канал, хотя все остальные программы говорят, что 2. А если выбрать аудиофайл в формате .flac, то говорит что их 2. Это ошибка в библиотеке или я что-то не так делаю?
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";
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5
Похожие ответы