Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/100: Рейтинг темы: голосов - 100, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 22.04.2011
Сообщений: 31

Аудио-проигрыватель

22.04.2011, 17:47. Показов 18778. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я сейчас пишу курсовую на С#, пишу свой аудио-проигрыватель. Использую компонент MediaPlayer. От этого компонента я использую только его возможности, визуально его не использую. Все самые основные функции он уже выполняет (Воспроизвести, Пауза, Стоп, Продолжить воспроизведение после паузы, Следующая песня, Предыдущая песня, Добавить песни в плэйлист, Очистить плэйлист, Перейти в начало плэйлиста, Перейти в конец плэйлиста, Ускорить воспроизведение, а также таймер с двумя метками(первая показывает общее время играющей песни, вторая текущее время играющей песни)

Но у меня также возникло несколько проблем. Не знаю как правильно реализовать метод удаления только выделенной песни (метод визуально со списка песню удаляет, но в самой программе остается, т.е. к примеру я добавил треки №1, 2 и 3, затем трек №1 удаляю, тем самым со списка он удаляется, но если я нажимаю воспроизвести трек №2, то воспроизводится удаленный трек №1). Также, не знаю как реалиализовать, чтоб во время проигрывания песни по компоненте TrackBar перемещащлся ползунок и чтоб его можн было перемещать и попадать в нужный участок песни. Также на знаю как сделать чтоб по окончанию песни автоматически включалась следующая. И САМОЕ ГЛАВНОЕ никак нигде не могу найти каким образом сохранять плэйлист, чтобы при следующем запуске программы его можно было бы открыть.

Ниже код программы. Также прикладываю сам проект.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
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 WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        string[] Musicas = new string[1000];
        int count;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void trackBar2_Scroll(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.settings.volume = trackBar2.Value;
        }
 
        private void Next_Click(object sender, EventArgs e)
        {
            if(listBox1.Items.Count!=0)
                try
                {
                    if (listBox1.SelectedIndex != listBox1.Items.Count - 1)
                    {
                        listBox1.SetSelected(listBox1.SelectedIndex + 1, true);
                        axWindowsMediaPlayer1.URL = Musicas[listBox1.SelectedIndex];
                    }
                }
                catch
                    {
                        // Если ни одна песня не запущена, игнорируем нажатие кнопки
                    }
        }
 
        private void Stop_Click(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.Ctlcontrols.stop();
        }
 
        private void Pause_Click(object sender, EventArgs e)
        {
            try
            {
                axWindowsMediaPlayer1.Ctlcontrols.pause();
                axWindowsMediaPlayer1.Ctlcontrols.currentPosition = Convert.ToDouble(LbFirst.Text.Replace(":", ""));
            }
 
            catch
            {
                // Если ни одна песня не запущена, игнорируем нажатие кнопки
            }
        }
 
        private void Play_Click(object sender, EventArgs e)
        {
            try
            {   
                axWindowsMediaPlayer1.URL = Musicas[listBox1.SelectedIndex];
                timer1.Start();
            }
 
            catch
            {
                // Выводим сообщение о ошибке
                MessageBox.Show("       !!!Не выбрана песня!!!");
            }
 
            
        }
 
        private void Resume_Click(object sender, EventArgs e)
        {
            if(listBox1.Items.Count != 0)
            try
            {
                axWindowsMediaPlayer1.Ctlcontrols.play();
                axWindowsMediaPlayer1.Ctlcontrols.currentPosition = Convert.ToDouble(LbFirst.Text.Replace(":", ""));
            }
 
            catch
            {
                // Если ни одна песня не запущена, игнорируем нажатие кнопки
            }
        }
 
        private void Previous_Click(object sender, EventArgs e)
        {
            if(listBox1.Items.Count != 0)
 
                try
                {
                    if (listBox1.SelectedIndex != 0)
                    {
                        listBox1.SetSelected(listBox1.SelectedIndex - 1, true);
                        axWindowsMediaPlayer1.URL = Musicas[listBox1.SelectedIndex];
                    }
                }
                catch
                    {
                        // Если ни одна песня не запущена, игнорируем нажатие кнопки
                    }
        }
 
        private void Begin_Click(object sender, EventArgs e)
        {
            try
            {
                listBox1.SetSelected(0, true);
                axWindowsMediaPlayer1.URL = Musicas[listBox1.SelectedIndex];
            }
 
            catch
            {
                // Если плэйлист пуст, игнорируем нажатие кнопки
            }
        }
 
        private void End_Click(object sender, EventArgs e)
        {
            try
            {
                listBox1.SetSelected(listBox1.Items.Count - 1, true);
                axWindowsMediaPlayer1.URL = Musicas[listBox1.SelectedIndex];
            }
 
            catch
            {
                // Если плэйлист пуст, игнорируем нажатие кнопки
            }
        }
        
        public void Add_Click(object sender, EventArgs e)
        {
            int lll;
            OpenFileDialog open = new OpenFileDialog();
            open.Multiselect = true;
            open.Filter = "MP3 files|*.mp3|WMV files|*.wmv";
            open.FilterIndex = 1;
 
            if (open.ShowDialog() == DialogResult.OK)
            {
                for (int i = 0; i < open.FileNames.LongLength; i++)
                {
                    if (listBox1.Items.Contains(open.FileNames.GetValue(i)) == false)
                    {
                        listBox1.Items.Add(open.SafeFileNames.GetValue(i));
                        Musicas[count] = open.FileNames.GetValue(i).ToString();
                        count += 1;
                    }
 
                }
                if (listBox1.SelectedIndex < 0) { listBox1.SetSelected(0, true); }
            }
        }
       
        private void Fast_Click(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.Ctlcontrols.fastForward();
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            
            if( Cb_Ale.Checked==true && LbFirst.Text !="" && Convert.ToInt32(LbFirst.Text.Replace(":", "")) == Convert.ToInt32(LbSecond.Text.Replace(":", ""))-2)
            {
                Random random = new Random();
 
                listBox1.SetSelected(random.Next(listBox1.Items.Count), true);
                axWindowsMediaPlayer1.URL = Musicas[listBox1.SelectedIndex];
            }
           
            LbSecond.Text = axWindowsMediaPlayer1.currentMedia.durationString;
            LbFirst.Text = axWindowsMediaPlayer1.Ctlcontrols.currentPositionString;
            
        }
 
        private void DeleteOne_Click(object sender, EventArgs e)
        {
            while (listBox1.SelectedItems.Count > 0)
            {
                listBox1.Items.Remove(listBox1.SelectedItems[0]);
            }
        }
 
        private void ClearAll_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            Stop_Click(sender, e);
            count = 0;
            LbFirst.ResetText();
            LbSecond.ResetText();
            timer1.Stop();
        }
 
        private void SavePlayList_Click(object sender, EventArgs e)
        {
 
        }
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
           DialogResult dr = MessageBox.Show("Вы уверены что хотите выйти?", "Music Player Stasya", MessageBoxButtons.YesNo);
           if (dr == DialogResult.Yes)
               e.Cancel = false;
           else
               e.Cancel = true;
        }
    }
}
Буду очень благодарен за помощь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.04.2011, 17:47
Ответы с готовыми решениями:

Проигрыватель видео
Всем привет. Подскажите пожалуйста с чего нужно начать , что почитать и что нужно для создания своего проигрывателя ?

Проигрыватель звуков
Столкнулся со следующей проблемой: необходимо воспроизводить звук в формате mp3, а возможно только воспроизведение wav-формата ...Как...

Проигрыватель интернет-радио (клиент?)
Здравствуйте, помогите, пожалуйста, чем можете. В учебных целях необходимо написать проигрыватель интернет-радио, к сожалению, пока даже не...

7
 Аватар для DeKaN
36 / 36 / 8
Регистрация: 10.02.2010
Сообщений: 184
22.04.2011, 18:27
1....ты часто используешь try{}catch{}....лучше сам делай проверки....вот например
C#
1
2
3
4
5
6
7
8
9
 try
{
   listBox1.SetSelected(listBox1.Items.Count - 1, true);
   axWindowsMediaPlayer1.URL = Musicas[listBox1.SelectedIndex];
}
catch
{
    // Если плэйлист пуст, игнорируем нажатие кнопки
}
Я думаю можно и самому определить, что плэйлист пуст...так корректнее будет...тем более если это курсовая)

По поводу удаления....ты используешь массив string[] Musicas = new string[1000];...это неправильно...
Используй списки: List<string> Musicas=new List<string>();
Добавляй песню в список: Musicas.Add(FileName);
Удаляй песню из списка: Musicas.RemoveAt(id);

Плэйлист можно сохранять в параметрах проекта..зайди в спойство проекта, параметры....там создай строку, и туда записывай песни.
0
2 / 2 / 0
Регистрация: 22.04.2011
Сообщений: 31
22.04.2011, 18:45  [ТС]
Приложил архив с проектом.
Не совсем поня чтозначит "сам делай проверки"??? А я разве не это делаю?

"По поводу удаления....ты используешь массив string[] Musicas = new string[1000];...это неправильно...
Используй списки: List<string> Musicas=new List<string>();
Добавляй песню в список: Musicas.Add(FileName);
Удаляй песню из списка: Musicas.RemoveAt(id);"

Если изменить метод добавления - придется половину программы переписывать(((
И что такое id в строке "Musicas.RemoveAt(id);"??? Что вместо id надо писать?

Объясните пожалуйста по подробнее, а лучше если можете напишите как сохранять и загружать плэйлист. А то C# недавно изучаю и еще плохо его знаю.
Вложения
Тип файла: rar WindowsFormsApplication4.rar (872.2 Кб, 612 просмотров)
1
 Аватар для DeKaN
36 / 36 / 8
Регистрация: 10.02.2010
Сообщений: 184
22.04.2011, 18:52
для чего переписывать то программу? со списком будешь работать так же как и с массивом...т.е. получать название файлка Musicas[id]...id-это номер элемента в списке..., т.е. 0,1,2...и т.д. Который тебе надо удалить, тот и указывай....
try{}catch{} это не то....это обработчик исключений....ты же сам можешь определить, пуст ли плэйлист или нет, например так:
Code
1
2
3
4
if(Musicas.Count>0)
{
   ...Твой код...
}
Всё, никаких try{}catch{}

Добавлено через 3 минуты
Про параметры почитай тут: http://msdn.microsoft.com/ru-r... s.90).aspx
Там правда про бэйсик, но суть не меняется...там всё понятно)
Если с английским нормально, то тут про C#: http://msdn.microsoft.com/en-u... S.80).aspx
0
2 / 2 / 0
Регистрация: 22.04.2011
Сообщений: 31
22.04.2011, 19:50  [ТС]
Что то я не совсем понял, что я должен был тут узнать...???

"Про параметры почитай тут: http://msdn.microsoft.com/ru-r... s.90).aspx
Там правда про бэйсик, но суть не меняется...там всё понятно)
Если с английским нормально, то тут про C#: http://msdn.microsoft.com/en-u... S.80).aspx "

Про плэйлисты там ничего нету. Мне надо чтоб я плэйлисты мог сохранять в файлы. А потом мог бы загружать их.

Добавлено через 13 минут
И объясните пожалуйста по подробнее как мне по другому реализовать метод добавления файлов в плэйлист.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
string[] Musicas = new string[1000];
int count;
 
public void Add_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();
            open.Multiselect = true;
            open.Filter = "MP3 files|*.mp3|WMV files|*.wmv";
            open.FilterIndex = 1;
 
            if (open.ShowDialog() == DialogResult.OK)
            {
                for (int i = 0; i < open.FileNames.LongLength; i++)
                {
                    if (listBox1.Items.Contains(open.FileNames.GetValue(i)) == false)
                    {
                        listBox1.Items.Add(open.SafeFileNames.GetValue(i));
                        Musicas[count] = open.FileNames.GetValue(i).ToString();
                        count += 1;
                    }
 
                }
                if (listBox1.SelectedIndex < 0) { listBox1.SetSelected(0, true); }
            }
        }
0
Кодило
 Аватар для r0fL
251 / 179 / 23
Регистрация: 25.11.2009
Сообщений: 685
22.04.2011, 20:04
Vladikking, а никто там конкретно про плейлисты писать и не будет. Вам же объяснили, просто используйте вместо массивов - списки, поменять недолго, и при удалении из плейлиста удаляйте не только из листбокса, но и из самого списка. Сохранять можно так как написали выше либо создать структуру\класс и хранить плейлисты в нем, что будет правильнее, сериализовать объект класса в файл и хранить в этом файле, во втором варианте возможно реализовать запуск вашей программы при открытии файла плейлиста.
0
2 / 2 / 0
Регистрация: 22.04.2011
Сообщений: 31
22.04.2011, 21:59  [ТС]
Что то я не совсем понял как плэйлисты сохранять в файлы. А потом загружать их.
????

Добавлено через 1 час 23 минуты
DeKaN, Переделал методы добавления и удаления как ты и сказал. Но метод удаления все равно не работает((( Помогите пожалуйста.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
List<string> Musicas = new List<string>();
int count;
 
public void Add_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();
            open.Multiselect = true;
            open.Filter = "MP3 files|*.mp3|WMV files|*.wmv";
            open.FilterIndex = 1;
 
            if (open.ShowDialog() == DialogResult.OK)
            {
                for (int i = 0; i < open.FileNames.LongLength; i++)
                {
                    if (listBox1.Items.Contains(open.FileNames.GetValue(i)) == false)
                    {
                        listBox1.Items.Add(open.SafeFileNames.GetValue(i));
                        count += 1;
                        Musicas.Add(open.FileName);
 
                    }
 
                }
                if (listBox1.SelectedIndex < 0) { listBox1.SetSelected(0, true); }
            }
        }
       
private void DeleteOne_Click(object sender, EventArgs e)
        {
           while (listBox1.SelectedItems.Count > 0)
           {
                count = listBox1.SelectedIndex;
                listBox1.Items.Remove(listBox1.SelectedItems[0]);
                Musicas.RemoveAt(count);
           }
        }
Какой именно нужно указывать индекс в "Musicas.RemoveAt(индекс);" чтобы удалялась именно та песня которая выделена в плэйлисте?
1
 Аватар для DeKaN
36 / 36 / 8
Регистрация: 10.02.2010
Сообщений: 184
23.04.2011, 05:23
Например так:
C#
1
2
3
4
5
6
7
8
9
for(int i=0;i<Musicas.Count;i++)
{
   if(Musicas[i]==listBox1.SelectedIndex.Text)
   {
       Musicas.RemoveAt(i);
       break;
   }
}
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.04.2011, 05:23
Помогаю со студенческими работами здесь

Как написать медиа-проигрыватель с плейлистом?
Помогите пожалуйста как можно написать Медиа-плеер , желательно что бы можно было воспроизвести как видео так и аудио , библиотеки directX...

Проигрыватель музыки (аудиоплеер) - вывод обложки
На данный момент пишу курсовую работу на С#. Использую WindowsMediaPlayer. Некоторые функции уже работают(Воспроизвести, Пауза, Стоп,...

Как проиграть аудио формата wav или mp3?
Здравствуйте! Я только начинаю переходить на С-шарп, с Делфи (в универе принуждают). Вот и столкнулся со следующей проблемой,...

Работа с аудио
Работа с аудио на с# mp3 и wav ,речь идет не о банальном воспроизведении музы, ее остановке и прочей ерунде. а о том как можно работать...

Воспроизведение аудио
Всем доброго времени суток. Написал небольшую программу для воспроизведения аудио файлов.. Воспроизводит большинство файлов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru