Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/48: Рейтинг темы: голосов - 48, средняя оценка - 4.75
 Аватар для NARTZISS
3 / 3 / 1
Регистрация: 11.11.2009
Сообщений: 132

Звуковое сопровождение событий в приложении

17.12.2009, 12:27. Показов 9554. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне хотелось бы добавить звук(при нажатии на некую кнопку)
Если можно то поподробней(т.к. со звуком раньше не сталкивался)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2009, 12:27
Ответы с готовыми решениями:

Звуковое сопровождение определения сети WiFi
Вот программа. Нужно чтобы когда находился wi-fi сеть издавался звук,и громкость компьютера становилась на максимум, и звук повторялся,...

Звуковое сопровождение в приложении
Доброго времени суток. Написал игру, и возник вопрос, а как добавить звуковое сопровождение в своем приложении? Хотелось бы добавить звук...

Звуковое сопровождение
Всем доброго дня. Можно ли организовать звуковое сопровождение, например, нажатия кнопки (кроме beep)? Звук .wav

17
274 / 200 / 33
Регистрация: 18.04.2009
Сообщений: 177
17.12.2009, 13:41
Лучший ответ Сообщение было отмечено как решение

Решение

Вариант №1:
C#
1
2
3
4
5
6
7
8
9
using Microsoft.DirectX.AudioVideoPlayback;
 
private Audio backmusic = new Audio(@"D:\prodigy_-_voodoo_people.mp3");
 
private void button1_Click(object sender, EventArgs e)
{
     backmusic.Stop();
     backmusic.Play();
}
Вариант №1 не работает в Windows Vista и Seven.

Вариант №2:
C#
1
2
3
4
5
6
7
using System.Media;
 
private void button1_Click(object sender, EventArgs e)
{
    SoundPlayer player = new SoundPlayer(@"C:\Mouse_Down.wav");
    player.Play();
}
Вариант №2 пригоден только для wav.

Вариант №3:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System.Runtime.InteropServices;
 
[DllImport("winmm.dll")]
private static extern long mciSendString(string strCommand, StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback);
 
private string sCommand = "";
 
private void button1_Click(object sender, EventArgs e)
{
    sCommand = "open \"" + @"D:\prodigy_-_voodoo_people.mp3" + "\" type mpegvideo alias MediaFile";
    //посылаем команду
    mciSendString(sCommand, null, 0, IntPtr.Zero);
    //команда для воспроизведения файла
    sCommand = "play MediaFile";
    //посылаем команду
    mciSendString(sCommand, null, 0, IntPtr.Zero);
}
3
 Аватар для NARTZISS
3 / 3 / 1
Регистрация: 11.11.2009
Сообщений: 132
17.12.2009, 15:16  [ТС]
Спасибо!! огромное!!!
0
1 / 1 / 1
Регистрация: 01.06.2009
Сообщений: 38
31.12.2009, 14:53
У меня компилятор ругается на первый пример, говорит: Имя типа или пространства имен "DirectX" отсутствует в пространстве имен "Microsoft" (пропущена ссылка на сборку?). Как можно исправить?
0
 Аватар для NARTZISS
3 / 3 / 1
Регистрация: 11.11.2009
Сообщений: 132
31.12.2009, 19:16  [ТС]
Цитата Сообщение от g8hyp Посмотреть сообщение
У меня компилятор ругается на первый пример, говорит: Имя типа или пространства имен "DirectX" отсутствует в пространстве имен "Microsoft" (пропущена ссылка на сборку?). Как можно исправить?

А какая винда
Вариант №1 не работает в Windows Vista и Seven.
0
1 / 1 / 1
Регистрация: 01.06.2009
Сообщений: 38
31.12.2009, 20:16
Windows XP SP3 ENG. VL, компилятор:Microsoft Visual C# 2008 SP1 Express Edition.
0
101 / 101 / 19
Регистрация: 29.12.2009
Сообщений: 204
31.12.2009, 20:21
у меня тоже нет (xp sp3, vs2008 team suite sp1)
м.б. не хватает DirectX SDK?
0
Заблокирован
31.12.2009, 21: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
58
using System.Runtime.InteropServices;
 /////////////////////////////////
[DllImport("winmm.dll")]
        public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);
 
        [DllImport("winmm.dll")]
        public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
/////////////////////////////////////////////
 
//увеличиваем звук
private void button1_Click(object sender, EventArgs e)
        {
            int NewVolume;
            // By the default set the volume to 0
            uint CurrVol = 0;
            // At this point, CurrVol gets assigned the volume
            waveOutGetVolume(IntPtr.Zero, out CurrVol);
            // Calculate the volume
            ushort CalcVol = (ushort)(CurrVol & 0x0000ffff);
            // Get the volume on a scale of 1 to 10 (to fit the trackbar)
            NewVolume = CalcVol;
 
            //увеличиваем
            if (NewVolume < ushort.MaxValue - 1000)
                NewVolume += 1000;
            else MessageBox.Show("За пределами диапазона");
           
            // Set the same volume for both the left and the right channels
            uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
            // Set the volume
            waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
        }
 
//уменьшаем звук
private void button2_Click(object sender, EventArgs e)
        {
            int NewVolume;
            // By the default set the volume to 0
            uint CurrVol = 0;
            // At this point, CurrVol gets assigned the volume
            waveOutGetVolume(IntPtr.Zero, out CurrVol);
            // Calculate the volume
            ushort CalcVol = (ushort)(CurrVol & 0x0000ffff);
            // Get the volume on a scale of 1 to 10 (to fit the trackbar)
            NewVolume = CalcVol;
 
            //уменьшаем
            if (NewVolume  > ushort.MinValue+ 1000)
                NewVolume -= 1000;
            else MessageBox.Show("За пределами диапазона");
            
            // Set the same volume for both the left and the right channels
            uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
            // Set the volume
            waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
        }
//просто отключить звук
 waveOutSetVolume(IntPtr.Zero, 0);
0
1 / 1 / 1
Регистрация: 01.06.2009
Сообщений: 38
01.01.2010, 15:40
Установил DirectX SDK, не помогло, хотя может быть надо ещё что-то сделать кроме как установить?
0
101 / 101 / 19
Регистрация: 29.12.2009
Сообщений: 204
01.01.2010, 16:09
погуглил тут:
http://www.codersource.net/pub... ng_in.aspx
Next we have to add the necessary DirectX resources for this project. Put the namespaces in the beginning of the file:

C#
1
2
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
Now go to the add reference dialog and click browse. Go to the directory you installed the DXSDK into and go to the "developer runtime" folder then go to x86 folder then go to the "DirectX for Managed Code" folder. Select the Microsoft.DirectX.Direct3D.DLL, Microsoft.DirectX.Direct3DX.DLL and Microsoft.DirectX.DLL references and click ok. Next go to add reference again and select System.Drawing and System.Windows.Forms reference. Now you have the project set up for DirectX.
м.б. поможет? самому ставить этот sdk чего-то не хочется..)
1
Заблокирован
01.01.2010, 16:24
Не знаю, какие у тебя проблемы. Только что проверил - все работает.
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
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 WindowsFormsApplication3
{
    using System.Runtime.InteropServices;
    public partial class Form1 : Form
    {
        [DllImport("winmm.dll")]
        public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);
 
        [DllImport("winmm.dll")]
        public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            int NewVolume;
            // By the default set the volume to 0
            uint CurrVol = 0;
            // At this point, CurrVol gets assigned the volume
            waveOutGetVolume(IntPtr.Zero, out CurrVol);
            // Calculate the volume
            ushort CalcVol = (ushort)(CurrVol & 0x0000ffff);
            // Get the volume on a scale of 1 to 10 (to fit the trackbar)
            NewVolume = CalcVol;
 
            //увеличиваем
            if (NewVolume < ushort.MaxValue - 1000)
                NewVolume += 1000;
            else MessageBox.Show("За пределами диапазона");
 
            // Set the same volume for both the left and the right channels
            uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
            // Set the volume
            waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            int NewVolume;
            // By the default set the volume to 0
            uint CurrVol = 0;
            // At this point, CurrVol gets assigned the volume
            waveOutGetVolume(IntPtr.Zero, out CurrVol);
            // Calculate the volume
            ushort CalcVol = (ushort)(CurrVol & 0x0000ffff);
            // Get the volume on a scale of 1 to 10 (to fit the trackbar)
            NewVolume = CalcVol;
 
            //уменьшаем
            if (NewVolume > ushort.MinValue + 1000)
                NewVolume -= 1000;
            else MessageBox.Show("За пределами диапазона");
 
            // Set the same volume for both the left and the right channels
            uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
            // Set the volume
            waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
        }
    }
}
0
1 / 1 / 1
Регистрация: 01.06.2009
Сообщений: 38
02.01.2010, 14:36
verzer
Спасибо за ссылку, почитал разобрался, оказалось устанавливать DirectX SDK для простого воспроизведения MP3 не нужно, просто в проект надо добавить ссылку на Microsoft.DirectX.AudioVideoPlayback (проект-> добавить ссылку-> и в подменю .NET выбрать Microsoft.DirectX.AudioVideoPlayback), дальше всё работает. Ещё раз спасибо огромное)
0
 Аватар для FreeWay
84 / 84 / 19
Регистрация: 17.12.2007
Сообщений: 574
28.07.2010, 15:32
SSV а у тебя случайно нет примера как связать позицию файла с трек баром.
В гугле наковырял такие вот функции:

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
private void scrollTimer_Tick(object sender, EventArgs e)
        {
            if (trackBar1.Value < trackBar1.Maximum)
            {
                label2.Text = trackBar1.Value.ToString();
                string trackBar = Convert.ToString(scrollTimer.Interval);
                trackBar1.Value += 1;
                trackBar1.Value = (int)(this.CurrentPosition / 1000);
            }
            else
            {
                trackBar1.Value = 0;
                scrollTimer.Enabled = false;
            }            
        }
 public void Seek(ulong Millisecs)
        {
            if (isOpen && Millisecs <= Lng)
            {
                    if (Pause)
                    {
                        _command = String.Format("seek MediaFile to {0}", Millisecs);
                        if ((Err = mciSendString(_command, null, 0, IntPtr.Zero)) != 0) OnError(new ErrorEventArgs(Err));
                    }
                    else
                    {
                        _command = String.Format("seek MediaFile to {0}", Millisecs);
                        if ((Err = mciSendString(_command, null, 0, IntPtr.Zero)) != 0) OnError(new ErrorEventArgs(Err));
                        _command = "play MediaFile";
                        if ((Err = mciSendString(_command, null, 0, IntPtr.Zero)) != 0) OnError(new ErrorEventArgs(Err));
                    }
                }
            }
        
 
        private void CalculateLength()
        {
            StringBuilder str = new StringBuilder(128);
            mciSendString("status MediaFile length", str, 128, IntPtr.Zero);
            Lng = Convert.ToUInt64(str.ToString());
        }
 
        public ulong AudioLength
        {
            get
            {
                if (isOpen) return Lng;
                else return 0;
            }
        }
 
        public ulong CurrentPosition
        {
            get
            {
                if (isOpen)
                {
                    StringBuilder s = new StringBuilder(128);
                    _command = "status MediaFile position";
                    if ((Err = mciSendString(_command, s, 128, IntPtr.Zero)) != 0) OnError(new ErrorEventArgs(Err));
                    return Convert.ToUInt64(s.ToString());
                }
                else return 0;
            }
        }
у меня ругается на строку например:
if ((Err = mciSendString(Pcommand, s, 128, IntPtr.Zero)) != 0) OnError(new ErrorEventArgs(Err));

мол - Err и OnError - нет такого

видать это кусок выдран откуда-то ((((
0
 Аватар для FreeWay
84 / 84 / 19
Регистрация: 17.12.2007
Сообщений: 574
02.08.2010, 13:39
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        public ulong CurrentPosition
        {
            get
            {
                if (isOpen)
                {
                    StringBuilder s = new StringBuilder(128);
                    Pcommand = "status MediaFile position";
                    //if ((Err = mciSendString(Pcommand, s, 128, IntPtr.Zero)) != 0) OnError(new ErrorEventArgs(Err));
                    return Convert.ToUInt64(s.ToString());
                }
                else return 0;
            }
        }
ползунок на одно деление сдвигается и пишет такой эксепшн
Не удалось привести тип объекта "System.Text.StringBuilder" к типу "System.IConvertible".
и указывает на строку - return Convert.ToUInt64(s.ToString());

Добавлено через 44 минуты
надо было команду вставить - mciSendString(Pcommand, s, 128, 0);
0
4 / 4 / 0
Регистрация: 18.06.2012
Сообщений: 101
28.06.2012, 11:09
Добавлено через 6 минут
Цитата Сообщение от NARTZISS Посмотреть сообщение
Сообщение от g8hyp
У меня компилятор ругается на первый пример, говорит: Имя типа или пространства имен "DirectX" отсутствует в пространстве имен "Microsoft" (пропущена ссылка на сборку?). Как можно исправить?
А какая винда
Вариант №1 не работает в Windows Vista и Seven.
Работает в семерке.Просто надо скачать и подключить библиотеку
0
 Аватар для Aow
6 / 6 / 2
Регистрация: 08.05.2012
Сообщений: 116
28.06.2012, 19:22
Подключи библиотеку DirectX.AudioVideoPlayback по пути: C:/windows/Microsoft.NET/DirectX for Managed Code/1.0.2902.0/ ... А для более простого воспроизведения музыки в формате .wav подключи пространство имен using system.media; и создай переменную типа SoundPlayer (а в скобках после создания либо в двойных ковычках укажи путь к файлу либо без ковычек Properties.Resources.Имя файла):
C#
1
2
3
4
SoundPlayer sp = new SoundPlayer("D:/музыка/song.wav");
SoundPlayer spp = new SoundPlayer(Properties.Resources.song);
sp.Play();
sp.Stop();
0
 Аватар для xadjek
36 / 36 / 14
Регистрация: 05.06.2011
Сообщений: 306
21.07.2012, 20:27
сделал как здесь:
Цитата Сообщение от Aow Посмотреть сообщение
Подключи библиотеку DirectX.AudioVideoPlayback по пути: C:/windows/Microsoft.NET/DirectX for Managed Code/1.0.2902.0/ ...
и так:
C#
1
2
3
4
5
6
7
using Microsoft.DirectX.AudioVideoPlayback;
private Audio backmusic = new Audio(@"D:\Medal.mp3");
private void button3_Click(object sender, EventArgs e)
        {
            backmusic.Stop();
            backmusic.Play();
        }
в итоге компилируется без ошибок но при запуске выдает такую ошибку:
Миниатюры
Звуковое сопровождение событий в приложении  
0
4 / 4 / 0
Регистрация: 18.06.2012
Сообщений: 101
30.07.2012, 10:49
ты часом не перенес проект на новый Framework?Из 1 вижуала в другой например?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.07.2012, 10:49
Помогаю со студенческими работами здесь

Звуковое сопровождение нажатия
Ребят, подскажите пожалуйста, с чего начать если нужно написать программу для прерываний мыши под МС ДОС? Просто есть задание - написать...

Звуковое сопровождение в Powerpoint 2010
Здравствуйте, я запутался ... Делаю презентацию, столкнулся с несколькими проблемами: 1) Звуковое сопровождение - вставляю управляющую...

Как убрать звуковое сопровождение при переключении в полноэкранный режим
распахиваю окно и возвращаю так: case WM_SYSKEYDOWN: //обработка нажатия системных клавиш if((char)wParam==VK_RETURN &amp;&amp;...

Как убрать звуковое сопровождение при нажатии Enter в поле ввода Edit?
при нажатии Enter в поле Edit1 воспроизводится (не знаю как по-толковому объяснить) звук, который не желателен. как его собственно убрать? ...

Звуковое оповещение в DOS-приложении
Нет подходящего раздела, да извинят меня модеры.) Oracle VM VirtualBox Гостевая ОС MS DOS 6.22. Хостовая ХР. Виртуалку...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru