Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
MaximusSM
5 / 5 / 3
Регистрация: 13.05.2011
Сообщений: 146
#1

Как записать звук с микрофона? - C# WPF

12.07.2011, 03:38. Просмотров 2518. Ответов 6
Метки нет (Все метки)

Как записать звук с микрофона в файл, пробовал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
        private static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            mciSendString("open new Type waveaudio Alias recsound", "", 0, 0);
            mciSendString("record recsound", "", 0, 0);
            
 
            mciSendString("save recsound C:\\123\\result.wav", "", 0, 0);
            
        }
 
        private void button2_Click(object sender, RoutedEventArgs e)
        {
            mciSendString("close recsound ", "", 0, 0);
        }
но создаётся только пустой "wav" файл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2011, 03:38
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как записать звук с микрофона? (C# WPF):

А как записать звук в c#
Используя какую угодно библиотеку,как записать звук чтоидет через аудюху

Снимаем звук с микрофона: ошибка 11 (invalid parameter passed)
Добрый день. Собственно сабж. На с++ реализовал, а вот на шарпе.... вот код...

NAudio. Как записать звук в массив байтов?
Доброго времени суток. Есть код который записывает звук с микрофона и сохраняет...

NAudio: записать звук с выходного устройства
Здравствуйте! Пытаюсь записать звук с колонок средствами NAudio, но записывать...

Голосовое управление: как получить график звука с микрофона
Хочу сделать голосовое управление. Знаю что нужно получить график(время,...

Требуется "считать" громкость шума с микрофона как некое число
Требуется "считать" громкость шума с микрофона как некое число, характеризующее...

6
Eugene22
_
2349 / 1222 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
12.07.2011, 10:10 #2
MaximusSM, смотри в этой теме второй пост
1
MaximusSM
5 / 5 / 3
Регистрация: 13.05.2011
Сообщений: 146
12.07.2011, 23:54  [ТС] #3
Цитата Сообщение от Eugene22 Посмотреть сообщение
MaximusSM, смотри в этой теме второй пост
И как его адаптировать под WPF:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using NAudio.Wave;
using NAudio.FileFormats;
using NAudio.CoreAudioApi;
using NAudio;
 
namespace WpfApplication2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        // WaveIn - поток для записи
        WaveIn waveIn;
        //Класс для записи в файл
        WaveFileWriter writer;
        //Имя файла для записи
        string outputFilename = "имя_файла.wav";
        
        public MainWindow()
        {
            InitializeComponent();
        }
 
        //Получение данных из входного буфера и обработка полученных с микрофона данных
        void waveIn_DataAvailable(object sender, WaveInEventArgs e)
        {
            if (this.InvokeRequired) //Ошибка здесь1
            {
                this.BeginInvoke(new EventHandler<WaveInEventArgs>(waveIn_DataAvailable), sender, e);//Ошибка здесь2
            }
            else
            {
                //Записываем данные из буфера в файл
                writer.WriteData(e.Buffer, 0, e.BytesRecorded);
            }
        }
        //Завершаем запись
        void StopRecording()
        {
            MessageBox.Show("StopRecording");
            waveIn.StopRecording();
        }
        //Окончание записи
 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
 
        }
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            //Дефолтное устройство для записи (если оно имеется)
 
            //Прикрепляем к событию DataAvailable обработчик, возникающий при наличии записываемых данных
            waveIn.DataAvailable += waveIn_DataAvailable;
            //Прикрепляем обработчик завершения записи
            waveIn.RecordingStopped += new EventHandler(waveIn_RecordingStopped);//Ошибка здесь3
            //Формат wav-файла - принимает параметры - частоту дискретизации и количество каналов(здесь mono)
            waveIn.WaveFormat = new WaveFormat(8000, 1);
            //Инициализируем объект WaveFileWriter
            writer = new WaveFileWriter(outputFilename, waveIn.WaveFormat);
            //Начало записи
            waveIn.StartRecording();
        }
 
        private void button2_Click(object sender, RoutedEventArgs e)
        {
            if (waveIn != null)
            {
                StopRecording();
            }
        }
    }
}
0
Eugene22
_
2349 / 1222 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
13.07.2011, 08:28 #4
Код в общем не зависит от того используется от в winforms или wpf. Смотри на оф сайте - там есть примеры с использованием wpf
0
Casper-SC
Эксперт .NET
3582 / 1802 / 347
Регистрация: 27.03.2010
Сообщений: 5,072
Записей в блоге: 1
13.07.2011, 19:37 #5
Вроде так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
        void waveIn_DataAvailable(object sender, WaveInEventArgs e)
        {
            if (this.Dispatcher.CheckAccess()) //Ошибка здесь по идее не должна возникнуть
            {
                //Ошибку тут не правил.
                this.BeginInvoke(new EventHandler<WaveInEventArgs>(waveIn_DataAvailable), sender, e);
            }
            else
            {
                writer.WriteData(e.Buffer, 0, e.BytesRecorded);
            }
        }
1
Eugene22
_
2349 / 1222 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
13.07.2011, 19:51 #6
Эту часть можно вообще выкинуть
C#
1
2
3
4
5
6
7
8
9
if (this.InvokeRequired) //Ошибка здесь1
            {
                this.BeginInvoke(new EventHandler<WaveInEventArgs>(waveIn_DataAvailable), sender, e);//Ошибка здесь2
            }
            else
            {
                //Записываем данные из буфера в файл
                writer.WriteData(e.Buffer, 0, e.BytesRecorded);
            }
и оставить
C#
1
2
//Записываем данные из буфера в файл
                writer.WriteData(e.Buffer, 0, e.BytesRecorded);
1
MaximusSM
5 / 5 / 3
Регистрация: 13.05.2011
Сообщений: 146
13.07.2011, 22:48  [ТС] #7
Цитата Сообщение от Eugene22 Посмотреть сообщение
Эту часть можно вообще выкинуть
C#
1
2
3
4
5
6
7
8
9
if (this.InvokeRequired) //Ошибка здесь1
            {
                this.BeginInvoke(new EventHandler<WaveInEventArgs>(waveIn_DataAvailable), sender, e);//Ошибка здесь2
            }
            else
            {
                //Записываем данные из буфера в файл
                writer.WriteData(e.Buffer, 0, e.BytesRecorded);
            }
и оставить
C#
1
2
//Записываем данные из буфера в файл
                writer.WriteData(e.Buffer, 0, e.BytesRecorded);
А как это "waveIn.RecordingStopped += new EventHandler(waveIn_RecordingStopped);" исправить, запись не завершается.
0
13.07.2011, 22:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2011, 22:48
Привет! Вот еще темы с решениями:

Как отключить звук в игре?
Добрый день! У меня вопрос, как сделать так, чтобы при нажатии клавиши &quot;S&quot; на...

Как извлечь звук из видео
как извлечь звук из видео?и можно ли получить состав звука в мгц?

Как последовательно проиграть звук?
Есть много звуковых файлом, один звуковой файл должен воспроизводиться в...

Как соединить звук в видео
Допустим есть звук и видео без звука. Можно как-то их соединить в отдельное...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru