Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
 Аватар для Асталиса
6 / 6 / 1
Регистрация: 03.01.2016
Сообщений: 165
.NET 4.x

Одновременное воспроизведение двух wav-файлов

25.01.2016, 22:17. Показов 4289. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всех приветствую

Скажите пожалуйста, как сделать так что бы wav файл не прерывался другим wav?
У меня меню из нескольких кнопочек при наводе на которые звучит короткий звук. Они друг друга прерывают и получается очень некрасиво...
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.01.2016, 22:17
Ответы с готовыми решениями:

Воспроизведение .wav из ресурсов
Добавил файл в ресурсы: Пытался вызвать его на проигрывание двумя способами: StreamResourceInfo sri =...

Воспроизведение звука wav из ресурсов
не могу понять в чем проблема ,если использую так работает но не стабильно (то и дело выдает ошибку vshost.exe не работает) SoundPlayer...

Воспроизведение wav-файла вместе с загрузкой формы
Здравствуйте. Как можно воспроизвести wav-файл вместе с загрузкой формы? Сейчас у меня сначала звучит звук, а затем, спустя секунду-две,...

26
 Аватар для Веселый
87 / 88 / 48
Регистрация: 12.10.2013
Сообщений: 1,103
25.01.2016, 23:56
Вам что нужно??? Накладка звука на звук или последовательное воспроизведение???

Можно использовать таймер или метод Sleep() приостановки потока.
0
 Аватар для Асталиса
6 / 6 / 1
Регистрация: 03.01.2016
Сообщений: 165
25.01.2016, 23:59  [ТС]
Вот как тут в примере: http://flashdozor.ru/play-7453.html после прогрузки, поводите мышой по меню быстро, у меня так же только звук - звук заглушит и получится убожество(


В общем что бы звук, ни под каким предлогом не прервался и дозвучал до конца. Хоть землетрясение хоть цунами.
0
 Аватар для Асталиса
6 / 6 / 1
Регистрация: 03.01.2016
Сообщений: 165
30.01.2016, 18:57  [ТС]
Ну так что, скажет кто нибудь как исправить сие дело?
0
26 / 26 / 14
Регистрация: 09.06.2014
Сообщений: 162
30.01.2016, 19:26
Эммм потоки...?
0
 Аватар для Асталиса
6 / 6 / 1
Регистрация: 03.01.2016
Сообщений: 165
30.01.2016, 19:40  [ТС]
Может быть, но чего то не хотят они ставится.

Покажете пример? Вот пациент:

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
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;
using System.Media;
using System.IO;
namespace WindowsFormsApplication3
 
 
{
    public partial class Form1 : Form
    {
 
 
        SoundPlayer sp = new SoundPlayer(Properties.Resources.genesis);
 
        public Form1()
        {
            InitializeComponent();
        }
 
                  private void button2_Click(object sender, EventArgs e)
                              {
                                 sp.Play();
                              }
 
                         private void button2_MouseEnter(object sender, EventArgs e)
                           {
                             var p = new SoundPlayer(Properties.Resources.hover); //звук навода мыши прервет музыку а надо что бы не прерывал:)
                             p.Play();
                           }
 
        }
0
 Аватар для Веселый
87 / 88 / 48
Регистрация: 12.10.2013
Сообщений: 1,103
30.01.2016, 23:12
Может, вам это поможет?


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
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;
using System.Media;
using System.IO;
 
namespace Play
{
    public partial class Form1 : Form
    {
        SoundPlayer sp;
        bool b = true;
        public Form1()
        {
            InitializeComponent();
            sp = new SoundPlayer(@"D:\Новая папка\Play\ресурсы\moralnij_kodeks_-_pervij_sneg_(zvukoff.ru) [Высшее качество].wav");
      
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            b = false;
            sp.PlayLooping();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            b = true;
            sp.Stop();
        }
        private void Form1_MouseEnter(object sender, EventArgs e)
        {
            if (b)
            {
                var p = new SoundPlayer(@"D:\Новая папка\Play\ресурсы\Windows XP - стандартный звук [Высшее качество].wav"); //звук навода мыши прервет музыку а надо что бы не прерывал:)
                p.Play();
            }
                       
        }      
    }
}
1
 Аватар для Асталиса
6 / 6 / 1
Регистрация: 03.01.2016
Сообщений: 165
01.02.2016, 14:30  [ТС]
Ошибка 1 "Play.Form1.Dispose(bool)": не найден метод, пригодный для переопределения



Как только не пытался, не компилируется в вашем варианте наверное где то жестко туплю.

Добавлено через 15 часов 59 минут
Люди подскажите

Добавлено через 19 часов 31 минуту
Делал через потоки , выносил длинный звук в отдельный поток а короткий (навод мыши на кнопку) оставил без изменений.

Получилась катастрофа, когда по таймеру срабатывает длинный (все как надо) и если навести мышой на звуковую кнопку в момент работы длинного, мы услышим попытку проиграть короткий звук который мгновенно прервется и один хрен заглушит старый
0
 Аватар для Веселый
87 / 88 / 48
Регистрация: 12.10.2013
Сообщений: 1,103
01.02.2016, 17:11
Асталиса,покажите ваш новый код.
0
 Аватар для Асталиса
6 / 6 / 1
Регистрация: 03.01.2016
Сообщений: 165
01.02.2016, 17:25  [ТС]
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
private void timer2_Tick(object sender, EventArgs e)
        {
            Thread newTread = new Thread(func);
            newTread.Start(); 
            if (label1.Text == label2.Text + ":00")
            {
                
 
                button2.Enabled = true;
                sp.Play();
                pictureBox1.Image = Properties.Resources.miku; //появление Мику
                this.Show();
                this.WindowState = FormWindowState.Normal;
                notifyIcon1.Visible = false;
 
            }
        }
 
        private void func()
        {
            sp.Play();
 
   private void button1_MouseEnter(object sender, EventArgs e)
        {
            var p = new SoundPlayer(Properties.Resources.hover); //звук навода мыши
            p.Play();
        }
        }
При таком раскладе, длинный файл пытается воспроизвестись мгновенно по нажатию кнопки а не таймеру, но сразу же заткнется и больше не заиграет. Второй короткий звук так же будет прерываться сразу же при попытке проигрывания, создавая звуковую помеху "пшшшт"
0
 Аватар для Веселый
87 / 88 / 48
Регистрация: 12.10.2013
Сообщений: 1,103
01.02.2016, 17:32
C#
1
2
3
4
5
6
7
8
9
10
private void func()
        {
            sp.Play();
        // Это что недописка ???
   private void button1_MouseEnter(object sender, EventArgs e)
        {
            var p = new SoundPlayer(Properties.Resources.hover); //звук навода мыши
            p.Play();
        }
        }
0
 Аватар для Асталиса
6 / 6 / 1
Регистрация: 03.01.2016
Сообщений: 165
01.02.2016, 23:28  [ТС]
Да, недокопировалось } в коде все ок


private void button1 - это место может грузится откуда угодно, просто указал рождение короткого звука для форума.

Добавлено через 1 час 11 минут
Поток то стартует похоже исправно, но работает он ровно секунду а потом прерывает звуковой файл и видимо пытается его бесконечно воспроизвести заново, при любом действии с музыкальными файлами получается "пшшш" "пшшш" "пшшш" звук шипящий пока не стопнешь отладчик.


Ах да, забыл сказать, 10 строка в коде // sp.Play(); закоментирована иначе нет никакого толка.

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

Вот в таком варианте работает но звук всё равно перебивается другим!

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
private void timer2_Tick(object sender, EventArgs e)
        {
            
            if (label1.Text == label2.Text + ":00")
            {
 
                Thread newTread = new Thread(func);
                newTread.Start(); 
                
                button2.Enabled = true;
                pictureBox1.Image = Properties.Resources.miku; //появление Мику
                this.Show();
                this.WindowState = FormWindowState.Normal;
                notifyIcon1.Visible = false;
 
            }
        }
 
        private void func()
        {
            sp.Play();
        }
 
 
                    private void button1_MouseEnter(object sender, EventArgs e)
        {
            var a = new SoundPlayer(Properties.Resources.hover); //звук навода мыши
            a.Play();
        }
            
            
        }
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
02.02.2016, 00:43
Лучший ответ Сообщение было отмечено Асталиса как решение

Решение

Асталиса,
Я думаю, с помощью SoundPlayer не получится одновременно воспроизводить 2 файла.
Может помочь MediaPlayer. Во всяком случае у меня получилось одновременно проиграть 2 файла, запуская воспроизведение каждого щелчком по соответствующей кнопке.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private void button1_Click(object sender, EventArgs e)
{
    MediaPlayer mp = new MediaPlayer();
    mp.Open(new Uri(@"d:\000\1.wav"));
    mp.Play();
}
 
private void button2_Click(object sender, EventArgs e)
{
    MediaPlayer mp = new MediaPlayer();
    mp.Open(new Uri(@"d:\000\2.wav"));
    mp.Play();
}
Не знаю, получится ли использовать ресурсы приложения. Скорей всего нужно хранить файлы отдельно. Или считывать поток ресурса и сохранять, а затем воспроизводить.
Для использования MediaPlayer нужно в проект добавить ссылки: PresentationCore и WindowsBase.
Плюс подключить пространство имен System.Windows.Media.
1
 Аватар для Асталиса
6 / 6 / 1
Регистрация: 03.01.2016
Сообщений: 165
02.02.2016, 00:51  [ТС]
Да, вот уже наткнулся на подобный вариант, у меня студио 2010, с этим проблем не будет? И вот такой вариант еще нашел на форуме но он похоже не работает, во всяком случае звук по прежнему прерывается или я криворук.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 private void button3_Click(object sender, EventArgs e)
        {
            Thread Thr1 = new Thread(func); //Создаем новый объект потока Thread
            Thr1.Start("01.wav"); //запускаем поток
 
            Thread Thr2 = new Thread(func); //Создаем новый объект потока Thread
            Thr2.Start("02.wav"); //запускаем поток
 
        }
 
        static void func(object pesnya)
        {
                SoundPlayer lala = new SoundPlayer((string)pesnya);
                lala.PlayLooping();
        }
А как подключить PresentationCore и WindowsBase ? И что значит "хранить отдельно" Я всё загружаю из базы ресурсов.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
02.02.2016, 00:58
Цитата Сообщение от Асталиса Посмотреть сообщение
у меня студио 2010, с этим проблем не будет?
У меня тоже.
Цитата Сообщение от Асталиса Посмотреть сообщение
А как подключить PresentationCore и WindowsBase
Меню Project -> Add Reference -> .NET и в списке ищите соответствующие ссылки.
Цитата Сообщение от Асталиса Посмотреть сообщение
И что значит "хранить отдельно" Я всё загружаю из базы ресурсов.
Хранить отдельно, значит не в ресурсах, а файлами в папке.
1
 Аватар для Асталиса
6 / 6 / 1
Регистрация: 03.01.2016
Сообщений: 165
02.02.2016, 01:44  [ТС]
Сработало Даценд, но через 10 секунд, прерывается почему то, и можешь написать пример загрузки из ресурсов? Все же хочу попробовать разные опыты. Первоначальная задача - уместить все в рамках exe
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
02.02.2016, 13:38
Асталиса,
Вот набросал класс, воспроизводящий WAV из ресурсов в MediaPlayer:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class ResPlayer
{
    public static void Play(Stream stream)
    {
        string file = Path.Combine(Application.StartupPath, Path.GetRandomFileName() + ".wav"); //рандомное имя файла
        byte[] buffer = new byte[stream.Length];
        stream.Read(buffer, 0, (int)stream.Length); //читаем поток
        File.WriteAllBytes(file, buffer); //пишем в файл
        MediaPlayer mp = new MediaPlayer();
        mp.Open(new Uri(file)); //открываем файл
        mp.MediaEnded += new EventHandler(mp_MediaEnded); 
        mp.Play(); //воспроизводим
    }
    static void mp_MediaEnded(object sender, EventArgs e) //действия после проигрывания
    {
        string file = (sender as MediaPlayer).Source.LocalPath;
        (sender as MediaPlayer).Close(); //закрываем
        File.Delete(file); //удаляем файл
    }
}
Запуск воспроизведения:
C#
1
2
3
4
5
6
7
8
9
private void button1_Click(object sender, EventArgs e)
{
    ResPlayer.Play(Properties.Resources.sound1);
}
 
private void button2_Click(object sender, EventArgs e)
{
    ResPlayer.Play(Properties.Resources.sound2);
}
Протестировал, вроде работает. Воспроизводит одновременно. Но почему-то не всегда удаляются создаваемые файлы.
1
 Аватар для Асталиса
6 / 6 / 1
Регистрация: 03.01.2016
Сообщений: 165
02.02.2016, 15:09  [ТС]
Спасибо огромное Даценд,

У меня пара вопросов еще

Как прописать проигрывание нужного файла в твоем примере? Чего то не выходит. И как правильно внедрить твой пример в:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private void timer2_Tick(object sender, EventArgs e)
        {
            
            if (label1.Text == label2.Text + ":00")
            {
                button2.Enabled = true;
                pictureBox1.Image = Properties.Resources.miku; //появление Мику
                this.Show();
                this.WindowState = FormWindowState.Normal;
                notifyIcon1.Visible = false;
 
            }
        }
Никак не могу понять
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
02.02.2016, 16:52
Цитата Сообщение от Асталиса Посмотреть сообщение
И как правильно внедрить
Просто добавляете класс в проект. А там где нужно запустить воспроизведение, запускаете:
C#
1
ResPlayer.Play(Properties.Resources.hover);
Т.е., например:
C#
1
2
3
4
private void button1_MouseEnter(object sender, EventArgs e)
{
    ResPlayer.Play(Properties.Resources.hover);
}
Добавлено через 1 час 25 минут
Вот более полный пример. В нем по таймеру каждые две секунды начинается воспроизведение одного из файлов.

Кликните здесь для просмотра всего текста
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
using System;
using System.Windows.Forms;
using System.Windows.Media;
using System.IO;
 
namespace WF
{
    public partial class Form1 : Form
    {
 
        public Form1()
        {
            InitializeComponent();
        }
 
        bool playFirst = true;
        private void Form1_Load(object sender, EventArgs e)
        {
            System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
            timer.Interval = 2000;
            timer.Tick += new EventHandler(timer_Tick);
            timer_Tick(null, null);
            timer.Start();
        }
 
        void timer_Tick(object sender, EventArgs e)
        {
            if (playFirst)
                ResPlayer.Play(Properties.Resources.sound1);
            else
                ResPlayer.Play(Properties.Resources.sound2);
            playFirst = !playFirst;
        }
    }
 
    class ResPlayer
    {
        public static void Play(Stream stream)
        {
            string file = Path.Combine(Application.StartupPath, Path.GetRandomFileName() + ".wav"); //рандомное имя файла
            byte[] buffer = new byte[stream.Length];
            stream.Read(buffer, 0, (int)stream.Length); //читаем поток
            File.WriteAllBytes(file, buffer); //пишем в файл
            MediaPlayer mp = new MediaPlayer();
            mp.Open(new Uri(file)); //открываем файл
            mp.MediaEnded += new EventHandler(mp_MediaEnded);
            mp.Play(); //воспроизводим
        }
        static void mp_MediaEnded(object sender, EventArgs e) //действия после проигрывания
        {
            string file = (sender as MediaPlayer).Source.LocalPath;
            (sender as MediaPlayer).Close(); //закрываем
            File.Delete(file); //удаляем файл
        }
    }
 
}
1
 Аватар для Асталиса
6 / 6 / 1
Регистрация: 03.01.2016
Сообщений: 165
02.02.2016, 17:25  [ТС]
А как сделать с одним файлом? Второй загружается старым способом а первый должен по вашему
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.02.2016, 17:25
Помогаю со студенческими работами здесь

Воспроизведение звука wav из ресурсов
не могу понять в чем проблема, я занес звуковой файл в формате wav в ресурсы, закрепил его там. Но когда ввожу этот код ...

Циклическое воспроизведение wav-файла
Добрый день имеется wav файл если он оканчивается должен перезапуститься

Wav-file воспроизведение задом наперед
Помогите пожалуйста реализовать воспроизведение wiv файла задом на перед

Потоки, одновременное воспроизведение двух разных wav-файлов
Господа создал 2 функции которые просто воспроизводят разные wav файлы , каждую функцию запихиваю в поток , что бы одновременно...

Параллельное воспроизведение двух wav-файлов
Здравствуйте, хотел узнать у вас , возможно ли проиграть 2 wav-файла в VB одновременно? делаю игру-шутку, где озвучивается переход на др....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
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 и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru