Форум программистов, компьютерный форум, киберфорум
Наши страницы

C#: WPF, UWP и Silverlight

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
MaximusSM
5 / 5 / 0
Регистрация: 13.05.2011
Сообщений: 146
#1

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

12.07.2011, 03:38. Просмотров 2362. Ответов 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# - C#
Используя какую угодно библиотеку,как записать звук чтоидет через аудюху

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

NAudio. Как записать звук в массив байтов? - C#
Доброго времени суток. Есть код который записывает звук с микрофона и сохраняет его в файл demo.wav: using NAudio.Wave; ...

NAudio: записать звук с выходного устройства - C#
Здравствуйте! Пытаюсь записать звук с колонок средствами NAudio, но записывать получается только с микрофона. Возможно ли записывать...

Голосовое управление: как получить график звука с микрофона - C#
Хочу сделать голосовое управление. Знаю что нужно получить график(время, амплитуда) и сравнивать с образцом. Проблема 1: как его...

Требуется "считать" громкость шума с микрофона как некое число - C#
Требуется "считать" громкость шума с микрофона как некое число, характеризующее уровень шума. Не знаю, как это сделать. Подскажите,...

6
Eugene22
_
2344 / 1216 / 60
Регистрация: 28.10.2009
Сообщений: 4,331
12.07.2011, 10:10 #2
MaximusSM, смотри в этой теме второй пост
1
MaximusSM
5 / 5 / 0
Регистрация: 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
_
2344 / 1216 / 60
Регистрация: 28.10.2009
Сообщений: 4,331
13.07.2011, 08:28 #4
Код в общем не зависит от того используется от в winforms или wpf. Смотри на оф сайте - там есть примеры с использованием wpf
0
Casper-SC
Эксперт .NET
3524 / 1743 / 183
Регистрация: 27.03.2010
Сообщений: 4,927
Записей в блоге: 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
_
2344 / 1216 / 60
Регистрация: 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 / 0
Регистрация: 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
Привет! Вот еще темы с ответами:

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

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

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

.NET 4.x Как воспроизвести звук из сис. динамика? - C#
Как воспроизвести звук из сис. динамика(того что &quot;PC Speaker&quot;)? Это все нужно проделать на Windows 7. Console.Beep() не предлагайте, он...


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

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

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