Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
3 / 2 / 1
Регистрация: 15.10.2019
Сообщений: 95

Программа CONVERTER .mp3 to .WAVE

15.12.2019, 17:50. Показов 3558. Ответов 12

Студворк — интернет-сервис помощи студентам
Программа КОНВЕРТЕР должна обладать следующим функционалом:
1. Уметь по нажатию кнопки OpenFile открывать из любого места на жестком диске, например, только .mp3 файлы и сохранять их в оперативной памяти.
2. По нажатию кнопки CreateWAVE происходит конвертация файла из формата .mp3 в .wav с указанием пути сохранения
3. Начнем с создания формы WPF. На WpfApp1.MainWindow как минимум разместим две кнопки: OpenBtn и CreateWaveBtn
4. Функционал конвертации будет реализован с помощью библиотеки NAudio, а именно:
C#
1
2
3
4
using (var reader = new Mp3FileReader(infile))
             {
                WaveFileWriter.CreateWaveFile(outfile, reader);
             }
5. Теперь непосредственно сами вопросы
- После запуска нашей программы появляется форма с двумя, расположенными на ней кнопками: OpenFile и CreateWAVE. Реализация открытия и сохранения файла реализована встроенными функциями:

C#
1
2
3
4
OpenFileDialog audioFilesMp3Mp3AllFiles = new OpenFileDialog();
            SaveFileDialog audioSaveFileDialog = new SaveFileDialog();
             audioSaveFileDialog.Filter = "audio files (*.mp3)";
            audioSaveFileDialog.InitialDirectory = "C://";
Куда прописывать и какие события, для того, чтобы программа работала нормально.
Создать скрипт с последовательным исполнением команд по открытию файла из прописанного пути и конвертированием его в WAVE опять же в указанный мною путь у меня получилось. Не понимаю как это должно работать при наличии графического интерфейса. Помогите, пожалуйста, буду очень признателен.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.12.2019, 17:50
Ответы с готовыми решениями:

JLab Audio Wave WaterProof Mp3 Player Headphones. Проблема с кабелем
Буду краток. Купил наушники со встроенным плейером. К наушникам был кабель micro USB(Вроде micro),чрез который и осуществляется процесс...

Волновой образ не изменился после кодирования WAVE-файла в MP3 и обратно
Оцифровать фрагмент звука, запомнить волновой образ WAVE-файла, сжать WAVE-файл в MP3, распаковать MP3 в WAVE файл. Взял wave файл...

Программа для воспроизведения Mp3
Добрый день всем, задали в универе сделать программу для воспроизведения MP3 файлов в delphi , не разу не делал( Подскажет кто с чего...

12
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
15.12.2019, 18:54
Создать обработчики кликов по кнопкам. (Дабл клик по кнопке в дизайнере формы).
Дальше в обработчиках пишем нужную логику, например

C#
1
2
3
4
5
6
7
private void OpenBtn_Click(object senver, EventArgs args) 
{
   if (audioFilesMp3Mp3AllFiles.ShowDialog() == DialogResult.OK) 
   {
       infile = audioFilesMp3Mp3AllFiles.FileName;
   }
}
Я бы сделал три кнопки - диалог выбора файла для конвертации, диалог выбора куда сохранить результат, и собственно кнопка запуска процесса конвертации.
0
3 / 2 / 1
Регистрация: 15.10.2019
Сообщений: 95
16.12.2019, 06:19  [ТС]
Вот мой скрипт, который работает просто в форме, но так меня не устраивает.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 public MainWindow()
        {
            InitializeComponent();
            OpenBtn.Click += OpenBtn_Click;
            CreateWaveBtn.Click += CreateWaveBtn_Click;
            OpenFileDialog audioFilesMp3Mp3AllFiles = new OpenFileDialog();
            SaveFileDialog audioSaveFileDialog = new SaveFileDialog();
             audioSaveFileDialog.Filter = "audio files (*.mp3)";
            audioSaveFileDialog.InitialDirectory = "C://";
 
             var infile = @"C:\Users\server\Documents\in.mp3";
             var outfile = @"C:\Users\server\Documents\converted.wav";
 
             using (var reader = new Mp3FileReader(infile))
             {
                WaveFileWriter.CreateWaveFile(outfile, reader);
             }
           
        }
Мне нужно понять, что конкретно прописывать для формы и отдельно для кнопок. И еще вопрос: Почему считается плохим тоном прописывать функционал кнопок в обработчиках самих кнопок, как можно прописать функционал кнопок по другому?

Добавлено через 3 минуты
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
namespace WpfApp1
{
 
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
 
        public MainWindow()
        {
            InitializeComponent();
            //OpenBtn.Click += OpenBtn_Click;
            //CreateWaveBtn.Click += CreateWaveBtn_Click;
 
            //OpenFileDialog audioFilesMp3Mp3AllFiles = new OpenFileDialog();
            //SaveFileDialog audioSaveFileDialog = new SaveFileDialog();
            //audioSaveFileDialog.Filter = "audio files (*.mp3)";
            //audioSaveFileDialog.InitialDirectory = "C://";
 
            // var infile = @"C:\Users\in.mp3";
            // var outfile = @"C:\Users\converted.wav";
 
            // using (var reader = new Mp3FileReader(infile))
            // {
            //    WaveFileWriter.CreateWaveFile(outfile, reader);
            // }
           
        }
 
        private void OpenBtn_Click(object sender, RoutedEventArgs e)
        {
            
        }
        
        private void CreateWaveBtn_Click(object sender, RoutedEventArgs e)
        {
                 
        }
 
        private void SaveBtn_Click(object sender, RoutedEventArgs e)
        {
 
        }
    }
    
}
Вот шаблон приложения, который предварительно я вижу для реализации функционала задуманной программы.
0
Эксперт .NET
 Аватар для Usaga
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,410
16.12.2019, 06:25
Цитата Сообщение от severe90 Посмотреть сообщение
Почему считается плохим тоном прописывать функционал кнопок в обработчиках самих кнопок
Потому, что код бизнес-логики и UI смешиваются воедино, образуя кашу. Это относится не только к кнопкам и обработчикам, но вообще ко всему коду. Код нужно писать так, чтобы все его части знали как можно меньше о других, а сами классы группировать по смысловому назначению.

Почитайте про MVC, MVP, Presentation Model, Document-View и прочие MVVM.
0
3 / 2 / 1
Регистрация: 15.10.2019
Сообщений: 95
16.12.2019, 06:36  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Потому, что код бизнес-логики и UI смешиваются воедино, образуя кашу. Это относится не только к кнопкам и обработчикам, но вообще ко всему коду. Код нужно писать так, чтобы все его части знали как можно меньше о других, а сами классы группировать по смысловому назначению.

Почитайте про MVC, MVP, Presentation Model, Document-View и прочие MVVM.
Спасибо, почитаем..
0
3 / 2 / 1
Регистрация: 15.10.2019
Сообщений: 95
18.12.2019, 06:36  [ТС]
Ну может теперь кто подскажет? Вроде все прописал, однако при нажатии на кнопку CreateWave не появляется окно для указания пути сохранения файла, и сам файл тоже не появляется! Что я сделал не так?
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
    public partial class MainWindow : Window
    {
        public string infile;
        public string outfile;
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void OpenBtn_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog audioFilesMp3AllFiles = new OpenFileDialog();
            audioFilesMp3AllFiles.Filter = "Sound Files(*.mp3, *.aac, *.ogg)|*.mp3;*.aac;*.ogg";
            if (audioFilesMp3AllFiles.ShowDialog() == true)
            {
                infile = audioFilesMp3AllFiles.FileName;
            }
        }
         
        private void CreateWaveBtn_Click(object sender, RoutedEventArgs e)
        {
            using (var reader = new Mp3FileReader(infile))
            { 
                WaveFileWriter.CreateWaveFile(outfile, reader);
            }
 
            SaveFileDialog audioSaveFileDialog = new SaveFileDialog();
            if (audioSaveFileDialog.ShowDialog() == true)
            {
                outfile = audioSaveFileDialog.FileName;
            }
        }
 
       
    }
Добавлено через 2 минуты
и при открытии файла окно выбора почему то появляется 2 раза, даже если в первый раз выбрал нужный файл...
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
18.12.2019, 07:05
Цитата Сообщение от severe90 Посмотреть сообщение
WaveFileWriter.CreateWaveFile(outfile, reader);
Здесь outfile чему равно ?

Добавлено через 4 минуты
Цитата Сообщение от severe90 Посмотреть сообщение
if (audioSaveFileDialog.ShowDialog() == true)
C#
1
if (audioSaveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
0
3 / 2 / 1
Регистрация: 15.10.2019
Сообщений: 95
18.12.2019, 10:44  [ТС]
тут так не проходит, эти видимо для windowForms, а у меня WPF
там что-то должно быть связано с WIN32
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
18.12.2019, 10:44
SoftIce, тут wpf
0
3 / 2 / 1
Регистрация: 15.10.2019
Сообщений: 95
18.12.2019, 10:47  [ТС]
Цитата Сообщение от SoftIce Посмотреть сообщение
Здесь outfile чему равно ?

Добавлено через 4 минуты

C#
1
if (audioSaveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
а outfile определяется открытием и сохранением в путь, указанный мною в savefiledialog как я понимаю
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
18.12.2019, 10:54

Не по теме:

Цитата Сообщение от severe90 Посмотреть сообщение
меня WPF
Извиняюсь за невнимательность.


Цитата Сообщение от severe90 Посмотреть сообщение
сохранением в путь, указанный мною в savefiledialog как я понимаю
Да, только у Вас наоборот сделано - сначала пытаетесь создать файл, а потом спрашиваете его имя.
0
3 / 2 / 1
Регистрация: 15.10.2019
Сообщений: 95
18.12.2019, 12:20  [ТС]
SoftIce
Да, только у Вас наоборот сделано - сначала пытаетесь создать файл, а потом спрашиваете его имя.
Я понимаю, что надо наоборот поступить, но пока не понимаю как..Я должен создать пустой файл где-то в выбранном мною месте, а затем в него сохранить результат конвертации?
0
3 / 2 / 1
Регистрация: 15.10.2019
Сообщений: 95
25.12.2019, 19:48  [ТС]
Нашел вот такую функцию
public static System.IO.FileStream Create(outfile);

Как ее возможно применить для решения задачи?
куда бы не добавил эту строчку, постоянные ошибки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.12.2019, 19:48
Помогаю со студенческими работами здесь

Программа для записи звука в mp3
Ребята, здравствуйте. Нужна бесплатная программа для захвата звукового потока с микрофона (или просто со звуковой карты) и...

Программа для корректировки mp3 тегов
Всем доброго времени суток. Посоветуйте программу для корректировки mp3 тегов. Есть 1000 mp3шек и необходимо удалить всю информацию тегов....

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

Нужна программа конвертирования lossless в mp3
Здравствуйте. Нужна программа, которая преобразует lossless-музыку в mp3, но со следующими особенностями (перепробовал уже немало, ничто не...

BAT-файл как программа по умолчанию для запуска MP3-файлов
Доброго времени суток. Сразу перейду к проблеме: имеется Java программа, которая принимает на вход параметры (с ней все в порядке), и...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru