Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/35: Рейтинг темы: голосов - 35, средняя оценка - 4.86
4 / 4 / 1
Регистрация: 25.10.2010
Сообщений: 45

Запись звука в byte[] с помощью NAudio

18.10.2011, 23:07. Показов 7139. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код который пишет в файл звук, Ребят как записать звук только в переменную byte[]
И если можно то как оптимизировать доступ к ней
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
waveIn = new WaveIn();
            //Дефолтное устройство для записи (если оно имеется)
            waveIn.DeviceNumber = 0;
           //Прикрепляем к событию DataAvailable обработчик, возникающий при наличии записываемых данных
            waveIn.DataAvailable += waveIn_DataAvailable;
            //Прикрепляем обработчик завершения записи
            waveIn.RecordingStopped += new EventHandler(waveIn_RecordingStopped);
            //Формат wav-файла - принимает параметры - частоту дискретизации и количество каналов(здесь mono)
            waveIn.WaveFormat = new WaveFormat(22050, 1);
            //Инициализируем объект WaveFileWriter
            writer = new WaveFileWriter(outputFilename, waveIn.WaveFormat);
            
            //Начало записи
            waveIn.StartRecording();
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2011, 23:07
Ответы с готовыми решениями:

Запись звука(без NAudio)
Уже второй день курю интернеты, ничего не выходит. Брал копипасту кода отсюда. As is она не работает. Во-первых, вот эта строка : ...

Запись и вывод звука с NAudio
Здравствуйте. Только начал работать со звуком и в частности с NAudio. Подскажите, пожалуйста, каким образом производится запись звука и его...

Запись звука с помощью bass
Всем привет Вопрос такой Как записать звук с помощью библиотеки bass? документация, прилагающаяся к нему мне непонятна из-за плохого...

14
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.10.2011, 23:11
Насколько я понимаю, это не стандартные классы .NET
Так откуда ж нам знать какую библиотеку вы используете и как там все организованно?
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
18.10.2011, 23:19
kolorotur, использует NAudio - я это по коду вижу
Цитата Сообщение от Black Devil Посмотреть сообщение
Ребят как записать звук только в переменную byte[]
Просто считываешь с помощью BinaryReader или FileStream в массив байтов
1
4 / 4 / 1
Регистрация: 25.10.2010
Сообщений: 45
19.10.2011, 15:22  [ТС]
Eugene22, т.е
Вместо
C#
1
writer = new WaveFileWriter(outputFilename, waveIn.WaveFormat);
BinaryReader
Или я ошибаюсь
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
19.10.2011, 15:34
Black Devil, выложите мне код вашей процедуры waveIn_DataAvailable и я вам скажу как
0
4 / 4 / 1
Регистрация: 25.10.2010
Сообщений: 45
19.10.2011, 15:38  [ТС]
Окей!
Ой сори не то кинул
Добавлено через 58 секунд
Code

C#
1
2
3
4
5
6
7
8
9
10
11
12
void waveIn_DataAvailable(object sender, WaveInEventArgs e)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new EventHandler<WaveInEventArgs>(waveIn_DataAvailable), sender, e);
            }
            else
            {
                //Записываем данные из буфера в файл
                writer.WriteData(e.Buffer, 0, e.BytesRecorded);
            }
        }


Добавлено через 1 минуту
Просто мне надо делать так, многократная перезапись файла, но программа на 3 раз пишет что файл занят и все тут

Добавлено через 34 секунды
А файл я использовал как буфер для хранения!
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
19.10.2011, 17:18
Black Devil, e.Buffer - это массив получаемых байтов с аудиокарты каждые 10 миллисекунд. В коде каждый такой массив записывается в поток (грубо говоря в файл) с помощью
C#
1
writer.WriteData(e.Buffer, 0, e.BytesRecorded);
Тебе же вместо этой строки надо прописать строку добавления массива байт в некоторую глобальную коллекцию байт.
Например, есть коллекция, определенная глобольно
C#
1
List<byte> bytes = new List<byte>();
и потом вместо записи в поток, записывать байты в эту коллекцию
C#
1
bytes.AddRange(e.Buffer);
0
4 / 4 / 1
Регистрация: 25.10.2010
Сообщений: 45
19.10.2011, 18:15  [ТС]
Eugene22, т.е bytes можно использовать как byte[] ?
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
19.10.2011, 18:22
Black Devil, нет, чтобы использовать массив, тебе нужно точно знать сколько в нем будет элементов или байтов. А при получении звука это неизвестно, поэтому лучше использовать коллекцию, а если нужен именно массив, то потом коллекцию можно скопировать в массив
0
4 / 4 / 1
Регистрация: 25.10.2010
Сообщений: 45
19.10.2011, 18:24  [ТС]
Блин а как это сделать?

Добавлено через 24 секунды
У меня на сервер отправляется массив байтов!
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
19.10.2011, 18:31
Цитата Сообщение от Black Devil Посмотреть сообщение
Блин а как это сделать?
я ж уже написал
Цитата Сообщение от Eugene22 Посмотреть сообщение
потом коллекцию можно скопировать в массив
кроме того e.Buffer - это уже byte[]
1
4 / 4 / 1
Регистрация: 25.10.2010
Сообщений: 45
19.10.2011, 18:49  [ТС]
О да, все получилось!
0
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
28.08.2015, 09:14
Цитата Сообщение от Eugene22 Посмотреть сообщение
bytes.AddRange(e.Buffer);
А не подскажете как по окончанию записи занести данные из byte в файл?
Т.е. файл должен будет создаваться по кнопке "Стоп". А то у меня что-то не получается)
C#
1
writer.WriteData(bytes);
Пишет что не принимает 1 аргумента и вообще по разному пробовал, все время ошибки)
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
28.08.2015, 10:51
Цитата Сообщение от Nalik Посмотреть сообщение
А не подскажете как по окончанию записи занести данные из byte в файл?
Т.е. файл должен будет создаваться по кнопке "Стоп". А то у меня что-то не получается)
Nalik, посмотрите тут полный пример записи в файл
0
 Аватар для Nalik
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
28.08.2015, 16:00
Цитата Сообщение от Eugene22 Посмотреть сообщение
Nalik, посмотрите тут полный пример записи в файл
Спасибо) Эта статья у меня уже в закладках была)

Решил так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        short[] anArrayOfShorts;
        List<byte> audioBytes = new List<byte>(new byte[] {});
 
        void waveIn_DataAvailable(object sender, WaveInEventArgs e)
        {
            audioBytes.AddRange(e.Buffer);
        }
 
        void waveIn_RecordingStopped(object sender, EventArgs e)
        {
            anArrayOfShorts = audioBytes.Select(i => (short)i).ToArray();
            writer_audio_res[number].WriteData(anArrayOfShorts, 0, (anArrayOfShorts.Length)); //Записываем данные из буфера в файл
            waveIn[number].Dispose();
            waveIn[number] = null;
            writer_audio_res[number].Close();
            writer_audio_res[number] = null;
       }
Но звук при прослушивание wav файла нереальный.. Там столько шумов, там голоса вообще не слышно, если прислушиваться то оооочень плохо можно различить какое-то подобие голоса.

Добавлено через 1 час 50 минут
Решил проблему. Вместо
C#
1
short[] anArrayOfShorts;
использовал
C#
1
byte[] anArrayOfShorts;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.08.2015, 16:00
Помогаю со студенческими работами здесь

NAudio визуализация звука
Здравствуйте! Имеется программа, которая может &quot;выдавать звуки&quot; определенной частоты через динамики, но теперь нужно показать их...

NAudio. Реализовать смену высоты звука(тона) аудио
Доброго времени суток! Пишу синтезатор звуков. При нажатии на кнопку вызываю воспр. звука так: SoundPlayer sp = new...

Воспроизведение Wave файла с помощью NAudio
Доброго время суток. Помогите пожалуйста. Файл прикреплён. Не могу понять как исправить данную ошибку. в строке ...

NAudio Как с помощью этой библиотеки работать c mp3 файлами?
Как с помощью этой библиотеки работать c mp3 файлами? получаю фреймы с данными RawData, так Mp3FileReader reader = new...

Нельзя преобразовать тип function(a: byte;b: byte): byte к integer (Списки)
Создать список из целых чисел.Поменять в списке местами максимальный и минимальный элементы Проблемы c процедурами Pos и Chang: пос...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Переходник 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