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

Получение частот звукового сигнала wav

08.03.2014, 20:25. Показов 12976. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Думаю все знают, что с помощью Beep() можно воспроизводить звуковой сигнал из заданною частотою.
Стоит обратная задача, можно ли как-то средствами C# или DirectX считать частоту звука, поданного из файла(.wav)?
Может кто-то сталкивался, буду очень благодарен за помощь))
Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.03.2014, 20:25
Ответы с готовыми решениями:

Формирование звукового файла wav из данных полученных по UDP
Добрый день! Помогите начинающему, объясните как формируется wav файл из полученных данных задача следующая есть устройство (ардуино с...

Разделение звукового сигнала на слова-отрывки
Задача: Разбить звуковой сигнал(пока конечный) на отдельные файлы содержащие каждый свое слово. Описание работы: В микрофон...

Нужно получить поток бинарных чисел входящего звукового сигнала
Нужно получить поток бинарных чисел входящего звукового сигнала(с микрофона) или получить набор бинарных чисел для уже существующего...

17
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
08.03.2014, 21:02
А что мешает прочитать заголовок wav файла?
Там есть частота.
0
0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 148
08.03.2014, 21:29  [ТС]
Мне нужна частота всех звуков которые там записаны, типо таблица звуков.
Есть там такое?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
08.03.2014, 21:35
Цитата Сообщение от alex995 Посмотреть сообщение
Мне нужна частота всех звуков которые там записаны, типо таблица звуков.
а ты представляешь что такое wav файл?
и как там представлены данные?
Цитата Сообщение от zss Посмотреть сообщение
Там есть частота.
частота чего
0
0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 148
08.03.2014, 21:37  [ТС]
ValeryS, Нет, не работал с этими файлами.
Но думаю там частота кодека которым кодирован он.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
08.03.2014, 21:42
Цитата Сообщение от alex995 Посмотреть сообщение
Но думаю там частота кодека которым кодирован он.
зря так думаешь
там значения уровней с частотой дискретизации , а вот эта частота и указана в заголовке
так что один путь БПФ
0
0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 148
08.03.2014, 21:52  [ТС]
ValeryS, Можно немного по-подробней?)
Что за БПФ?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
08.03.2014, 22:06
Цитата Сообщение от alex995 Посмотреть сообщение
Что за БПФ?
Быстрое Преобразование Фурье
http://ru.wikipedia.org/wiki/Б... ание_Фурье
там есть пример получения спектра из выборок
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
09.03.2014, 13:22
Цитата Сообщение от raxp Посмотреть сообщение
не Фурье единым,
Согласен
0
0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 148
09.03.2014, 14:21  [ТС]
raxp, А есть ли ссылки для опроса внешних аудиоустройств на C#. Ибо делфи не понимаю.
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
09.03.2014, 14:30
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Realtime

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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
using System.IO;
using System.Net.Sockets;
using System.Net;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.DirectX.DirectSound;
using System.Threading;
namespace Test
{
    public partial class Form1 : Form
    {
        bool IsReady = true;
        public Form1()
        {
            InitializeComponent();
            CaptureDevicesCollection captureDevicesCollection = new CaptureDevicesCollection();
            for (int i = 0; i < captureDevicesCollection.Count; i++)
            {
                Devices.Items.Add(captureDevicesCollection[i].Description);
            }
            Devices.SelectedIndex = 0;
        }
        private void StartButton_Click(object sender, EventArgs e)
        {
            string str = Devices.SelectedItem.ToString();
            IsReady = true;
            if (!StartEcho(str, this))
            {
                MessageBox.Show("No matching Sound Card was found");
            }
        }
        private void StopButton_Click(object sender, EventArgs e)
        {
            IsReady = false;
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            IsReady = false;
        }
        private bool StartEcho(string deviceName, Control control)
        {
            WaveFormat waveFormat = new WaveFormat
            {
                SamplesPerSecond = 96000,
                BitsPerSample = 16,
                Channels = 2,
                FormatTag = WaveFormatTag.Pcm
            };
            waveFormat.BlockAlign = (short)(waveFormat.Channels * (waveFormat.BitsPerSample / 8));
            waveFormat.AverageBytesPerSecond = waveFormat.SamplesPerSecond * waveFormat.BlockAlign;
            int notifySize = Math.Max(4096, waveFormat.AverageBytesPerSecond / (8 * 2));
            notifySize -= notifySize % waveFormat.BlockAlign;
            int buffers = 8, captureBufferSize, outputBufferSize;
            captureBufferSize = buffers * notifySize * 2;
            outputBufferSize = buffers * notifySize;
            Capture сapture = default(Capture);
            CaptureDevicesCollection captureDevicesCollection = new CaptureDevicesCollection();
            for (int i = 0; i < captureDevicesCollection.Count; i++)
            {
                if (captureDevicesCollection[i].Description.ToLower().Contains(deviceName.ToLower()))
                {
                    сapture = new Capture(captureDevicesCollection[i].DriverGuid);
                    break;
                }
            }
            if (сapture == null)
                return false;
            else
            {
                CaptureBufferDescription сaptureBufferDescription = new CaptureBufferDescription
                {
                    Format = waveFormat,
                    BufferBytes = captureBufferSize
                };
                CaptureBuffer CaptureBuffer = new CaptureBuffer(сaptureBufferDescription, сapture);
                Device device = new Device();
                device.SetCooperativeLevel(control, CooperativeLevel.Priority);
                BufferDescription bufferDescription = new BufferDescription
                {
                    BufferBytes = outputBufferSize,
                    Format = waveFormat,
                    DeferLocation = true,
                    GlobalFocus = true
                };
                SecondaryBuffer secondaryBuffer = new SecondaryBuffer(bufferDescription, device);
                AutoResetEvent autoResetEvent = new AutoResetEvent(false);
                Notify notify = new Notify(CaptureBuffer);
                BufferPositionNotify bufferPositionNotify1 = new BufferPositionNotify();
                bufferPositionNotify1.Offset = CaptureBuffer.Caps.BufferBytes / 2 - 10;
                bufferPositionNotify1.EventNotifyHandle = autoResetEvent.SafeWaitHandle.DangerousGetHandle();
                BufferPositionNotify BufferPositionNotify2 = new BufferPositionNotify();
                BufferPositionNotify2.Offset = CaptureBuffer.Caps.BufferBytes - 10;
                BufferPositionNotify2.EventNotifyHandle = autoResetEvent.SafeWaitHandle.DangerousGetHandle();
                notify.SetNotificationPositions(new BufferPositionNotify[] { bufferPositionNotify1, BufferPositionNotify2 });
                Thread thread = new Thread((ThreadStart)delegate
                {
                    int offset = 0;
                    CaptureBuffer.Start(true);
                    while (IsReady)
                    {
                        autoResetEvent.WaitOne();
                        Array read = CaptureBuffer.Read(offset, typeof(byte), LockFlag.None, outputBufferSize);
                        secondaryBuffer.Write(0, read, LockFlag.EntireBuffer);
                        offset = (offset + outputBufferSize) % captureBufferSize;
                        secondaryBuffer.SetCurrentPosition(0);
                        secondaryBuffer.Play(0, BufferPlayFlags.Default);
                    }
                    CaptureBuffer.Stop();
                });
                thread.IsBackground = true;
                thread.Start();
                return true;
            }
        }
    }
}
Если задачи воспроизведения тут же не стоит, убираем Play().

Offtime (Из файла)

Как считать файл Wav в массив байт
Как получить с wav-файла данные c NAudio
0
0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 148
10.03.2014, 12:00  [ТС]
raxp, Это проект на C#??
Ибо DirectX SDK только для С++.
Или я что-тоне так понял?

Добавлено через 47 минут
Нашел, все работает)

Добавлено через 11 часов 5 минут
raxp, Спасибо
Я так понял у нас в secondaryBuffer хранятся данные нашего записанного звука(Да/Нет?).
Подскажите, пожалуйста, как мне записать этот звук в wave-файл?
Есть стандартные функц.?
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
10.03.2014, 15:07
createfile(), writefile() http://msdn.microsoft.com/en-u... s.85).aspx
...можно и классом tfilestream.
0
0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 148
10.03.2014, 21:10  [ТС]
raxp, А можно такое-же, только на C#?
И можете помочь мне преобразовать secondaryBuffer в сигнал типа синусоиды, чтобы потом сделать ДПФ?
Спасибо.
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
10.03.2014, 21:16
...первые две WinAPI функции, они под NET будут теми же. Изучите маршаллинг.

преобразовать secondaryBuffer в сигнал типа синусоиды, чтобы потом сделать ДПФ
не надо ничего преобразовывать, у вас уже есть буфер данных, вот его и загоняете сразу в FFT.
0
0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 148
11.03.2014, 22:14  [ТС]
raxp, блин, я не могу понять как этот буфер кинуть в преобразование, что именно содержится в нем?
Надо разбить его на массив?
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
11.03.2014, 22:48
В этом буфере содержатся отсчеты сигнала, сэмпл на данный момент времени. Вам следует прежде чем браться за такие вещи ознакомиться с мультимедиаAPI и форматом PCM, а то вы на элементарных вещах спотыкаетесь, а уже за FFT беретесь. Рано, рано.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2014, 22:48
Помогаю со студенческими работами здесь

Представление звукового файла wav в виде волны
Здравствуйте. Подскажите, пожалуйста, у меня имеется wav файл, как его представить в виде графика зависимости амплитуды от времени? И...

Считывание частоты звукового сигнала
Думаю все знают, что с помощью Beep() можно воспроизводить звуковой сигнал из заданною частотою. Стоит обратная задача, можно ли как-то...

Построить АЧХ звукового файла и нарисовать волны во времени только тех частот которые есть в АЧХ
В С# задали вот такое задание необходимо считать звуковой файл, построить его амплитудно-частотную характеристику и построить волны во...

Чтение звукового файла wav и построение графика сигнала
Чтение звукового файла формата .wav и построение графика сигнала

Написать функцию вычисляющую амплитудный спектр отсчетов звукового сигнала формата WAV
Нужно написать функцию вычисляющую амплитудный спектр отсчетов звукового сигнала формата WAV. Посоветуйте с чего начать выполнение задания,...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru